Ich habe ein neues Projekt in Android Studio mit den neuen Projektvorlagen erstellt, die als Teil des Tools bereitgestellt werden. Der gesamte Code wurde von Studio generiert. Ich habe noch keine Änderungen vorgenommen.
Ich versuche, den Code auszuführen, aber die App schlägt mit den folgenden Fehlern fehl. Ich bin mir nicht sicher, wo das Problem liegt. Daher wird jede Hilfe geschätzt.
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Multiple dex files define Landroid/support/v7/app/ActionBar$Callback;
at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:594)
at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:552)
at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:533)
at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:170)
at com.android.dx.merge.DexMerger.merge(DexMerger.java:188)
at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:439)
at com.android.dx.command.dexer.Main.runMonoDex(Main.java:287)
at com.android.dx.command.dexer.Main.run(Main.java:230)
at com.android.dx.command.dexer.Main.main(Main.java:199)
at com.android.dx.command.Main.main(Main.java:103)
FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:dexDebug'.
> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
C:\Users\RichardKavanagh\AppData\Local\Android\android-sdk\build-tools\19.0.1\dx.bat --dex --output D:\Android\Projects\MyHealthRecord\app\build\libs\app-debug.dex D:\Android\Projects\MyHealthRecord\app\build\classes\debug D:\Android\Projects\MyHealthRecord\app\build\dependency-cache\debug D:\Android\Projects\MyHealthRecord\app\build\pre-dexed\debug\android-support-v7-appcompat-5a78dab7e2789bbe64f4bc80d106ca75c04dcf6f.jar D:\Android\Projects\MyHealthRecord\app\build\pre-dexed\debug\classes-f9b947272e9f33ba50355b52d82755584f9c0c58.jar D:\Android\Projects\MyHealthRecord\app\build\pre-dexed\debug\support-v4-19.0.0-31a2c13df80d37d62ca50fec3bde6da0ca706223.jar
Error Code:
2
Output:
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Multiple dex files define Landroid/support/v7/app/ActionBar$Callback;
at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:594)
at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:552)
at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:533)
at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:170)
at com.android.dx.merge.DexMerger.merge(DexMerger.java:188)
at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:439)
at com.android.dx.command.dexer.Main.runMonoDex(Main.java:287)
at com.android.dx.command.dexer.Main.run(Main.java:230)
at com.android.dx.command.dexer.Main.main(Main.java:199)
at com.android.dx.command.Main.main(Main.java:103)
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED
Total time: 12.948 secs
android
android-studio
BENBUN Coder
quelle
quelle
Antworten:
Wie alle anderen hier gesagt haben, wird die Support-Bibliothek (
com.android.support
) mehrmals in Ihr Projekt aufgenommen. Versuchen Sie, dies in Ihrembuild.gradle
Stammverzeichnis hinzuzufügen , damit die Support-Bibliothek nicht über andere Projektabhängigkeiten exportiert wird.Wenn in den folgenden Abhängigkeiten mehr als eine Unterstützungsbibliothek enthalten ist, möchten Sie möglicherweise eine davon entfernen:
quelle
build.gradle
Datei hinzufügen ? Datei inModule
oderProject
(haben diese Zeileclasspath 'com.android.tools.build:gradle:0.9.+'
)? Bitte sagen Sie mir, ich kann das nicht beheben.Dies tritt in Konflikt, wenn Sie das Support-JAR in Ihrem libs-Ordner haben. Wenn Sie das Support-JAR in Ihrem Projektbibliotheksordner haben und die Modulabhängigkeit zum Kompilieren von 'com.android.support:support-v4:13.0.+' hinzugefügt wurde, wird die UNEXPECTED_TOPLEVEL_DEPENDANCY-Ausnahme ausgelöst.
quelle
compile fileTree(dir: 'libs', include: ['*.jar'])
Teil in Ihrem Screenshot. Alle einzelnen Abhängigkeiten auskommentiert und eingesteckt und mein Problem behoben.Weil Sie möglicherweise zwei gleiche Bibliotheken in Ihr Projekt aufnehmen. Überprüfen Sie Ihre build.gradle-Datei.
Wenn Ihre Datei compile
'com.android.support:appcompat-v7:+'
und enthält,compile files('libs/android-support-v4.jar')
treten diese Probleme auf. lösche diesen Satz: kompiliere Dateien ('libs / android-support-v4.jar')So behebe ich dieses Problem.
quelle
Der Fehler tritt auf, wenn Sie dieselbe Bibliothek / dasselbe Verzeichnis mehrmals in den Abhängigkeiten Ihres build.gradle enthalten haben. Angenommen, Sie haben eine App-Struktur, die folgendermaßen aussieht:
Sie haben also die Haupt-App und dann eine Reihe von Unter-Apps / Modulen / Bibliotheken. Die Bibliotheken sind: 1) gene_test_library, 2) gene_nine_old_androids_library, & 3) swipe_list_view_library.
Mein Name ist Gene, deshalb gibt es all diese "Gen" -Bibliotheken.
In der build.gradle für "App" habe ich:
In der build.gradle für gene_test_library habe ich nichts:
In build.gradle für gene_nine_old_androids_library habe ich:
In build.gradle für swipe_list_view_library habe ich:
Diese Codezeile "compile fileTree (dir: 'libs', include: ['* .jar'])" bedeutet nur "hey, suchen Sie im Ordner 'libs' in diesem Modul nach JAR-Dateien. Ich habe nichts im libs-Ordner eines der Module, so dass Sie diese Codezeile ignorieren können.
Nehmen wir also an, ich kommentiere das // Kompilierungsprojekt aus (': Bibliotheken: Gene_nine_old_androids_library') im build.gradle für das Modul "App". Dann würde ich den Fehler "UNEXPECTED TOP-LEVEL EXCEPTION:" erhalten. Warum ist das so?
Das Schreiben eines // Kompilierungsprojekts (': Bibliotheken: Gene_nine_old_androids_library') in das build.gradle für "App" entspricht dem Erstellen der Build-Abhängigkeiten des Moduls "Genes_nine_old_androids_library". Wenn Sie also die Anweisung // compile project (': library: genet_nine_old_androids_library') auskommentieren, wird das Modul build.gradle für "app" zu:
Beachten Sie, wie jetzt "compile 'com.android.support:appcompat-v7:21.0.0'" 2x angezeigt wird. Von dort kommt der Fehler.
quelle
app
dircompile project(':libraries:swipe_list_view_library')
und swipe_list_view_library enthalten auch appcompat-v7. Am Ende haben Sie also 2 appcompat-v7 kompiliertapp
. Warum wirft dieser nicht einen Fehler?Ich habe 2 Gründe für dieses Problem gefunden:
Manchmal liegt es an mehreren enthaltenen Bibliotheken. Zum Beispiel fügen Sie hinzu
kompiliere 'com.nineoldandroids: library: 2.4.0'
in Ihrem Gradle und fügen Sie eine weitere Bibliothek hinzu, die auch "Nineoldandroids" in ihrem Gradle verwendet!
Warum also?
Was solltest du dann tun?
65K-Limit vermeiden - wie?
stellen
in den Abschnitten defaultConfig, buildType oder productFlavor Ihrer Gradle-Builddatei.
2. Fügen Sie in Ihrem Manifest die MultiDexApplication-Klasse aus der Multidex-Unterstützungsbibliothek zum Anwendungselement hinzu.
Hinweis: Wenn Ihre App die Anwendungsklasse erweitert, können Sie die Methode attachBaseContext () überschreiben und MultiDex.install (this) aufrufen, um Multidex zu aktivieren. Weitere Informationen finden Sie in der MultiDexApplication-Referenzdokumentation.
Auch dieser Code kann Ihnen helfen:
Gib deinen Gradle ein (android {...}).
quelle
Hallo zusammen, ich hatte das gleiche Problem, das durch eine doppelte Support-Version 4-Datei verursacht wurde, die ich beim Versuch, Parse zu integrieren, aufgenommen hatte. Die zusätzliche Aufnahme aus dem libs-Verzeichnis wurde gelöscht und funktioniert jetzt einwandfrei!
quelle
Dies geschieht, wenn eine Bibliothek zweimal kompiliert wird (dh zweimal hinzugefügt wird). Es kann eine Support-Bibliothek oder eine andere sein, es spielt keine Rolle.
Der häufigste Fall ist, dass Sie eine Kompilierungsanweisung einer Bibliothek hinzugefügt haben, die sich bereits in Ihrem
libs/
Verzeichnis befindet. Alle*.jar
Dateien werden automatisch kompiliert. Das Hinzufügen einer Kompilierungsanweisung verursacht daher den Fehler. Das Entfernen dieser Anweisung kann dieses Problem beheben. Wenn dies nicht zutrifft, haben wir bereits einige großartige Antworten.quelle
Dies mag die dümmste Antwort sein, aber das hat bei mir funktioniert:
Hinweis: Keine meiner Bibliotheken wurde zweimal kompiliert.
quelle
Stellen Sie sicher, dass Sie das Support Repository heruntergeladen haben, um die Abhängigkeit der Supportbibliothek in build.gradle zu verwenden.
Wenn diese alle bereits installiert sind, synchronisieren Sie Ihr Projekt einmal mit gradle über die verfügbare Schaltfläche.
quelle
In meinem Fall wurde TOP LEVEL EXCEPTION aufgrund eines speziellen Zeichens im Projektpfad ausgelöst. Schließen Sie einfach das Projekt, ändern Sie "á" in "a" und öffnen Sie das Projekt erneut. Funktioniert!
quelle
Plötzlich, ohne größere Änderungen in meinem Projekt, bekam auch ich diesen Fehler.
All das hat bei mir nicht funktioniert, da ich sowohl die Support-Bibliotheken V4 als auch V7 brauchte.
Am Ende, weil das Projekt vor 2 Stunden ohne Probleme kompiliert wurde, habe ich Android Studio einfach angewiesen, das Projekt neu zu erstellen, und der Fehler war verschwunden.
quelle
Ich hatte ein ähnliches Problem, als ich versuchte, eine signierte apk für meine App zu erstellen.
Seltsamerweise passierte es nur, wenn ich eine Release- Apk erstellen wollte , während bei Debug- Apk alles in Ordnung war.
Als ich mir diesen Thread angesehen habe, habe ich in build.gradle nach Duplikaten der Unterstützungsbibliothek gesucht und alle Duplikate entfernt, aber das war nicht genug.
Ich musste ein sauberes Projekt machen und erst dann habe ich es endlich zum Laufen gebracht.
quelle
Ich weiß, dass das Problem beantwortet wurde, aber dies konnte erneut passieren und meine Lösung war etwas anders als die, die ich gefunden habe. In meinem Fall bezog sich die Lösung nicht darauf, zwei verschiedene Bibliotheken in mein Projekt aufzunehmen. Siehe Code unten:
Dieser Code gab den Fehler "Unerwartete Ausnahme der obersten Ebene" aus. Ich behebe den Code und nehme die folgenden Änderungen vor:
quelle
Ich habe mein Problem mit dem Hinzufügen dieser in Build Gradle gelöst:
Eine andere Lösung kann darin bestehen, unnötige Bibliotheken zu entfernen
quelle