android - tiempo - ¿Cómo resolver el problema con la limitación del compilador Dalvik en los métodos de 64K?




tiempo de ejecucion dalvik o art (5)

Mi equipo y yo hemos heredado un gran proyecto de Android de otro equipo. Se informa que toda la aplicación con todas las bibliotecas incluidas tiene alrededor de 35000 métodos. Ahora tenemos la tarea de implementar un nuevo servicio en la aplicación donde necesitamos usar Protocol Buffers.

El problema es que el archivo .jar generado con todos los archivos .proto necesarios crea otro par de 35000 métodos, que son 70000 métodos. Y si no lo sabe, el compilador de Android tiene una limitación de 65536 métodos por archivo .dex. Claramente hemos superado ese límite y estamos obteniendo el siguiente error al intentar compilar la aplicación:

Unable to execute dex: method ID not in [0, 0xffff]: 65536
Conversion to Dalvik format failed: Unable to execute dex: method ID not in [0, 0xffff]: 65536

Sí, la arquitectura de la aplicación probablemente debería ser reestructurada, pero eso llevará tiempo. Y por ahora estamos tratando de encontrar una solución para solucionar este problema temporalmente.

¿Alguna sugerencia?


En las versiones de los servicios de Google Play anteriores a 6.5, tenía que compilar todo el paquete de API en su aplicación. En algunos casos, hacerlo hizo más difícil mantener el número de métodos en su aplicación (incluidas las API de marco, los métodos de biblioteca y su propio código) bajo el límite de 65,536.

Desde la versión 6.5, en su lugar, puede compilar selectivamente las API del servicio Google Play en su aplicación. Por ejemplo, para incluir solo las API de Google Fit y Android Wear, reemplace la siguiente línea en su archivo build.gradle:

compile 'com.google.android.gms:play-services:6.5.87'

con estas lineas:

compile 'com.google.android.gms:play-services-fitness:6.5.87'
compile 'com.google.android.gms:play-services-wearable:6.5.87'

Para más referencia, puede hacer clic here



Recientemente hemos agregado Nano Protobufs a Android, lo que reduce significativamente la cantidad de métodos generados.


Si está utilizando eclipse, este es el trabajo más fácil que se puede hacer alrededor de ¡ Haga clic aquí!


Square tuvo problemas similares y construyeron Wire para lidiar con la explosión del método causada por los protobufs. Afirman haber matado 10.000 métodos.





dex