Wie vermeide ich DEX 64K LIMIT, indem ich die richtige Bibliothek importiere

Ich hatte dieses Problem, bei dem ich das @ überlau 64k Methodenlimit in Dalvik beim Kompilieren der gesamten Bibliothek, die ich verwendet habe. Dieses Problem trat auf, als ich die Support-Bibliothek importierte, da einige bereits in anderen enthalten sind und das Limit überschritten wurde.

Kann überprüft werden, ob eine Bibliothek im aktuellen Projekt nicht verwendet wird oder bereits über andere Bibliotheksabhängigkeiten importiert wurde?

erzeit schließe ich diejenigen aus, die ich sicher kenne, aber es scheint seltsam, dies von Hand tun zu müsse

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'
    }
//...
}
isherige Lösungen:Verwende ein Gradle Plugin - Wir haben vor einiger Zeit ein extrem benutzerfreundliches Gradle-Plugin geschrieben, das die Anzahl der Methoden pro Paket zusammen mit der Gesamtanzahl auflistet. Weitere Informationen dazu finden Sie hier. www.methodscount.com - Sie fragen sich, wie viele Methoden eine bestimmte Bibliothek zu Ihrer Anwendung hinzufügt? Geben Sie einfach die "compile" -Anweisung auf dieser Website ein und Sie erfahren, wie viele Methoden, Abhängigkeiten, JAR-Größe und DEX-Größe vorhanden sind.Android Studio Plugin - Dieses hervorragende Plugin zeigt die Anzahl der Methoden für jede Abhängigkeit direkt in Android Studio an.Mit der MultiDex Support Library Wenn Sie Android Studio verwenden, ist der Vorgang sehr einfach. Wenn nicht, empfehle ich dringend die Migration, da Google möglicherweise bald die Unterstützung für das Eclipse ADT-Plugin und das alte Ant-basierte Build-System einstellen wird.

Schritt

Hinzufügen der Abhängigkeit für die MultiDex-Unterstützungsbibliothek in Ihrem build.gradle

dependencies { 
... 
   compile 'com.android.support:multidex:' 
   ... 
}

Schritt

Ermöglichen Sie Multi-Dexing, indem Sie das Flag "multiDexEnabled" im Abschnitt "buildType" oder "productFlavor" Ihrer Gradle-Konfiguration setzen.

defaultConfig { 
   ... 
multiDexEnabled true 
... 
}

Jetzt haben Sie je nach Projekt 3 Möglichkeiten:

Wenn Sie noch keine eigene Anwendungsklasse erstellt haben, deklarieren Sie einfachandroid.support.multidex.MultiDexApplication als Ihre Anwendungsklasse inAndroidManifest.xml

   .... 
   android:name="android.support.multidex.MultiDexApplication" 
   ... 

Wenn Sie bereits eine eigene Anwendungsklasse haben, erweitern Sie diese umandroid.support.multidex.MultiDexApplication Anstatt vonandroid.app.Application

Wenn Ihre Application-Klasse eine andere Klasse erweitert und Sie sie nicht ändern möchten oder können, überschreiben Sie attachBaseContext () wie folgt:

public class MyApplication extends FooApplication { 
   @Override 
   protected void attachBaseContext(Context base) { 
      super.attachBaseContext(base); 
      MultiDex.install(this); 
   } 
}

Antworten auf die Frage(10)

Ihre Antwort auf die Frage