Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


"Salida de escritura de problemas: Demasiadas referencias de campo: 70185; Max es 65536. Puede intentar usar la opción –multi-dex "al crear un proyecto de Android

Me golpeó este error y no encontró ningún golpe para el mensaje de error, así que pensé que compartiría la solución que me ocurrió para salvar a nadie más frente al problema de repetir mi trabajo.

Cuando escribo una nueva librería de Android (apklib) para usarla en una aplicación (grande), estoy recibiendo el siguiente error durante dexing cuando agrego mi nuevo proyecto como una dependencia:

Salida de escritura de problemas: Demasiadas referencias de campo: 70185; Max es 65536.
Puede intentar usar la opción –multi-dex.
Referencias por paquete:
<… larga lista de paquetes con recuentos de campos …>

El paso de construcción particular en el que falla es:

java -jar $ANDROID_SDK/build-tools/19.0.3/lib/dx.jar --dex \ --output=$PROJECT_HOME/target/classes.dex \ <... long list of apklib and jar dependencies elided ...> 

El uso de --multi-dex como recomendado por el mensaje de error podría ser una solución, pero no soy el propietario del proyecto de aplicación y ya tiene un proceso de construcción de gran complejo que dudaría en cambiar sin importar.

Puedo reproducir este problema con un proyecto de biblioteca de prueba no-op que no tiene literalmente campos, pero en la salida de error se muestra como tener más de 6000 campos. De los paquetes enumerados en la salida del error, hay un puñado con cuenta similar del campo 6k +, pero entonces la mayoría extensa tiene cuentas más plausibles del campo <1k.

Este problema es similar al problema de "Demasiados métodos" que Facebook supuestamente hackeó . La solución de FB parece loca, y las únicas soluciones que he encontrado (por ejemplo, este boleto de fallo de Android , o esta , esta respuesta SO , esta otra respuesta SO ) implican cambiar el código de la aplicación principal que está muy por encima del alcance de lo que quiero hacer.

hay alguna otra solucion?

One Solution collect form web for “"Salida de escritura de problemas: Demasiadas referencias de campo: 70185; Max es 65536. Puede intentar usar la opción –multi-dex "al crear un proyecto de Android”

La solución fue cambiar el paquete en el AndroidManifest para que coincida con el paquete de la aplicación principal.

Un manifiesto como este:

 <manifest package="com.example.testlibrary" ... 

Resultó en campos de 6k + y fallo de construcción. Cambiarlo para que coincida con el paquete de la aplicación principal

 <manifest package="com.example.mainapplication" ... 

Resultó en la construcción del proyecto con éxito.

Tenga en cuenta que sólo el paquete en el manifiesto está cambiando, no hice ningún cambio en el origen de la biblioteca de Java o su diseño (el paquete de Java era todavía com.example.testlibrary con la estructura de directorios a coincidir).

Supongo que el nombre del paquete diferente está haciendo que todos los campos de Android para ser incluidos de nuevo en ese paquete. Todos los paquetes en la lista de errores con campos 6k + tenían un nombre de paquete diferente al de la aplicación principal.

Yo también (más tarde, grr), encontró este post del blog que detalla el mismo problema y la eventual solución misma.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.