Como evitar o DEX 64K LIMIT importando a biblioteca correta
Eu tive esse problema em que estouro oLimite de método de 64k em Dalvik ao compilar toda a biblioteca que usei. Comecei a ter esse problema ao importar a Biblioteca de suporte, pois algumas já estão contidas em outras e acabou excedendo o limite.
Existe uma maneira de verificar se uma biblioteca não está sendo usada no projeto atual ou já foi importada por meio de outras dependências da biblioteca?Atualmente, estou excluindo aqueles que tenho certeza, mas parece estranho ter que fazer isso manualmente.
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'
}
//...
}
Soluções até agora:Use um plugin Gradle - Escrevemos um plug-in Gradle extremamente fácil de usar há algum tempo, que lista o número de métodos por pacote, juntamente com o número total. Você pode encontrar mais informações sobre isso aqui.www.methodscount.com - Quer saber quantos métodos uma biblioteca específica adicionará ao seu aplicativo? Basta digitar a instrução 'compilar' neste site e informará a contagem do método, as dependências, o tamanho do JAR e o tamanho do DEX.Plug-in do Android Studio - Este excelente plugin mostra a contagem de métodos de cada dependência dentro do Android Studio.Usando a biblioteca de suporte MultiDex Se você estiver usando o Android Studio, o processo é muito direto. Caso contrário, recomendo migrar, pois o Google poderá em breve abandonar o suporte ao plug-in Eclipse ADT e ao antigo sistema de compilação baseado em Ant.Passo 1
Adicione a dependência para a biblioteca de suporte MultiDex em seu build.gradle
dependencies {
...
compile 'com.android.support:multidex:'
...
}
Passo 2
Ative a multi-destinação, configurando o sinalizador multiDexEnabled na seção buildType ou productFlavor da sua configuração de gradle.
defaultConfig {
...
multiDexEnabled true
...
}
Agora, dependendo do seu projeto, você tem 3 opções:
Se você não criou sua própria classe Application, basta declararandroid.support.multidex.MultiDexApplication
como sua classe de aplicativoAndroidManifest.xml
....
android:name="android.support.multidex.MultiDexApplication"
...
Se você já possui sua própria classe Application, faça-a estenderandroid.support.multidex.MultiDexApplication
ao invés deandroid.app.Application
Se a sua classe Application estiver estendendo alguma outra classe e você não quiser ou não puder alterá-la, substitua o attachBaseContext () como mostrado abaixo:
public class MyApplication extends FooApplication {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}