Mostrar el método dex cuenta por paquete
Estoy trabajando en la aplicación android que está corriendo contra el límite de conteo de método dex. ¿Hay una manera simple de mostrar el recuento de métodos agrupados por paquete ? Puedo obtener el método total de contar, pero mi aplicación tiene varios componentes y estoy tratando de averiguar qué componente es el mayor contribuyente a esto.
- Gradle construye realmente lento con una estructura multi-proyecto
- ¿Hay una manera de obtener la cuenta de los métodos numéricos utilizados en un archivo jar
- Se ha producido un error en la conversión al formato Dalvik: No se puede ejecutar dex: Se sobrepasó el límite superior de GC
- No se puede ejecutar dex: Múltiples archivos dex definen Landroid / support / v7 / util / ThreadUtil $ MainThreadCallback;
- Decompiling DEX en el código fuente de Java
- Excepción al dexar archivos: Se ha interrumpido la traducción
- Error al instalar APK Android Studio
- Cómo depurar código smali de una aplicación de Android?
- Android Studio: Error: La ejecución falló para la tarea ': app: dexDebug'
- Error al instalar la aplicación (INSTALL_FAILED_DEXOPT)
- ¿Por qué debo incluir una dependencia de gradle como `@ aar`
- Cómo evitar el límite de 65k método al utilizar Google Play Services
- Cómo reducir el código - 65k método límite en dex
Esto le dará una idea de cuanto cada jerarquía de paquetes contribuye 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 sólo para las clases en ese directorio / paquete en particular, sin incluir subdirectorios / subpaquetes
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 genera un método por paquete que cuenta más rápido y con mayor precisión que las herramientas basadas en smali que se mencionan en la respuesta de JesusFreke¹. Se puede instalar desde https://github.com/mihaip/dex-method-counts .
[1] que el script desensambla el .dex y vuelve a ensamblarlo por paquete, pero esto significa que los métodos que son referenciados por varios paquetes se cuentan dos veces
Yo y un colega publicado el mes pasado un servicio que puede ayudarle con su propósito: http://www.methodscount.com/ . Muestra el recuento de métodos y otra información ordenada
Bajo la campana 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 calculadas para acelerar el proceso en las solicitudes consecuentes.
Si utiliza Android Studio o IntelliJ, sólo puede instalar el complemento para tener toda la información como una pista útil (el complemento también utiliza el servicio).
Sobre una vieja pregunta, he escrito 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 de DEX que el proyecto AOSP utiliza. Puede encontrarlo en https://github.com/KeepSafe/dexcount-gradle-plugin .
He apreciado el trabajo de todos los desarrolladores de arriba y siempre estoy contento de tener tan buena comunidad, pero desde Android 2.2 estudio de Google equipo ha publicado APK Analyzer -> https://developer.android.com/studio/build/apk-analyzer. Html
Ahora todos tenemos construir en la herramienta para analizar los métodos de contar, el tamaño de nuestros recursos e incluso podemos comparar dos archivos .apk de nuevo unos a otros. Finalmente, todos tenemos esta herramienta construida. El desarrollo de Android está llegando a ser más fácil y más fácil.
BTW: Para encontrar la cantidad de métodos que tiene, abra su archivo .apk en Android Studio (sólo soporte 2.2+) y haga clic en el archivo classes.dex. Después de eso podrás ver los métodos de contar en todas las bibliotecas y en su proyecto también.
También puede intentar utilizar https://github.com/KeepSafe/dexcount-gradle-plugin que le permite ver el método cuenta por paquete de forma gráfica a través de un html.
- Cómo obtener el modelo de teléfono Android, la versión, detalles sdk?
- Función del archivo classes.dex en un archivo apk