2016-05-11 23 views
9

Dears, Ho letto in molti post del blog che l'avvio delle app multidex è più lento delle normali app. La mia app utilizza molte librerie che superano i 64k metodi, quindi uso multidex. Ma quando uso proguard in release build, l'apk finale diventa meno di 64k metodiPosso abilitare il multidex solo nella build di debug di Android?

Quindi la mia domanda è: Posso abilitare multidex in build debug Android solo così non ho errori di runtime? e disabilita il multi dex in release build perché non ne ho bisogno?

Se sì, come?

Se No, Android è abbastanza intelligente da accelerare l'avvio in quanto dovrebbe riconoscere che l'app non ha superato i 64k anche se è un'app multi dex?

risposta

11

Sì, è possibile. Quando si dichiara tuoi buildTypes multidex includere solo per il debug:

buildTypes { 
    release { 
     multiDexEnabled false 
    } 
    debug { 
     multiDexEnabled true 
    } 
} 
+0

Non sono sicuro ma questo sembra a lavorare come ho provato –

+0

Ma poi si devono ancora (condizionale, in base al valore di 'BuildConfig.DEBUG') chiamare' MultiDex.install (questo) 'nel codice, giusto? –

+1

@KonradMorawski non è necessario per Android 5 e versioni successive Credo che – Boy

6

Invece di consentire multidex solo per il debug, è possibile modificare la versione min sdk a 21 solo per il debug in modo Gradle può accelerare Dexing con ART:

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' 
     } 
    } 
} 
dependencies { 
    compile 'com.android.support:multidex:1.0.0' 
} 

http://developer.android.com/tools/building/multidex.html

0

suggerito metodi non sono più necessari come Android Studio è diventato "abbastanza intelligente". In realtà, sarà ora vi darà un avviso quando si utilizza minSdkVersion 21 (alla vecchia maniera) per accelerare il tempo di costruzione con dex:

Non è più necessario una modalità dev per consentire multi-Dexing durante sviluppo , e questo può rompere controlli di versione API meno ...

in passato, la nostra documentazione raccomandato la creazione di un prodotto dev sapore con ha una minSdkVersion di 21, al fine di consentire multidexing per accelerare costruisce in modo significativo durante lo sviluppo. Questa soluzione alternativa non è più necessaria e presenta alcuni aspetti negativi seri, come il controllo dell'accesso API interruzione (dal momento che la versione minSdk true non è più nota ) Nelle versioni recenti dell'IDE e del plug-in Gradle, l'IDE passa automaticamente il livello API del dispositivo connesso utilizzato per la distribuzione e se tale dispositivo è almeno API 21, quindi il multidexing viene automaticamente attivato, il che significa che si ottengono gli stessi vantaggi di velocità dello come prodotto del prodotto di sviluppo senza gli svantaggi.