2014-06-16 3 views
6

Per me è un discreto gradino. Iniziato un progetto che ha funzionato bene solo pochi giorni fa. Aggiornato Android Studio e ha aperto di nuovo il progetto. Ho provato tutto ciò che riesco a trovare, dalla rimozione/aggiornamento delle librerie al controllo dei file xml e della struttura. Rimuovendo la cache gradle e installando l'ultima versione di jdk, nulla sembra aiutare qui.Gradle - Eccezione di primo livello imprevista - Fuori dal nulla

cercato anche aggiungere:

configurations { 
    all*.exclude group: 'com.android.support', module: 'support-v4' 
} 

refered in altri post su StackOverflow

ho esportato l'errore dalla console, e sembra che questo:

objc[2338]: Class JavaLaunchHelper is implemented in both /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/bin/java and /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/libinstrument.dylib. One of the two will be used. Which one is undefined. 

UNEXPECTED TOP-LEVEL EXCEPTION: 
java.lang.IllegalArgumentException: method ID not in [0, 0xffff]: 65536 
    at com.android.dx.merge.DexMerger$6.updateIndex(DexMerger.java:501) 
    at com.android.dx.merge.DexMerger$IdMerger.mergeSorted(DexMerger.java:276) 
    at com.android.dx.merge.DexMerger.mergeMethodIds(DexMerger.java:490) 
    at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:167) 
    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) 
:Derp:dexDerpDebug FAILED 

FAILURE: Build failed with an exception. 

* What went wrong: 
Execution failed for task ':Derp:dexDerpDebug'. 
> com.android.ide.common.internal.LoggedErrorException: Failed to run command: 
    /Applications/Android Studio.app/sdk/build-tools/19.1.0/dx --dex --num-threads=4 

--output /Users/MorePathStuffForALongWhile 

    Error Code: 
    2 
    Output: 
    objc[2338]: Class JavaLaunchHelper is implemented in both /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/bin/java and /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/libinstrument.dylib. One of the two will be used. Which one is undefined. 
+2

possibile duplicato di [Impossibile eseguire dex: ID metodo non in \ [0, 0xffff \]: 65536] (http://stackoverflow.com/questions/15209831/unable-to-execute-dex-method-id -non-in-0-0xffff-65536) –

+0

Non penso che il problema che Hiam ha descritto sia catturato dal link che hai fornito a Scott Barta. – sudocoder

+0

Ti sei trasferito a Dagger 1.2.2? Ho ottenuto questo cambiando solo la mia dipendenza da Dagger da 1.1.x a 1.2.2. Anche se sembra possibile, si tratta di "troppi metodi nell'app Android" in base ad altri risultati di ricerca. –

risposta

1

Il vostro problema: Hai passato il ca. Limite del metodo 65000 durante la compilazione dell'app. Devi trovare un modo per ridurre il numero di metodi nella tua app.

Nel caso in cui si utilizzi Google Play Services, è possibile provare this method per compilarlo con maggiore granularità.

In caso contrario, è possibile utilizzare semplicemente multiDex (assicurarsi di utilizzare una versione recente di Android Studio). Utilizzare questo nel file build.gradle:

android { 
    defaultConfig { 
     ... 
     multiDexEnabled = true 
    } 
} 
0

Se si utilizza gson o jackson, provare a rimuovere le sue dipendenze. Ha funzionato per me. compile 'com.google.code.gson:gson:2.1

0

Il codice sorgente + tutte le librerie incluse hanno più di 65k di definizioni dei metodi. Questo è attualmente un limitation of dex.

Per evitare questa situazione, è stato introdotto multidex support. Un tempo di compilazione le classi di output sono suddivise e raggruppate in più file dex. E in fase di esecuzione vengono caricati da più file dex.

per raggiungere questo obiettivo è necessario aggiungere il supporto multidex:

android { 
compileSdkVersion 21 
buildToolsVersion "21.1.0" 

defaultConfig { 
    ... 
    minSdkVersion 14 
    targetSdkVersion 21 
    ... 

    // Enabling multidex support. 
    multiDexEnabled true 
} 
... 
} 

dependencies { 
    compile 'com.android.support:multidex:1.0.0' 
} 

e impostare una classe di applicazioni che si estende MultiDexApplication.