Quando aggiungo al mio progetto il multidex: true, e faccio una classe Application che si estende da MultiDexApplication, il mio tempo di costruzione del progetto è passato da 20 secondi a circa 90 sec.Come fare un po 'più veloce?gradle - Android Studio build un'applicazione multidex troppo lenta
risposta
Se siete come me che hanno già provato la soluzione di Vic Vu ma non puoi ancora evitare l'abilitazione di multiDex, quindi puoi provare questo (a condizione che tu stia utilizzando un dispositivo con Android 5.0 e versioni successive).
Nota Ciò accelera solo la generazione di sviluppo. La tua produzione sarà ancora lenta.
Fondamentalmente è necessario introdurre 2 sapori prodotto uno per dev
e uno per prod
.
Aggiungere multiDexEnabled true
android {
productFlavors {
// Define separate dev and prod product flavors.
dev {
// dev utilizes minSDKVersion = 21 to allow the Android gradle plugin
// to pre-dex each module and produce an APK that can be tested on
// Android Lollipop without time consuming dex merging processes.
minSdkVersion 21
}
prod {
// The actual minSdkVersion for the application.
minSdkVersion 14
}
}
...
buildTypes {
release {
runProguard true
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'
}
defaultConfig {
applicationId "com.something.something"
targetSdkVersion 23
versionCode 1
versionName "1.0.0"
multiDexEnabled true
}
}
dependencies {
compile 'com.android.support:multidex:1.0.1'
}
E ho una classe che estende Application
così ho dovuto ignorare attachBaseContext()
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
Se non si sta estendendo Application
semplicemente utilizzare MultiDexApplication
nel tag AndroidManifest.xml
application
.
Verificare che nel proprio Studio Android Build Variants
si punta a devDebug
.
Leggere le istruzioni complete qui https://developer.android.com/studio/build/multidex.html#dev-build
dove si inserisce l'estensione Application di ClassClass? perché non so dove mettere – delive
Creare una classe preferibilmente nel pacchetto radice (ad esempio 'com.something.something.MyApplication'). Lasciate classe '' MyApplication' estendere Application' (es. 'MyApplication public class estende Application {...}' . Dichiarare Questa classe nel vostro AndroidManifest nel 'application' tag. (Es.'
Non riesco a vedere, mi dispiace, puoi postare qualsiasi tutorial? ora corro senza questa classe che si estende da Aplication (e sembra funziona), e io non so se mettere in root -/java/here o java/package/here .è meglio qualsiasi guida grazie – delive
Fornire come risposta perché questo si adatta meglio alla formattazione.
Per rispondere semplicemente alla tua domanda: No, non c'è modo. Multidex è un processo pensato per contribuire a sollevare il carico del limite del metodo 65k. Questo processo è complicato e renderà semplicemente i tuoi tempi di costruzione più lunghi.
Il meglio che si può fare è ridurre il numero di metodi.
Nella tua build.gradle (supplied here) che si sta utilizzando:
`compile 'com.google.android.gms:play-services:8.3.0'`
Ma se si guarda al servizi di gioco più recente api si può scegliere quali servizi è effettivamente necessario.
Vedere tabella 1 on this page.
Utilizzare solo quelli necessari. I servizi di Google Play nel loro complesso sono da qualche parte intorno ai metodi 30k.
Questo dovrebbe aiutare.
Grazie, il suo lavoro. –
Grazie, mi hai salvato dalla morte di noioso. Aggiungendo solo il portafoglio, i servizi di accesso lo mantengono sotto i 30 k metodi. – vktr
Come accennato da Mark Pazon in un'altra risposta, la soluzione è spiegata qui http://developer.android.com/tools/building/multidex.html in "Ottimizzazione delle configurazioni di sviluppo Multidex" – agirardello
Dipende.
Non è stato specificato nella domanda, ma se si desidera solo velocizzare le build dello sviluppo , è possibile evitare il lavoro extra. La documentazione ufficiale include uno whole section.
Il multidexing utilizza più memoria. Man mano che ci si avvicina alla dimensione massima dell'heap in Java, Java impiegherà più tempo a fare GC di quanto non faccia un vero lavoro, questo può rallentare molto le cose.
Consiglio vivamente di aumentare la dimensione massima dell'heap quando si utilizza Multidex. Aggiungere il seguente alla chiusura Android nel file build.gradle per rendere la dimensione massima heap 4GB (renderlo più grande/piccolo se lo si desidera):
dexOptions {
javaMaxHeapSize "4g"
}
per quanto ne so, non c'è modo per renderlo più veloce. L'unica soluzione è ridurre il numero di metodi nella tua app e sbarazzarti di 'MultiDex'. Anche la documentazione ufficiale dice * Ciò significa che le build di routine eseguite come parte del processo di sviluppo con Multidex richiedono più tempo e possono potenzialmente rallentare il processo di sviluppo. * –
Sei sicuro che tutte le librerie importate siano davvero necessarie per la tua app? Se no puoi rimuovere qualcosa ed evitare multidex – aorlando
Ho bisogno di fare questo, quando aggiungi alle dipendenze tutte le librerie per google calendar api. In questo tema descrivo il suo problema: http://stackoverflow.com/questions/30104925/multidex-issue-execution-failed-for-task-appdexdebug. Forse tu ora come intorno al multidex? Penso che questo possa essere evitato, ma ora non ho altri metodi. Grazie) –