ClassNotFoundException, но я могу найти этот класс в классах.dex

У меня есть два проекта:

  • Один мой проект библиотеки андроидов (com.my.lib),
  • Один из них – тестовый проект для тестирования проекта библиотеки (com.my.lib.test).

В тестовом проекте есть тестовый класс, который проверяет соответствующий класс в проекте библиотеки, который импортирует и использует класс org.codehaus.jackson.JsonFactory .

В тестовом проекте я добавил зависимость в maven build:

 <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.13</version> </dependency> 

а также

 <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-core-asl</artifactId> <version>1.9.13</version> </dependency> 

AndroidManifest.xml тестового проекта выглядит так:

 <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.my.lib.test" android:versionCode="1" android:versionName="1.2" > <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.my.lib" /> <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="21" /> <application> <uses-library android:name="android.test.runner" /> </application> </manifest> 

Когда я запускаю контрольно-измерительный тест, мои тесты выполняются, но при выполнении этого конкретного тестового класса я всегда получаю следующую ошибку времени выполнения:

 java.lang.ClassNotFoundException: Didn't find class "org.codehaus.jackson.JsonFactory" on path: DexPathList[[zip file "/system/framework/android.test.runner.jar", zip file "/data/app/com.my.lib.test-2/base.apk", zip file "/data/app/com.my.lib-1/base.apk"],nativeLibraryDirectories=[/data/app/com.my.lib.test-2/lib/arm, /data/app/com.my.lib-1/lib/arm, /vendor/lib, /system/lib]] 07-06 18:06:08.041 24082 24998 E AndroidRuntime: at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 07-06 18:06:08.041 24082 24998 E AndroidRuntime: at java.lang.ClassLoader.loadClass(ClassLoader.java:511) 

Таким образом, в приведенном выше журнале жалуется, что он не смог найти класс org.codehaus.jackson.JsonFactory на этих путях.

НО, когда я разархивирую файл APK моего тестового проекта ( MyLibTest.apk ) и проверяю содержимое классов.dex с помощью Android SDK, предоставляемого инструментом dexdump , я вижу, что org/codehaus/jackson/JsonFactory есть!

Вот команда и вывод:

 dexdump classes.dex | grep 'org.codehaus.jackson.JsonFactory' type : 'Lorg/codehaus/jackson/JsonFactory;' type : 'Lorg/codehaus/jackson/JsonFactory;' 

Почему я получаю ClassNotFoundException хотя я могу найти этот класс в файле classes.dex файла APK тестового проекта?

=== UPDATE ===

Поскольку журнал ошибок показывает, что он пытается найти по пути «/data/app/com.my.lib.test-2/base.apk»,

Итак, я также попытался загрузить этот base.apk и проверить, что есть:

  1. Загрузить его с помощью инструмента adb

    Adb pull /data/app/com.my.lib.test-2/base.apk

  2. Unzip base.api & Я получаю от него classes.dex

  3. Проверьте содержимое dexdump classes.dex , dexdump classes.dex команду dexdump classes.dex , вывод:

Введите описание изображения здесь

Означает ли это, что codehaus/jackson/JsonFactory доступен только, но не включен?