ClassNotFoundException во время тестирования Android-инструмента - PullRequest
4 голосов
/ 08 сентября 2011

Я видел много тем, посвященных этой ошибке, но не смог найти работающего решения.Поэтому я постараюсь полностью описать проблему.

У меня есть проект и тест проекта.Манифест моего проекта:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.toto.app"
  android:versionCode="3"
  android:versionName="0.3.1">
  ...
    <application android:icon="@drawable/icon" android:label="@string/app_name">
    ...
    </application>
</manifest>

И манифест моего тестового проекта:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.toto.app.test"
  android:versionCode="1"
  android:versionName="1.0">
  <uses-sdk android:minSdkVersion="4" />

  <instrumentation android:targetPackage="com.toto.app" android:name="android.test.InstrumentationTestRunner" />

  <application android:icon="@drawable/icon" android:label="@string/app_name">
    <uses-library android:name="android.test.runner" />
  </application>
</manifest>

Вот действие, которое я хочу проверить: src / com / toto / app / Activity / ListActivity, яУ меня есть LaunchActivity (объявленная как начальная операция в манифесте), которая запускает эту операцию.

И в тесте мой ListActivityTest находится по тому же пути (src / com / toto / app / activity).Я также пытался с src / com / toto / app / test.Источник:

public class ListActivityTest extends  ActivityInstrumentationTestCase2<LaunchActivity>{

  private Solo solo;

  public ListActivityTest() {
    super(LaunchActivity.class);
  }

  public void setUp() throws Exception {
    solo = new Solo(getInstrumentation(), getActivity());
    solo.wait(2000);
  } 
}

Кажется, что LaunchActivity найден, но когда он запускает ListActivity, я получаю сообщение об ошибке:

% adb shell am instrument -w com.toto.app.test / android.test.InstrumentationTestRunner

com.toto.app.activity.ListActivityTest: INSTRUMENTATION_RESULT: shortMsg = java.lang.ClassNotFoundException INSTRUMENTATION_RESULT: longMsg = java.otFound..app.activity.ListActivity в загрузчике dalvik.system.PathClassLoader [/system/framework/android.test.runner.jar:/data/app/com.toto.app.test-2.apk:/data/app/com.toto.app-2.apk]

Я не понимаю, почему один класс найден, а другой нет ... В Eclipse он тоже не работает.Я пытался использовать непосредственно ListActivity в тестовом примере, но та же ошибка.Как он собирает этот apk, чтобы избежать какого-то класса?


Это полный стек при использовании adb.

Полный стек в eclipse logcat:

java.lang.NoClassDefFoundError: com.toto.app.activity.ListActivity
 at com.toto.app.activity.LaunchActivity.onCreate(LaunchActivity.java:19)
 at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1072)
 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1794)
 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1851)
 at android.app.ActivityThread.access$1500(ActivityThread.java:132)
 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1038)
 at android.os.Handler.dispatchMessage(Handler.java:99)
 at android.os.Looper.loop(Looper.java:143)
 at android.app.ActivityThread.main(ActivityThread.java:4293)
 at java.lang.reflect.Method.invokeNative(Native Method)
 at java.lang.reflect.Method.invoke(Method.java:507)
 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
 at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: com.toto.app.activity.ListActivity in loader dalvik.system.PathClassLoader[/system/framework/android.test.runner.jar:/data/app/com.toto.app.test-2.apk:/data/app/com.toto.app-1.apk]
 at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
 ... 14 more

1 Ответ

4 голосов
/ 09 сентября 2011

Это потому, что моя деятельность расширяет FragmentActivity, а не простую Activity.

Чтобы решить эту проблему, мне пришлось экспортировать android-support-v4.jar в основной проект.

Надеюсь, что это поможет другим ...

export jar

...