Herramientas SDK actualizadas y ADT a 17 y ahora obtener VerifyErrors
Tengo un proyecto que hace referencia a dos proyectos de biblioteca. Después de actualizar las herramientas ADT y SDK a la versión 17 , la aplicación se bloquea en cuanto se produce una referencia a una clase definida en uno de los proyectos de la biblioteca. Errores como:
Unable to resolve superclass of Lcom/my/package/name/MyActivity; (118) Link of class 'Lcom/my/package/name/MyActivity;' failed VFY: unable to find class referenced in signature (Lcom/my/package/name/MyActivity;)
y:
- Biblioteca ya agregada: Gradle Build
- Cómo importar módulo sin crear copia en Android Studio
- Construir variantes en Gradle para un proyecto de biblioteca en Android
- Error de proyecto de Android Studio Library
- ¿Para comprobar o no verificar "IsLibrary"?
FATAL EXCEPTION: main java.lang.VerifyError: my/package/name/util/SomeClass at my.package.name.App.onCreate(App.java:120) at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:969) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3925) at android.app.ActivityThread.access$1300(ActivityThread.java:122) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1184) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4340) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) at dalvik.system.NativeStart.main(Native Method)
(Mi paquete y las clases no son nombrados de esa manera, solo los modificaron para publicarlos aquí)
¿Alguna idea sobre lo que está sucediendo aquí? Por lo que puedo decir que no hay errores de compilación y mi proyecto parece que hace referencia al proyecto de biblioteca correctamente.
- Proguard.cfg no funciona en aplicaciones exportadas usando LIBRARY
- Cómo ignorar los lanzadores de AndroidManifest.xml de un proyecto de biblioteca
- Cómo convertir un proyecto de biblioteca de Android en un JAR externo?
- Cómo construir jar para el proyecto de la biblioteca de Android en Intellij Idea sin contenido innecesario
- ¿Cómo ejecutar pruebas de unidad para proyectos de biblioteca de Xamarin (iOS y Android)?
- Módulo de importación al proyecto gradle en android studio 0.4.0v
- No se pudo encontrar Library.apk!
- Cómo hacer referencia a un activo en un proyecto de biblioteca
Tuve el mismo problema. Encontrar este post: Cómo arreglar el "NoClassDefFoundError" con ADT 17 me ahorrar algo de frustración.
Whew, que era miedo, pero sólo traté de un montón de cosas diferentes hasta que funcionó. En algún lugar dentro de todo esto, lo resolvió. Mi proyecto de biblioteca tiene un puñado de tarros agregados a la carpeta "lib" y adjuntos a la ruta de construcción.
He leído esta nota de registro de cambios: http://tools.android.com/recent/dealingwithdependenciesinandroidprojects sobre cambios en bibliotecas y dependencias. Me di cuenta de esto:
Los proyectos tienen carpetas de origen, así como el proyecto de biblioteca y las dependencias de archivos jar. Con ninguna otra configuración necesaria que añadir proyectos de biblioteca como una dependencia en project.properties, el classpath de un proyecto se rellena automáticamente con:
The content of the project's libs/*.jar The output of the Library Projects. The Library Projects' libs/*.jar
Por alguna razón, la carpeta de mi proyecto de biblioteca se llamaba "lib" y no "libs". He estado usando de esa manera durante casi dos años sin ningún problema, pero seguí adelante y lo cambié a "libs". A continuación, actualizó el proyecto, y apagó la bandera "es la biblioteca", y luego otra vez para asegurarse de que vio ese cambio.
Además, con las nuevas herramientas, mencionan que maneja incluyendo los tarros del proyecto de la biblioteca en el proyecto que hace referencia a la biblioteca. Hasta este punto había agregado los jarros del proyecto de la biblioteca al proyecto de referencia manualmente. Así que entré en el proyecto de referencia, y eliminado los tarros de la ruta de construcción. Entonces, cuando en las propiedades del proyecto y se eliminó el proyecto de la biblioteca y se volvió a agregar.
Por último, me di cuenta de que un archivo jar estaba en la carpeta del proyecto de la biblioteca, pero no estaba siendo utilizado. Estaba justo en la carpeta. Quité ese archivo.
Así que en algún lugar allí comenzó a funcionar de nuevo. Me imagino que la verdadera solución estaba cambiando "lib" a "libs", pero quería asegurarse de que lo mencioné todo en caso de que ayuda a cualquier otro desarrollador experimentando miedo y pánico en sus corazones. ¡Buena suerte!
@kargi
Por regla general, creo que la solución aquí y aquí es una muy mala práctica. Maven resolvió este negocio de carpetas lib ridículo hace mucho tiempo, pero Maven tampoco es muy eficiente en la construcción de Android, así que recomendaría usar la función de exportación de Eclipse, como describo aquí .
- Quite la sombra debajo de TabLayout en android
- ¿Cómo puedo obtener el almacenamiento externo correcto en Samsung y todos los demás dispositivos?