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.
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
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?
- Despliegue del parcelero dando datos incorrectos
- Iniciar actividad desde otro paquete
- Carpetas de estudio androide dentro de paquetes
- ¿Cómo hacer referencia a los "activos" de Android a través de paquetes?
- Pasar arraylist de objetos definidos por el usuario a Intent android
- Java - android UDP falta de fiabilidad
- Envía la transmisión de un apk / paquete a otro apk / package
- ¿Cómo evito que Android Studio colapse automáticamente mis paquetes en la navegación de proyectos?
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
- Cómo configurar la altura de la barra de acción mediante programación
- Enviar mensaje de wearable al teléfono y luego responder inmediatamente