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 .

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:

  1. descargarlo con la herramienta adb

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

  2. descomprimir base.api y obtener el classes.dex de ello

  3. compruebe el contenido de classes.dex mediante el comando run dexdump classes.dex , la salida es:

introduzca la descripción de la imagen aquí

¿Significa que codehaus/jackson/JsonFactory solo se accede pero no está incluido?

  • Gradle Sube la aplicación android apk a maven repo (nexus)
  • ¡Está faltando android.compileSdkVersion! Error gradle build
  • Gradle no puede resolver dependencias en Android Studio
  • Mvn android: deploy no funciona (a pesar de la confirmación del éxito)
  • ¿Cuál es la diferencia entre los archivos apklib y jar?
  • Publicación de la biblioteca android a jcenter error - Añade un archivo POM a la última versión de tu paquete
  • Gradle: sólo resolver las dependencias para la variante deseada
  • ¿Qué tipo de pitfals existen para la firma de APK para Android?
  • La importación de mi biblioteca de Android en una aplicación no se reconoce como una biblioteca
  • Evitar que la dependencia de Gradle para la biblioteca de soporte sea reemplazada por una versión más reciente
  • ¿Soporta Android Studio Maven?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.