ClassNotFoundException во время тестового инструмента для Android

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

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

<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> ? <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.lang.ClassNotFoundException: com.toto.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.

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

 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 

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

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

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

Экспортная банка

Intereting Posts
Расширение класса в приложении в библиотеке проектов Android? Воспроизведение кросс-платформенных, мобильных, MIDI в Python для Kivy – это возможно? React native Required Unknown Module для настраиваемого собственного компонента CUDA с opencv для Android Использование JSON-файла в приложениях для Android-приложений Как сделать форму с левым верхним округлым углом и левым нижним закругленным углом? Пользовательские круговые виды AndroidHttpClient не может getEntity (). GetContent () после закрытия Android sdk загрузчик контента на 0% … и ничего не работает ToDataURL не работает в браузерах для Android Вход в систему Android android magento (аутентификация) с использованием SOAP API Как передать правильные данные в шейдерную программу OpenGL-ES 2.0 Как получить местоположение с помощью AsyncTask Как обеспечить, чтобы код проекта библиотеки Android выполнялся только в одном из установленных приложений, которые его интегрировали? Добавить библиотеку github в зависимости от проекта Android-Studio