Lee*_*fin 5 android jackson maven dex android-instrumentation
我有两个项目:
在测试项目中,有一个测试类,用于测试导入和使用org.codehaus.jackson.JsonFactory类的库项目中的相应类。
在测试项目中,我在 maven build 中添加了依赖项:
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
和
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<version>1.9.13</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
测试项目的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>
Run Code Online (Sandbox Code Playgroud)
当我运行仪器测试时,我的测试被执行,但在执行该特定测试类时,我总是收到以下运行时错误:
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)
Run Code Online (Sandbox Code Playgroud)
所以,上面的日志抱怨它在这些路径上找不到 org.codehaus.jackson.JsonFactory类。
但是,当我解压缩我的测试项目的 APK 文件 ( MyLibTest.apk),并使用 Android SDK 提供的dexdump工具检查classes.dex的内容时,
我看到了! org/codehaus/jackson/JsonFactory
这是命令和输出:
dexdump classes.dex | grep 'org.codehaus.jackson.JsonFactory'
type : 'Lorg/codehaus/jackson/JsonFactory;'
type : 'Lorg/codehaus/jackson/JsonFactory;'
Run Code Online (Sandbox Code Playgroud)
为什么我ClassNotFoundException可以在测试项目的 APK 文件的classes.dex中找到这个类?
=== 更新 ===
由于错误日志显示它试图从路径“/data/app/com.my.lib.test-2/base.apk”中查找
因此,我还尝试下载该 base.apk,并通过以下方式检查其中的内容:
用adb工具下载
adb pull /data/app/com.my.lib.test-2/base.apk
解压 base.api & 我从中得到 classes.dex
通过运行命令检查classes.dex的内容dexdump classes.dex,输出为:
这是否意味着codehaus/jackson/JsonFactory仅访问但不包括在内?
| 归档时间: |
|
| 查看次数: |
785 次 |
| 最近记录: |