ClassNotFoundException pero puedo encontrar esta clase en classes.dex
Tengo dos proyectos:
- uno es mi proyecto de biblioteca android (com.my.lib),
- uno es un proyecto de prueba para probar el proyecto de la biblioteca (com.my.lib.test).
En el proyecto de prueba, hay una clase de prueba que prueba la clase correspondiente en el proyecto de biblioteca que importa & usa la clase org.codehaus.jackson.JsonFactory
.
- Obtención de ClassNotFoundException al ejecutar pruebas Robolectric con el complemento Maven surefire
- update android-query maven biblioteca dependencia
- AdMob de Android y Maven
- Maven android plugin: No se puede encontrar una ruta de acceso a Android SDK
- Maven desarrolla la aplicación Android - BuildConfig
En proyecto de prueba, he añadido dependencia en maven construir:
<dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.13</version> </dependency>
y
<dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-core-asl</artifactId> <version>1.9.13</version> </dependency>
El AndroidManifest.xml del proyecto de prueba es así:
<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>
cuando ejecuto la prueba de instrumentación , mis pruebas se ejecutan, pero al ejecutar esa clase de prueba en particular, siempre obtengo el siguiente error de tiempo de ejecución:
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)
Por lo tanto, el registro anterior se queja de que no pudo encontrar la clase org.codehaus.jackson.JsonFactory
en esas rutas.
PERO, cuando descomprimo el archivo APK de mi proyecto de prueba ( MyLibTest.apk
), y comprobar el contenido de classes.dex usando Android SDK proporcionó la herramienta dexdump , veo la org/codehaus/jackson/JsonFactory
está ahí!
aquí está el comando y la salida:
dexdump classes.dex | grep 'org.codehaus.jackson.JsonFactory' type : 'Lorg/codehaus/jackson/JsonFactory;' type : 'Lorg/codehaus/jackson/JsonFactory;'
¿Por qué obtengo ClassNotFoundException
aunque puedo encontrar esta clase en classes.dex del archivo APK del proyecto de prueba?
=== UPDATE ===
Dado que el registro de errores muestra que trata de encontrar desde la ruta de acceso "/data/app/com.my.lib.test-2/base.apk"
Por lo tanto, también traté de descargar ese base.apk, y comprobar lo que hay por:
-
descargarlo con la herramienta adb
adb pull /data/app/com.my.lib.test-2/base.apk
-
descomprimir base.api y obtener el classes.dex de ello
- compruebe el contenido de classes.dex mediante el comando run
dexdump classes.dex
, la salida es:
¿Significa que codehaus/jackson/JsonFactory
solo se accede pero no está incluido?
- Ionic Gradle failure "No se pudo encontrar com.android.tools.build:gradle:2.2.3"
- No se encontraron artefactos que coincidan con el patrón de archivo "** / target / *. Apk"
- Generar informes de cobertura de código para Android Maven Library Project
- Java.lang.UnsatisfiedLinkError después de actualizar a Android 5.0
- ¿Cómo resuelvo estos errores internos de Maven?
- ¿Cómo tratar la carpeta de origen src / test / java que falta en el proyecto Android / Maven?
- Compartir código en Android Studio
- Cómo utilizar artifactoryPublish para publicar artefactos de liberación y depuración
- Entrada duplicada de TransformException para com / google / android / gms / measurement / AppMeasurementService.class
- Actualizar la aplicación de Android en el dispositivo COSU