2016-02-19 20 views
5

Po uruchomieniu aplikacji korzystam z wielu bibliotek. przeważnie spotykam błąd jest UNEXPECTED TOP-LEVEL EXCEPTIONJaki jest najlepszy sposób rozwiązania UNEXPECTED WYJĄTKOWY WYJĄTKOWY POZIOM?

Ten błąd ma jakiś powód, jak:

  • Ilość funkcja> 65k, musimy włączyć multidex bo
  • Istnieje kilka libs jest zagnieżdżony, musimy dodać wykluczenia w build.gradle.

W drugim przypadku bardzo trudno jest wykryć, która biblioteka została zagnieżdżona.

Jeśli masz doświadczenie w tej kwestii, podziel się mną.

UPDATE:

dependencies { 
    compile files('libs/ormlite-android-4.48.jar') 
    compile files('libs/ormlite-core-4.48.jar') 
    // compile 'com.obsez.android.lib.filechooser:filechooser:1.1.2' 
    // compile 'com.github.bumptech.glide:glide:3.6.1' 
    compile 'com.android.support:recyclerview-v7:23.1.1' 
    compile 'com.android.support:appcompat-v7:23.1.1' 
    compile 'com.jakewharton:butterknife:7.0.1' 
    compile 'cn.lightsky.infiniteindicator:library:1.0.5' 
    compile 'com.firebase:firebase-client-android:2.3.1' 
    compile 'de.hdodenhof:circleimageview:2.0.0' 
    compile 'com.mcxiaoke.volley:library:1.0.15' 
    compile('com.google.apis:google-api-services-drive:v2-rev170-1.20.0') { 
     exclude group: 'org.apache.httpcomponents' 
    } 
    compile('com.google.api-client:google-api-client-android:1.20.0') { 
     exclude group: 'org.apache.httpcomponents' 
    } 
    compile('com.google.android.gms:play-services:8.4.0') { 
     exclude group: 'com.android.support', module: 'support-v4' 
    } 
    compile 'com.nononsenseapps:filepicker:2.4.1' 
} 
+0

Nie jest najlepszym sposobem, ponieważ przyczyna może być inna. Istnieje rozwiązanie dla każdego przypadku z WYJĄTKOWYM WYJĄTKOWYM POZIOMEM. Opublikuj swój problem, a niektórzy użytkownicy pomogą Ci rozwiązać –

+0

Cześć Mr @GabrieleMariotti, Mam aktualizację dla mojej sprawy, robi mi to dużo czasu, więc chcę zapytać o ogólny przypadek. – phongvan

+0

Po przesłaniu stosu problemu gradle. Aby uzyskać więcej szczegółów, użyj zestawu gradlew --info. –

Odpowiedz

5

Najlepsze sposoby rozwiązania nieoczekiwany wyjątek najwyższego poziomu? Zasugeruję ci ten krok Dwa, aby rozwiązać ten problem.

  • Sprawdź załączone biblioteki Zależność/hierarchia
  • Sprawdź jaka klasa biblioteki lub pliki są przyczyną powielania pliki lub metody liczenia przekroczyć 65k


  • Jak Sprawdź dołączone biblioteki Zależność/hierarchia?

Najpierw znaleziono zależność, która jest wykorzystywana w bibliotece, która jest przymocowana/skompilowany z maven/jcenter/mavencentral.Major problemu przyjdzie z pomocą, ponieważ może to możliwe, że wsparcie-v4 & appcompact zawiera już w bibliotece, która jest przymocowany z Maven (jak gry serwis zawiera V4 appcompact załączony wtedy nie trzeba dołączać support-V4, ponieważ zawiera już).

jak sprawdzić Dependency/hierarchię z załączonej biblioteki w Gradle

menu Gradle>: modulename >> Zadania >> android >> Run "androidDependcies"

LUB

menu Gradle>: app >> Zadania >> android >> Run "androidDependcies"

Dzięki temu w Gradle konsoli dostaniesz coś jak poniżej jako wyjście (wyjście może zależy bibliotek dołączonych) Który może dać wyobrażenie o powielania/hierarchii bibliotek

