2015-10-01 21 views
19

wewnątrz build.gradle możemy dodać, że paramsCo to jest: przyrostowe, preDexLibraries, jumboMode, wewnątrz dexOptions?

android { 
    dexOptions { 
     incremental 
     preDexLibraries 
     jumboMode 
     javaMaxHeapSize 
    } 
} 

ale dokumentacja jest zbyt niska

http://google.github.io/android-gradle-dsl/current/com.android.build.gradle.internal.dsl.DexOptions.html#com.android.build.gradle.internal.dsl.DexOptions

logiczna przyrostowe

czy włączyć tryb przyrostowego dla dx. Ma to wiele ograniczeń i może nie działać. Używaj ostrożnie.

logiczna jumboMode

Włączenie trybu jumbo w dx (force jumbo).

boolean preDexLibraries

biblioteki czy pre-dex. Może to poprawić przyrostowe kompilacje, ale czyste kompilacje mogą być wolniejsze.

1) jakie ograniczenia występują przyrostowo?

2) co to jest tryb jumbo?

3) czym są biblioteki poprzedzające dekodowanie?

+1

Możliwy duplikat [jak korzystać z Androida dexOptions?] (http://stackoverflow.com/questions/28927255/how-can-i-use-android-dexoptions) –

+0

edytowane pytanie – Xan

Odpowiedz

11

przede wszystkim zobaczymy plik whats-dex. w czystym języku Java podczas kompilowania kodu java zostanie on skompilowany do pliku .class, podczas gdy w systemie Android kod Java zostanie skompilowany do pliku .dex. (oba są kodami bajtowymi, ale różnią się)

incremental: Oznacza to, że Gradle użyje poprzedniego pliku dex i dołączy do nich nowe zmiany (nie budując ich ponownie za każdym razem).

odpowiedź Twojego pierwszego Q: np. jednym z ograniczeń było to, że nie mogłeś go użyć wraz z multidexem * (chociaż to ograniczenie zostało rozwiązane - w wersjach sdk 21+ przyrostowe kompilacje są możliwe dla apletów wielowątkowych poprzez przebudowywanie tylko plików dex objętych zmianą)

-note: nie potrzebujesz martwić się już tego ograniczenia, ponieważ opcja przyrostowa jest domyślnie prawidłowa, ponieważ Gradle wersja 2.1.0

: ta opcja oznacza kompilowanie kodu java do wielu plików dekodowanych, których nie potrzebujesz, chyba że metody twojego kodu przewyższają limit max na pojedynczym plik dex (metody 64k)

jumboMode (odpowiedź twoja druga Q): istnieje również ograniczenie dla liczby łańcuchów w pliku dex, dzięki czemu opcja ta rozszerzy liczbę łańcuchów w pliku dex (ta opcja jest prawdziwa, ponieważ Gradle 2.1.0, więc nie musisz się o to martwić)

preDexLibraries (odpowiedź swojego trzeciego Q): buduje dex plik z biblioteki, dzięki czemu można go stosować w bieżących buduje (nie buduje pliki Dex za każdym razem dla bibliotek). więc używanie tego elementu, gdy czysta kompilacja sprawia, że ​​wszystko jest trochę wolniejsze.

+0

Podsumowując: z Gradle 2.1.0 lub nowszym nie trzeba ustawiać żadnego z tych parametrów przyspieszyć kompilację – Xan

+1

Nieprawidłowe w przypadku bibliotek wielodrutowych i predex. Te dwie nie są prawdziwe przez defualt. Każda funkcja, która chce być najpierw dodana jako domyślna, jest dodawana jako funkcja inkubacji (oznacza, że ​​można z nich korzystać, ale nie są stabilne i mogą mieć problem). Ale po niektórych wersjach wychodzi poza stan inkubacji i staje się domyślny. –

+0

Multidex nie jest kwestionowany, ponieważ znaczenie jest jasne – Xan