Reacondicionamiento .jar-s en Android .aar library

Código fuente

Biblioteca

Proyecto que utiliza la Biblioteca

Descripción del problema

Estoy escribiendo Android Library (.aar) en esa biblioteca estoy usando las bibliotecas .jar.

Introduzca aquí la descripción de la imagen

Para evitar la duplicación de dependencias, estoy usando el complemento ShadowJar para volver a empaquetar, como se muestra a continuación:

task shadowJar(type: com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar) { System.out.println("Relocating packages...") relocate 'retrofit' , 'com.codecraft.retrofit' relocate 'org.simpleframework.xml', 'com.codecraft.org.simpleframework.xml' relocate 'com.squareup.okhttp' , 'com.codecraft.com.squareup.okhttp' } 

En la aplicación que está utilizando Android Library (.aar) Tengo dependencia de las bibliotecas mostradas a continuación, sólo para probar que no tengo problemas de duplicación de dependencia.

 dependencies { compile 'com.squareup.retrofit:retrofit:2.0.0-beta1' compile 'com.squareup.retrofit:converter-simplexml:2.0.0-beta1' } 

Pero cuando intento ejecutar la aplicación en Android tengo error siguiente

Introduzca aquí la descripción de la imagen

Error: warning: Ignorar el atributo InnerClasses para una clase interna anónima Error: (com.bea.xml.stream.util.CircularQueue $ 1) que no viene con un atributo Error: associated EnclosingMethod. Esta clase probablemente fue producida por un compilador Error: que no se dirigió al formato de archivo .class moderno. La solución Error recomendada es recompilar la clase desde el origen, usando un compilador actualizado Error: y sin especificar ninguna opción de tipo "-target". La consecuencia de ignorar Error: esta advertencia es que las operaciones de reflexión en esta clase incorrectamente Error: indicar que no es una clase interna. Error: problema de procesamiento de "javax / xml / XMLConstants.class": Error: Uso incorrecto o mal aconsejado de una clase principal (java. * O javax. *) Error: al no crear una biblioteca central. Error: Esto es a menudo debido a inadvertidamente incluyendo un archivo de biblioteca de núcleo Error: en el proyecto de su aplicación, cuando se utiliza un IDE (como Error: Eclipse). Si está seguro de que no está definiendo intencionalmente una clase de Error: core, entonces esta es la explicación más probable de lo que es Error: going on. Error: Sin embargo, es posible que esté intentando definir una clase en un núcleo de Error: espacio de nombres, cuyo origen puede haber tomado, por ejemplo, Error: de un proyecto de máquina virtual que no sea de Android. Esto será más Error: sin duda no funciona. Como mínimo, pone en peligro la compatibilidad de su aplicación con las futuras versiones de la plataforma. Error: También es a menudo de legalidad cuestionable. Error: Si realmente tiene la intención de construir una biblioteca de núcleo – que es sólo Error: apropiado como parte de la creación de una máquina virtual completa Error: distribución, a diferencia de la compilación de una aplicación – a continuación, utilice Error: "Para suprimir este mensaje de error. Error: Si sigue adelante y utiliza "–core-library" pero de hecho es un error: construyendo una aplicación, entonces se advierte que su aplicación Error: todavía no se puede construir o ejecutar, en algún momento. Por favor, sea un error: preparado para clientes enojados que encuentran, por ejemplo, que su aplicación Error: deja de funcionar una vez que actualizan su sistema operativo Error:. Usted será el culpable de este problema. Error: Si está usando legítimamente algún código que está en un paquete Error: core, entonces la alternativa segura más fácil que tiene es Error: reempaque ese código. Es decir, mueva las clases en cuestión en Error: su propio espacio de nombres de paquete. Esto significa que nunca estarán en Error: conflicto con las clases centrales del sistema. JarJar es una herramienta que puede ayudar a Error: usted en este esfuerzo. Si usted encuentra que usted no puede hacer esto, entonces Error: eso es una indicación de que el camino en el que se encuentra en última instancia Error: conducir a dolor, sufrimiento, dolor y lamentación. Error: 1 error; Aborting: app: transformClassesWithDexForDebug FAILED Error: Error de ejecución para la tarea ': app: transformClassesWithDexForDebug'.

Com.android.build.api.transform.TransformException: java.lang.RuntimeException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: java.lang.UnsupportedOperationException

POR FAVOR TENGA EN CUENTA que este problema no apareció en el caso si agrego sólo la dependencia de retroadaptación

 dependencies { compile 'com.squareup.retrofit:retrofit:2.0.0-beta1' } 

¿Cuál es la razón y cómo puedo solucionar este error?

Cuando incluye Jars en su librería o aplicación, puede incluir archivos que ya han sido compilados usando una versión java diferente o con una configuración diferente a la suya y esto puede causar problemas como el que está experimentando.

Supongo que la dependencia que utiliza se refiere a una biblioteca que causa el problema que crea el tarro.

Si es crítico para usted no utilizar dependencias – considere descargar el código para la lib que está utilizando (suponiendo que son de código abierto y no hay limitaciones legales) y compilación con su aplicación como módulos adicionales en su proyecto en lugar de agregar el tarro . Si lo haces – definitivamente deberías considerar lo que escribió jmols sobre el tamaño lib y el método count.

¡Buena suerte!

Excluir algunos módulos me ayudó con el mismo error:

 compile ('com.squareup.retrofit2:converter-simplexml:2.1.0'){ exclude group: 'xpp3', module: 'xpp3' exclude group: 'stax', module: 'stax-api' exclude group: 'stax', module: 'stax' } 

Enlace fuente

  • ¿Crear una biblioteca para el desarrollo de Android?
  • ¿Puedo usar una cadena de recursos para un nombre de paquete?
  • ¿Cómo enviar parámetros desde un clic de notificación a una actividad?
  • Identificador de paquete no válido al obtener la bolsa para el número de recurso 0xffffffff
  • ¿Guarda Android los archivos .apk? ¿si es así, donde?
  • ActivityNotFoundException cuando targetClass del paquete diferente en PreferenceScreen
  • ¿Cuál es la diferencia entre los paquetes android.opengl y javax.microedition.khronos.opengles?
  • Parcel Lista de Lista de objeto Parcelable
  • ¿Puede alguien usar el mismo prefijo de nombre de paquete?
  • Cordova + Marco iónico - ¿Cómo cambiar el nombre del paquete con seguridad?
  • ¿Qué es SortedList <T> trabajando con RecyclerView.Adapter?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.