У меня есть два проекта:
В тестовом проекте есть тестовый класс, который проверяет соответствующий класс в проекте библиотеки, который импортирует и использует класс 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 и проверить, что есть:
Загрузить его с помощью инструмента adb
Adb pull /data/app/com.my.lib.test-2/base.apk
Unzip base.api & Я получаю от него classes.dex
dexdump classes.dex
, dexdump classes.dex
команду dexdump classes.dex
, вывод:
Означает ли это, что codehaus/jackson/JsonFactory
доступен только, но не включен?