2016-05-11 35 views
9

Dears, W wielu postach na blogu czytam, że uruchamianie aplikacji wielostkowych jest wolniejsze niż w przypadku zwykłych aplikacji. Moja aplikacja używa wielu bibliotek, które przekraczają 64 tys. Metod, więc używam trybu wielościeżkowego. Ale kiedy używam proguard w kompilacji wydania, ostateczny apk staje się mniej niż 64k metodCzy mogę włączyć wielościeżkę tylko w wersji do debugowania systemu Android?

Moje pytanie brzmi: Czy mogę włączyć wielościeżkę w systemie Android tylko do debugowania, więc nie mam błędu runtime? i wyłączyć multi-dex w wersji release, ponieważ tego nie potrzebuję?

Jeśli tak, w jaki sposób?

Jeśli nie, czy Android jest na tyle inteligentny, aby przyspieszyć uruchamianie, ponieważ powinien rozpoznać, że aplikacja nie przekroczyła 64 tys., Nawet jeśli jest to aplikacja wielorakie?

Odpowiedz

11

Tak, możesz. Kiedy zadeklarować buildTypes obejmują multidex tylko do debugowania:

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

Nie jestem pewien, ale wydaje się to działa jak testowane –

+0

Ale potem trzeba jeszcze (warunkowo, na podstawie wartości 'BuildConfig.DEBUG') nazywamy' MultiDex.install (this) 'w kodzie, prawda? –

+1

@KonradMorawski nie jest konieczne dla systemu Android 5 i wierzę, że – Boy

6

Zamiast umożliwiając multidex tylko do debugowania, można zmienić wersję min SDK do 21 tylko do debugowania tak Gradle może przyspieszyć Dexing z 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

sugerowane metody nie są już potrzebne jako android studio stało się "wystarczająco inteligentny". W rzeczywistości, będzie to teraz daje ostrzeżenie podczas korzystania minSdkVersion 21 (stary sposób), aby przyspieszyć czas budowy DEX:

nie trzeba już tryb dev aby umożliwić wielu Dexing podczas rozwoju można i złamać kontroli wersji API mniej ...

w przeszłości nasza dokumentacja zaleca tworzenie produktów dev smak ze ma minSdkVersion 21 lat, w celu umożliwienia multidexing przyspieszyć buduje znacząco w trakcie rozwoju. To obejście: nie jest już konieczne i ma poważne wady, takie jak sprawdzanie dostępu API do API (ponieważ prawdziwe minSdkVersion nie jest już znane). W najnowszych wersjach IDE i wtyczki Gradle, IDE automatycznie przechodzi poziom interfejsu API podłączonego urządzenia używanego do wdrożenia, a jeśli to urządzenie ma przynajmniej API 21, to automatycznie włączane jest wielościeżkowe oznaczenie , co oznacza, że ​​uzyskuje się takie same korzyści w zakresie prędkości, jak produkt dev, ale bez wad.