Cómo evitar DEX 64K LIMIT importando la biblioteca correcta
Tuve este problema donde desbordo elLímite de método de 64 k en Dalvik al compilar toda la biblioteca que usé. Comencé a tener este problema cuando importé la Biblioteca de soporte, ya que algunos ya están contenidos en otros, terminó desbordando el límite.
¿Hay alguna forma de verificar si una biblioteca no se utiliza en el proyecto actual o si ya se importó a través de otras dependencias de la biblioteca?Actualmente, estoy excluyendo aquellos que conozco con certeza, pero parece extraño tener que hacer esto a mano.
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:multidex:1.0.1'
compile "com.android.support:percent:${supportLibVersion}"
compile("com.android.support:design:${supportLibVersion}") {
exclude module: 'support-v4'
}
compile("com.android.support:cardview-v7:${supportLibVersion}") {
exclude module: 'support-v4'
}
compile('com.github.nkzawa:socket.io-client:0.4.1') {
exclude group: 'org.json', module: 'json'
}
compile('com.astuetz:pagerslidingtabstrip:1.0.1') {
exclude module: 'support-v4'
}
//...
}
Soluciones hasta ahora:Use un complemento de Gradle - Escribimos un plugin Gradle extremadamente fácil de usar hace algún tiempo que enumera el número de métodos por paquete junto con el número total. Puede encontrar más información al respecto aquí.www.methodscount.com - ¿Se pregunta cuántos métodos agregará una biblioteca en particular a su aplicación? Simplemente ingrese la declaración de "compilación" en este sitio web y le indicará su recuento de métodos, dependencias, tamaño JAR y tamaño DEX.Complemento de Android Studio - Este excelente complemento muestra el recuento de métodos de cada dependencia directamente dentro de Android Studio.Usando la Biblioteca de Soporte MultiDex Si está utilizando Android Studio, el proceso es muy sencillo. Si no es así, recomiendo migrar, ya que Google pronto dejará de admitir el complemento ADT de Eclipse y el antiguo sistema de compilación basado en Ant.Paso 1
Agregue la dependencia para la biblioteca de soporte MultiDex en su build.gradle
dependencies {
...
compile 'com.android.support:multidex:'
...
}
Paso 2
Habilite multi-dexing configurando el indicador multiDexEnabled en la sección buildType o productFlavor de su configuración de gradle.
defaultConfig {
...
multiDexEnabled true
...
}
Ahora, dependiendo de su proyecto, tiene 3 opciones:
Si no ha creado su propia clase de Aplicación, simplemente declareandroid.support.multidex.MultiDexApplication
como su clase de aplicación enAndroidManifest.xml
....
android:name="android.support.multidex.MultiDexApplication"
...
Si ya tiene su propia clase de aplicación, haga que se extiendaandroid.support.multidex.MultiDexApplication
en lugar deandroid.app.Application
Si su clase de aplicación está extendiendo a otra clase y no desea o no puede cambiarla, anule attachBaseContext () como se muestra a continuación:
public class MyApplication extends FooApplication {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}