Antworten:
Diese Antwort stützt sich stark auf die offizielle Dokumentation von Android (insbesondere die zitierten Teile).
Einrichten der Multidex-Unterstützung für Unity Project
Was ist Multidex:
Android-Anwendungsdateien (APK-Dateien) enthalten ausführbare Bytecode-Dateien in Form von Dalvik Executable-Dateien (DEX-Dateien), die den kompilierten Code enthalten, mit dem Ihre App ausgeführt wird. Die Dalvik Executable-Spezifikation beschränkt die Gesamtzahl der Methoden, auf die in einer einzelnen DEX-Datei verwiesen werden kann, auf 65.536, einschließlich Android-Framework-Methoden, Bibliotheksmethoden und Methoden in Ihrem eigenen Code. Wenn Sie dieses Limit überschreiten, müssen Sie Ihren App-Erstellungsprozess so konfigurieren, dass mehr als eine DEX-Datei generiert wird, die als Multi-Dex-Konfiguration bezeichnet wird.
Wenn wir Multidex verwenden:
Wenn wir die Gesamtzahl der Methoden überschreiten, auf die in einer einzelnen DEX-Datei verwiesen werden kann, werden 65.536 angegeben, einschließlich Android-Framework-Methoden, Bibliotheksmethoden und Methoden in Ihrem eigenen Code.
Vermeiden Sie das 64K-Limit
Bevor Sie Ihre App für die Verwendung von mindestens 64 KB-Methodenreferenzen konfigurieren, sollten Sie die Gesamtzahl der von Ihrem App-Code aufgerufenen Referenzen verringern, einschließlich der von Ihrem App-Code oder den enthaltenen Bibliotheken definierten Methoden. Die folgenden Strategien können Ihnen dabei helfen, das Erreichen des DEX-Referenzlimits zu vermeiden:
Überprüfen Sie die direkten und transitiven Abhängigkeiten Ihrer App. - Stellen Sie sicher, dass alle großen Bibliotheksabhängigkeiten, die Sie in Ihre App einbeziehen, so verwendet werden, dass die der App hinzugefügte Codemenge überwiegt. Ein gängiges Anti-Pattern ist das Einschließen einer sehr großen Bibliothek, da einige nützliche Methoden nützlich waren. Wenn Sie die Abhängigkeiten Ihres App-Codes verringern, können Sie häufig das DEX-Referenzlimit umgehen.
Nicht verwendeten Code mit ProGuard entfernen - Aktivieren Sie die Code-Verkleinerung , um ProGuard für Ihre Release-Builds auszuführen. Durch das Aktivieren der Verkleinerung wird sichergestellt, dass Sie nicht verwendeten Code nicht mit Ihren APKs versenden.
Abgesehen von diesen offiziellen Tipps helfen Ihnen die folgenden Schritte beim Erstellen Ihres Unity-Projekts weiter:
Um Ihr App-Projekt für die Verwendung einer Multi-Dex-Konfiguration einzurichten, müssen Sie die folgenden Änderungen vornehmen.
Wenn Ihr minSdkVersion auf 21 oder höher eingestellt ist, alle müssen Sie tun wird ,
multiDexEnabled
umtrue
in der Modulebene build.gradle Datei, wie hier gezeigt:
android {
defaultConfig {
...
minSdkVersion 21
targetSdkVersion 26
multiDexEnabled true
}
...
}
Wenn Ihr
minSdkVersion
Wert jedoch auf 20 oder niedriger festgelegt ist, müssen Sie die Multidex-Unterstützungsbibliothek wie folgt verwenden:3.1. Ändern Sie die build.gradle-Datei auf Modulebene, um multidex zu aktivieren, und fügen Sie die multidex-Bibliothek als Abhängigkeit hinzu, wie hier gezeigt:
android {
defaultConfig {
...
minSdkVersion 15
targetSdkVersion 26
multiDexEnabled true
}
...
}
dependencies {
compile 'com.android.support:multidex:1.0.1'
}
3.2. Führen Sie je nachdem, ob Sie die Application-Klasse überschreiben, einen der folgenden Schritte aus:
- Wenn Sie die
Application
Klasse nicht überschreiben , bearbeiten Sie die Manifestdatei, um sie wie folgtandroid:name
im<application>
Tag festzulegen:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp">
<application
android:name="android.support.multidex.MultiDexApplication" >
...
</application>
</manifest>
- Wenn Sie die
Application
Klasse überschreiben , ändern Sie sie wie folgt, um MultiDexApplication (falls möglich) zu erweitern:
public class MyApplication extends MultiDexApplication { ... }
- Wenn Sie die Application-Klasse überschreiben, die Basisklasse jedoch nicht geändert werden kann, können Sie stattdessen die attachBaseContext () -Methode überschreiben und MultiDex.install (this) aufrufen, um multidex zu aktivieren:
public class MyApplication extends SomeOtherApplication {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
Überprüfen Sie den Fehler in anderen Plugins und bereinigen Sie das Projekt. Und sysc erneut.
Wenn in Ihrem Projekt ein Abhängigkeitsproblem vorliegt, führen Sie diesen Befehl in Android Terminal aus
% Gradle clean App."App name"
Kopieren Sie diese Abhängigkeiten in Ihr Application Gradle unter Abhängigkeiten:
compile fileTree(include: ['*.jar'], dir: 'bin')
compile fileTree(include: ['*.jar'], dir: 'libs')
Fügen Sie die signingConfig in Ihre Hauptprojekte Gradle.
Oder setzen Sie den Signiermodus manuell in den Debug-Modus. Gehen Sie zu Datei -> Projektstruktur -> Unter Module Klicken Sie auf Ihr Projekt und wählen Sie unter Build-Typen Debug -> Signierkonfiguration -> Debug
Synchronisiere nun deinen Gradle und erstelle das Projekt.
Ich würde Ihnen empfehlen, diesen Link zu verwenden, um Multidex-fähige Spiele direkt über Unity zu erstellen.
https://medium.com/@abhpatidar/solving-unity-dex-issue-538e134c8809
Hinweis: Dadurch wird Multidex nur in Unity selbst aktiviert (und Multidex-Probleme sollten behoben werden). Gradle-bezogene Probleme werden nicht behoben.