release 
+--- LOCAL: picasso-2.5.2.jar 
+--- LOCAL: YouTubeAndroidPlayerApi.jar 
+--- LOCAL: commons-lang-2.6.jar 
+--- LOCAL: signpost-core-1.2.1.1.jar 
+--- LOCAL: kxml2_2.3.0.jar 
+--- LOCAL: classes.jar 
+--- LOCAL: signpost-commonshttp4-1.2.1.1.jar 
+--- LOCAL: json-simple-1.1.1.jar 
+--- LOCAL: universal-image-loader-1.9.3.jar 
+--- LOCAL: linkedin-j-.jar 
+--- LOCAL: maps.jar 
+--- LOCAL: nineoldandroids-2.4.0.jar 
+--- com.android.support:multidex:1.0.1 
+--- com.android.support:multidex:1.0.1 
+--- com.android.support:appcompat-v7:23.1.1 
| \--- com.android.support:support-v4:23.1.1 
|   \--- LOCAL: internal_impl-23.1.1.jar 
+--- com.google.android.gms:play-services-maps:7.3.0 
| \--- com.google.android.gms:play-services-base:7.3.0 
|   \--- com.android.support:support-v4:23.1.1 
|    \--- LOCAL: internal_impl-23.1.1.jar 
+--- com.google.android.gms:play-services-gcm:7.3.0 
| \--- com.google.android.gms:play-services-base:7.3.0 
|   \--- com.android.support:support-v4:23.1.1 
|    \--- LOCAL: internal_impl-23.1.1.jar 
+--- com.google.android.gms:play-services-location:7.3.0 
| +--- com.google.android.gms:play-services-base:7.3.0 
| | \--- com.android.support:support-v4:23.1.1 
| |   \--- LOCAL: internal_impl-23.1.1.jar 
| \--- com.google.android.gms:play-services-maps:7.3.0 
|   \--- com.google.android.gms:play-services-base:7.3.0 
|    \--- com.android.support:support-v4:23.1.1 
|     \--- LOCAL: internal_impl-23.1.1.jar 
+--- com.google.android.gms:play-services-ads:7.3.0 
| +--- com.google.android.gms:play-services-base:7.3.0 
| | \--- com.android.support:support-v4:23.1.1 
| |   \--- LOCAL: internal_impl-23.1.1.jar 
| \--- com.google.android.gms:play-services-analytics:7.3.0 
|   \--- com.google.android.gms:play-services-base:7.3.0 
|    \--- com.android.support:support-v4:23.1.1 
|     \--- LOCAL: internal_impl-23.1.1.jar 
+--- com.google.android.gms:play-services-analytics:7.3.0 
| \--- com.google.android.gms:play-services-base:7.3.0 
|   \--- com.android.support:support-v4:23.1.1 
|    \--- LOCAL: internal_impl-23.1.1.jar 
+--- com.google.android.gms:play-services-plus:7.3.0 
| \--- com.google.android.gms:play-services-base:7.3.0 
|   \--- com.android.support:support-v4:23.1.1 
|    \--- LOCAL: internal_impl-23.1.1.jar 
\--- com.android.support:recyclerview-v7:23.1.1 
    \--- com.android.support:support-v4:23.1.1 
      \--- LOCAL: internal_impl-23.1.1.jar 

Można to również sprawdzić na terminalu dla powyższego procesu.

gradlew app:dependencies 

można sprawdzić pod obrazem jako „obraz jest wart tysiąca słów”

picture is worth a thousand words

Jak sprawdzić, która klasa lub pliki, co powoduje duplikat wpisu/lub liczba metoda przekroczyć 65 tys.

Zamiast sprawdzania wiadomości lub błędów, które są coraz Wiadomość karcie android studio sprawdzić w Gradle konsoli

Jeśli w wyniku błędu wiadomości jest jak podczas przenoszenia klas do dex :app:transformClassesWithDexForDebug lub :app:transformClassesWithDexForRelease maksimum szanse są jak ze względu na wiele dex (metoda ponad 65k limit).

Albo czy jakikolwiek inny błąd niż to będzie określać jak duplikatu wpisu związanego itp