NoClassDefFoundError en Runtime en clase dentro de .AAR en Android Studio
He estado investigando durante muchas horas acerca de una posible solución a esto, pero lo que sea que lo intente simplemente falla. Aquí está la situación explicada:
Tengo este proyecto de biblioteca en Android Studio que genera el archivo app-debug.aar
. A continuación, agrego este nuevo módulo en el proyecto de implementación, siguiendo el asistente para importar .JAR / .AARs. Recojo la aplicación .aar
y actualizo la dependencia para :app
en la estructura del proyecto.
- Empaque el código android en el archivo jar
- Iniciar y detener una notificación del receptor de emisión
- Android: hace que la actividad A espere a que la actividad B termine y devuelva algunos valores
- ¿Cómo habilitar los menús predeterminados por defecto en la vista web android?
- Android, Java, Creación de una miniatura que mantiene la relación de aspecto
Una vez que el proyecto se limpia (incluso usando ./gradlew clean
Mac OS X) puedo hacer referencias de esta clase y sus métodos en cualquiera de las actividades.
Ahora, en tiempo de ejecución, una vez construido e instalado en los dispositivos reales, la aplicación se bloqueará lanzando la Excepción de tiempo de ejecución antes mencionada.
Nota: Estoy importando el .aar
porque necesitaría proteger el código y tiene recursos para que un .jar
esté fuera de la cuestión. Y si importar el módulo de biblioteca (con fuente y todos en lugar de un .aar
), entonces la aplicación no tiene problemas en tiempo de ejecución.
He intentado todo y si alguien puede arrojar algo de luz sobre lo que podría ser, será muy apreciado.
La clase extiende ViewGroup
y se instancia en tiempo de ejecución en caso de que implique algo. El código se me dio para que los cambios importantes podrían no ser posible a menos que sea absolutamente necesario.
Gracias de antemano a todos!
Armando
- Error al iniciar la actividad Android Studio 2.1
- No se pueden obtener eventos en mi libgdx Actor
- Página de detalles de las aplicaciones de lanzamiento de Android
- No se encontraron propiedades key.store y key.alias en build.properties
- Cómo usar Google Cloud Connection Server para enviar mensajes de GCM en sentido ascendente
- Org.json.JSONException: Objeto no terminado en el carácter 14
- Manejador o temporizador android
- Temporizador de TextView de Android
El error NoClassDefFound
ha sucedido realmente a una biblioteca de compatibilidad con versiones anteriores utilizada por esta clase que mencioné en la pregunta ("Clase A"). No se dieron otros detalles aparte de la clase A no se pudo encontrar y más tarde se descubrió que otra clase tenía un problema similar, pero estaba apuntando a que compat lib con la misma excepción y me di cuenta de que la clase A también estaba llamando a sus métodos y la aplicación de su devoluciones de llamada Al superar la min version
(para usar la API nativa) podría superar ese problema. En realidad era un problema de incluir esa biblioteca backward-comp en el .aar
o así parece. Si entiendo mejor este tema, actualizaré esta "respuesta".
Para aquellos que todavía están buscando la solución, siguiendo dos opciones funcionó para mí para resolver el mismo problema que el OP ha mencionado.
-
Incluya también la dependencia de la biblioteca (problemática) en el módulo de destino, es decir, en mi caso incluyo el protobuf-lite como una dependencia de mi módulo de biblioteca pero obteniendo el error
noclassdefFound
cuando lib importado como.aar
en el módulo de aplicación. Como una solución,protobuf-lite
añadido laprotobuf-lite
a mi módulo de aplicación también y funcionó como encanto. -
La segunda opción que trabajó para mí que en lugar de añadir la dependencia gradle 'compilar' com.google.protobuf: protobuf-lite: 3.0.1 ', he descargado el protobuf-jar de maven y agregado manualmente a las librerías de mi módulo de biblioteca, y el problema se resolvió.
No sé qué es lo que está mal con el plugin gradle, pero espero que ayude a alguien buscando el mismo problema.
- Preferencia setIcon a ColorDrawable no funciona en Android 5.0 Lollipop
- Reproducir video en el dispositivo android con el reproductor del dispositivo