2016-02-19 7 views
5

Quando faccio l'applicazione uso molte librerie. Ho Di solito capita di incontrare un errore è UNEXPECTED TOP-LEVEL EXCEPTIONQual è il modo migliore per risolvere l'ECCEZIONE ECCEZIONALE DI ALTO LIVELLO?

Questo errore hanno una qualche ragione:

  • funzione Number> 65k, abbiamo bisogno di abilitare multidex per esso
  • Ci sono alcuni movimenti di liberazione è annidato, dobbiamo aggiunge escludere in build.gradle.

In merito al secondo caso, è molto difficile rilevare quale libreria è stata annidata.

Se si dispone di esperienza su questo problema, si prega di condividere me.

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

non c'è un modo migliore perché la ragione può essere diversa. Esiste una soluzione per ogni caso con ECCEZIONE ECCEZIONALE DI ALTO LIVELLO. Pubblica il tuo problema e qualche utente ti aiuterà a risolvere –

+0

Ciao Mr @GabrieleMariotti, ho un aggiornamento per il mio caso, mi fa molto tempo, quindi voglio chiedere del caso generale. – phongvan

+0

Pubblica lo stacktrace del problema gradle. Usa gradlew assemble --info per ottenere maggiori dettagli. –

risposta

5

Il modo migliore per risolvere IMPREVISTO ECCEZIONE TOP-LEVEL? Ti suggerisco questo passaggio Due per risolvere questo problema.

  • Controllare le librerie collegate Dipendenza/gerarchia
  • controllare quale classe biblioteca o file sono la causa della duplicazione file o metodi contano supera 65k


  • Come Controllare le librerie allegate Dipendenza/gerarchia?

primo trovato la dipendenza che viene utilizzato nella biblioteca che è attaccato/compilato dall'emissione/jcenter/mavencentral.Major maven verrà con supporto perché può possibile che il supporto-v4 & appcompact contiene già biblioteca che è collegato da Maven (un gioco di servizio contiene v4, appcompact attaccato quindi non c'è bisogno di collegare il supporto-v4 in quanto contiene già.)

come controllare Dipendenza/gerarchia della libreria collegata in Gradle

del menu Gradle>: MODULENAME >> Compiti >> >> Android "androidDependcies" Run

O

di menu Gradle>: app >> Compiti >> >> Android Run "androidDependcies"

in questo modo in Gradle Console otterrete qualcosa di simile al di sotto come uscita (output può dipende da librerie collegate) quale lo può dare un'idea circa la duplicazione/gerarchia delle librerie

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 

È anche possibile controllare questo dal terminale per il processo di cui sopra.

gradlew app:dependencies 

È possibile controllare sotto immagine come "un'immagine vale più di mille parole"

picture is worth a thousand words

Come controllare quale classe o file che causano voce duplicata/o conta il metodo superare 65k?

Piuttosto che il controllo sul messaggio di errore o che si stanno ottenendo Messaggio scheda di Android Studio check-in Gradle Console

Se nel messaggio di errore è come durante il trasferimento classi a dex :app:transformClassesWithDexForDebug o :app:transformClassesWithDexForRelease massima le probabilità sono come a causa di più dex (metodo limite di 65k in eccesso).

O se qualsiasi altro errore di quello che specificherà come voce duplicata legati ecc

Problemi correlati