Zbudowałem nowy projekt w Android Studio przy użyciu nowych szablonów projektów dostarczonych jako część narzędzia. Cały kod został wygenerowany przez Studio Nie wprowadziłem jeszcze żadnych poprawek.
Próbuję uruchomić kod, ale aplikacja kończy się niepowodzeniem z następującymi błędami, nie jestem pewien, na czym polega problem, więc każda pomoc jest mile widziana.
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
źródło
źródło
Odpowiedzi:
Jak wszyscy mówili tutaj, biblioteka wsparcia (
com.android.support
) jest dołączana więcej niż raz do twojego projektu. Spróbuj dodać to na swoimbuild.gradle
poziomie głównym i powinno to wykluczyć bibliotekę wsparcia przed eksportowaniem przez inne zależności projektu.configurations { all*.exclude group: 'com.android.support', module: 'support-v4' }
Jeśli masz więcej niż jedną obsługę bibliotek uwzględnionych w takich zależnościach, możesz chcieć usunąć jedną z nich:
źródło
build.gradle
pliku? plik wModule
lubProject
(masz ten wierszclasspath 'com.android.tools.build:gradle:0.9.+'
)? Proszę powiedz mi, nie mogę tego naprawić.dependencies { compile 'com.android.support:support-v4:19.1.+' compile fileTree(dir: 'libs', include: ['*.jar']) }
Występuje konflikt, jeśli masz jar wsparcia w folderze libs. Jeśli masz plik wsparcia w folderze libs projektu i zależność modułu została dodana do kompilacji „com.android.support:support-v4:13.0.+”, zostanie zgłoszony wyjątek UNEXPECTED_TOPLEVEL_DEPENDANCY.
źródło
compile fileTree(dir: 'libs', include: ['*.jar'])
część na twoim zrzucie ekranu. Skomentowałem wszystkie indywidualne zależności i podłączyłem je, a to rozwiązało mój problem.Ponieważ możesz dołączyć dwie takie same biblioteki do swojego projektu. sprawdź plik build.gradle.
dependencies { compile 'com.android.support:appcompat-v7:+' compile files('libs/android-support-v4.jar') }
jeśli twój plik zawiera kompilację
'com.android.support:appcompat-v7:+'
icompile files('libs/android-support-v4.jar')
, będzie miał ten problem. usuń to zdanie: kompiluj pliki ('libs / android-support-v4.jar')Tak rozwiązuję ten problem.
źródło
Ten błąd występuje, gdy ta sama biblioteka / katalog jest uwzględniona więcej niż raz w zależnościach build.gradle. Ok, powiedzmy, że masz strukturę aplikacji, która wygląda następująco:
Masz więc główną „aplikację”, a następnie kilka podaplikacji / modułów / bibliotek. Biblioteki to: 1) gene_test_library, 2) genes_nine_old_androids_library i 3) swipe_list_view_library.
Nazywam się Gene, dlatego istnieją wszystkie te biblioteki „genów”.
W pliku build.gradle dla „aplikacji” mam:
dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') compile 'com.android.support:appcompat-v7:21.0.0' compile project(':libraries:gene_test_library') //compile project(':libraries:genes_nine_old_androids_library') compile project(':libraries:swipe_list_view_library') }
W pliku build.gradle dla gene_test_library nie mam nic:
dependencies { }
Wewnątrz build.gradle dla gene_nine_old_androids_library mam:
dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:21.0.0' }
Wewnątrz build.gradle dla swipe_list_view_library mam:
dependencies { compile 'com.nineoldandroids:library:2.4.0+' compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:21.0.0' }
Ten wiersz kodu „compile fileTree (dir: 'libs', include: ['* .jar'])” oznacza po prostu „hej, zajrzyj do folderu„ libs ”wewnątrz tego modułu, aby znaleźć jakiekolwiek pliki jar. Nie mam nic w folderze libs żadnego z modułów, więc możesz zignorować ten wiersz kodu.
Powiedzmy więc, że odkomentuję // kompiluję projekt (': libraries: genes_nine_old_androids_library') W build.gradle dla modułu „app”. Wtedy otrzymywałbym błąd „NIEOCZEKIWANY WYJĄTEK NAJWYŻSZEGO POZIOMU:”. Dlaczego?
Cóż, napisanie // kompilacji projektu (': libraries: genes_nine_old_androids_library') wewnątrz build.gradle dla „app” jest tym samym, co pobranie i umieszczenie w nim zależności budowania modułu „genes_nine_old_androids_library”. Po odkomentowaniu instrukcji // compile project (': libraries: genes_nine_old_androids_library') polecenie build.gradle dla modułu „app” staje się:
dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') compile 'com.android.support:appcompat-v7:21.0.0' compile project(':libraries:gene_test_library') ***compile fileTree(dir: 'libs', include: ['*.jar'])*** ***compile 'com.android.support:appcompat-v7:21.0.0'*** compile project(':libraries:swipe_list_view_library') }
Zauważ, że teraz „kompiluj” com.android.support:appcompat-v7:21.0.0 ”pojawia się 2x. Stąd pochodzi błąd.
źródło
app
youcompile project(':libraries:swipe_list_view_library')
, i swipe_list_view_library zawiera również appcompat-v7. W efekcie masz wkompilowane 2 appcompat-v7app
. Dlaczego ten jeden nie zgłasza błędu?Znalazłem 2 przyczyny tego problemu:
Czasami jest to spowodowane wieloma dołączonymi bibliotekami. Na przykład dodajesz
kompiluj „com.nineoldandroids: library: 2.4.0”
w swoim gradle i dodaj kolejną bibliotekę, która również używa „dziewięć starychandroidów” w swojej gradle!
Więc dlaczego?
Więc co powinieneś zrobić?
Unikanie 65K Limit - W jaki sposób?
położyć
multiDexEnabled true
w sekcjach defaultConfig, buildType lub productFlavor pliku kompilacji Gradle.
2. W swoim manifeście dodaj klasę MultiDexApplication z biblioteki obsługującej multidex do elementu aplikacji.
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.android.multidex.myapplication"> <application ... android:name="android.support.multidex.MultiDexApplication"> ... </application> </manifest>
Uwaga: Jeśli Twoja aplikacja korzysta z rozszerzeń klasy Application, możesz zastąpić metodę attachBaseContext () i wywołać funkcję MultiDex.install (this), aby włączyć multidex. Więcej informacji można znaleźć w dokumentacji referencyjnej MultiDexApplication.
Również ten kod może ci pomóc:
dexOptions { javaMaxHeapSize "4g" }
Umieść swoją gradle (android {...}).
źródło
Cześć wszystkim, miałem ten sam problem, który był spowodowany przez zduplikowany plik wsparcia w wersji 4, który dołączyłem, próbując zintegrować parsowanie. Usunięto dodatkowe włączenie z katalogu libs i teraz działa dobrze!
źródło
Dzieje się tak, gdy biblioteka jest kompilowana dwukrotnie (tj. Jest dodawana dwukrotnie). Może to być biblioteka pomocnicza lub inna, nie ma to znaczenia.
Typowym przypadkiem jest dodanie instrukcji kompilacji biblioteki, która jest już w Twoim
libs/
katalogu. Wszystkie*.jar
pliki są kompilowane automatycznie. Zatem dodanie instrukcji kompilacji powoduje błąd. Usunięcie tego oświadczenia może rozwiązać ten problem. Jeśli to nie dotyczy, mamy już kilka niesamowitych odpowiedzi.źródło
To może być najgłupsza odpowiedź, ale to zadziałało:
Uwaga: żadna moja biblioteka nie została skompilowana dwukrotnie.
źródło
Upewnij się, że pobrałeś repozytorium pomocy technicznej, aby użyć zależności biblioteki wsparcia w pliku build.gradle.
Jeśli te wszystkie są już zainstalowane, zsynchronizuj swój projekt z Gradle, używając dostępnego przycisku.
źródło
W moim przypadku WYJĄTEK TOP LEVEL został rzucony z powodu specjalnego znaku na ścieżce projektu. Po prostu zamknąłem projekt, zmieniono „á” na „a” i ponownie otworzyłem projekt. Pracuje!
źródło
Nagle, bez większych zmian w moim projekcie, również dostałem ten błąd.
Wszystkie powyższe nie działały dla mnie, ponieważ potrzebowałem zarówno obsługi bibliotek V4, jak i V7.
Na koniec, ponieważ 2 godziny temu projekt skompilował się bez problemów, po prostu kazałem Android Studio ODBUDOWAĆ projekt i błąd zniknął.
źródło
Miałem podobny problem, gdy próbowałem zbudować podpisany apk dla mojej aplikacji.
Dziwne, stało się to tylko wtedy, gdy chciałem zbudować apk wydania , podczas gdy w apk debugowania wszystko działało OK.
Wreszcie, patrząc na ten wątek, sprawdziłem, czy w build.gradle nie ma obsługi duplikatów bibliotek i usunąłem wszelkie duplikaty, ale to nie wystarczyło.
Musiałem zrobić czysty projekt i dopiero wtedy wreszcie udało mi się go uruchomić.
źródło
Wiem, że problem został rozwiązany, ale może się to powtórzyć, a moje rozwiązanie było trochę inne niż te, które znalazłem. W moim przypadku rozwiązanie nie było związane z włączeniem dwóch różnych bibliotek do mojego projektu. Zobacz kod poniżej:
compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 }
Ten kod generował ten błąd „Nieoczekiwany wyjątek najwyższego poziomu”. Naprawiam kod wprowadzając następujące zmiany:
compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 }
źródło
Rozwiązałem problem dodając te w build gradle:
defaultConfig { multiDexEnabled true dependencies { compile 'com.android.support:multidex:1.0.0'
innym rozwiązaniem może być usunięcie niepotrzebnych bibliotek
źródło