我有两个项目:
在测试项目中,有一个测试类,用于测试库项目中相应的类,导入&使用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>
当我运行 instrumentation 测试时,我的测试会被执行,但是在执行该特定测试类时,我总是会遇到以下运行时错误:
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
),并使用提供的Android SDK检查 classes.dex 的内容时> dexdump 工具,
我看到 org/codehaus/jackson/JsonFactory
就在那里!
这是命令和输出:
dexdump classes.dex | grep 'org.codehaus.jackson.JsonFactory'
type : 'Lorg/codehaus/jackson/JsonFactory;'
type : 'Lorg/codehaus/jackson/JsonFactory;'
为什么我得到ClassNotFoundException
虽然我可以在测试项目的APK文件的 classes.dex 中找到这个类?
===更新===
由于错误日志显示它试图从路径“/data/app/com.my.lib.test-2/base.apk”中找到
所以,我也尝试下载那个base.apk,并检查一下: