unable - error while merging dex archives android studio
Mostrando el conteo del método dex por paquete (6)
Aprecio el trabajo realizado por todos los desarrolladores anteriores y siempre estoy feliz de tener una comunidad tan buena, pero desde Android el equipo de Android 2.2 ha lanzado APK Analyzer -> https://developer.android.com/studio/build/apk-analyzer.html
Ahora todos tenemos una herramienta de compilación para analizar el recuento de métodos, el tamaño de nuestros recursos e incluso podemos comparar dos archivos .apk uno contra el otro. Finalmente, todos tenemos esta herramienta incorporada. El desarrollo de Android es cada vez más fácil.
Por cierto: para encontrar la cantidad de métodos que tiene, abra su archivo .apk en Android Studio (soporte 2.2+ solamente) y haga clic en el archivo classes.dex. Después de eso, podrá ver el recuento de métodos en todas las bibliotecas y en su proyecto también.
Estoy trabajando en la aplicación de Android que se está ejecutando en contra del límite de conteo del método dex. ¿Hay una manera simple de mostrar el recuento de métodos agrupados por paquete ? Puedo obtener el método total, pero mi aplicación tiene múltiples componentes y estoy tratando de descubrir qué componente es el que más contribuye a esto.
Aprovechando una vieja pregunta, escribí un plugin de Gradle que informará el número de métodos en su APK en cada compilación. Utiliza el mismo código de análisis DEX que utiliza el proyecto AOSP. Puede encontrarlo en https://github.com/KeepSafe/dexcount-gradle-plugin .
Esto le dará una idea de cuánto contribuye cada jerarquía de paquetes al recuento de métodos. Los resultados incluyen todas las clases en ese directorio / paquete y todos los subdirectorios / paquetes.
baksmali blah.apk -o out
cd out
find * -type d -print -exec sh -c "smali {} -o {}/classes.dex && sh -c /"dexdump -f {}/classes.dex | grep method_ids_size/"" /;
Esta versión ligeramente modificada es similar, excepto que es solo para las clases en ese directorio / paquete particular, sin incluir ningún subdirectorio / subpaquete.
baksmali blah.apk -o out
cd out
find * -type d -print0 | xargs -0 -I{} sh -c "echo {} && find {} -maxdepth 1 -name /"*.smali/" -print0 | xargs -r -0 smali -o {}/classes.dex"
find -name "*.dex" -print -exec sh -c "dexdump -f {} | grep method_ids_size" /;
He escrito una herramienta de dex-method-counts
que da como resultado el conteo de métodos por paquete más rápido y con mayor precisión que las herramientas basadas en smali a las que se hace referencia en la respuesta de JesusFreke¹. Se puede instalar desde github.com/mihaip/dex-method-counts .
[1] esa secuencia de comandos desensambla .dex y la vuelve a ensamblar por paquete, pero esto significa que los métodos a los que hacen referencia los paquetes múltiples se cuentan dos veces
También puede intentar usar https://github.com/KeepSafe/dexcount-gradle-plugin que le permite ver el método cuenta por paquete gráficamente a través de un html.
Yo y un colega publicamos el mes pasado un servicio que puede ayudarlo con su propósito: http://www.methodscount.com/ . Muestra el recuento de métodos y otra información ordenada
Bajo el capó usamos gradlew
para obtener las dependencias y la herramienta Android SDK dx
para calcular la información dex. Aplicamos el procedimiento recursivamente a la biblioteca y sus dependencias. También persistimos en los resultados de las bibliotecas ya compiladas para acelerar el proceso en las solicitudes consiguientes.
Si usa Android Studio o IntelliJ, puede instalar el complemento para tener toda la información como una pista útil (el complemento también usa el servicio).