Co to jest Jetifier?

99

Co to jest Jetifier? Na przykład, aby utworzyć nowy projekt przy użyciu zależności z pakietu Androidx, ten nowy projekt musi dodać następujący wiersz do pliku gradle.properties :

android.enableJetifier=true

Więc co to znaczy - „włącz jetifier”?

Ksenia
źródło
30
IIRC, Jetifier to nieudokumentowany fragment technologii Googly, który ma automatycznie konwertować zależności przechodnie, aby korzystały z bibliotek AndroidX. Na przykład załóżmy, że masz implementation "com.commonsware.cwac:document:0.3.0"w swoim dependencies. Ta wersja biblioteki ma zależność przechodnią od com.android.support:support-annotations:27.0.2. Jednak chcesz używać androidx.annotation:annotationw ramach korzystania z innych zależności AndroidX. Jetifier w jakiś sposób zaktualizowałby się com.commonsware.cwac:documentdo użycia androidx.annotation:annotation.
CommonsWare

Odpowiedzi:

70

Tegoroczne Google I / O (18), Google ogłosiło Jetpack, który jest zestawem / zbiorem bibliotek ułatwiających życie programistom.

Jetpack zawiera wcześniej wprowadzone komponenty architektury Androida (ViewModel, Room, Paging, LiveData itp.), A także nowo wprowadzone komponenty architektury, takie jak WorkManager, Navigation. Oprócz tego Jetpack ma również inny zestaw bibliotek, takich jak AndroidX, AndroidKTX itp.

AndroidX to nowa struktura pakietów dla bibliotek obsługujących Androida, takich jak wsparcie, wiązanie danych, projektowanie itp.

np. teraz na oddziałach programiści będą używać androidx.databinding. zamiast android.databinding. podczas importu bibliotek w naszych projektach

Dzięki temu Google może dodać SemVer lub Semantic Versioning do tych pakietów bibliotek. Dla programistów oznacza to, że nie musimy używać tej samej wersji biblioteki obsługi dla wszystkich bibliotek obsługi. Każde wsparcie lub lepiej powiedzieć, biblioteka AndroidX będzie utrzymywać własne wersje.

Kolejną zaletą dla programistów jest to, że nie musimy dbać o utrzymanie tej samej wersji dla wszystkich bibliotek wsparcia w naszym projekcie.

O Jetifier, konwertuje wszystkie pakiety wsparcia w czasie kompilacji. Zgodnie z oficjalną dokumentacją Jetifier

Narzędzie Jetifier migruje biblioteki zależne od obsługi, aby zamiast tego polegać na równoważnych pakietach AndroidX. Narzędzie umożliwia bezpośrednią migrację poszczególnych bibliotek zamiast korzystania z wtyczki Android Gradle dołączonej do Android Studio.

Aby użyć AndroidX w projekcie, musimy ustawić targetSdkVersion dla naszego projektu na 28 i dodać kolejne 2 wiersze w pliku gradle.properties .

android.useAndroidX=true

android.enableJetifier=true

Mam nadzieję, że to odpowie na Twoje pytanie.

EDYTOWAĆ

Ten link zawiera mapowanie wszystkich komponentów biblioteki wsparcia z ich częścią licznika AndroidX.

Zapoznaj się również z tym blogiem, aby uzyskać szczegółowe wyjaśnienie dotyczące systemu AndroidX

silwar
źródło
35
Tak naprawdę nie odpowiadasz na pytanie „Co to jest Jetifier?”, Tylko mówisz o AndroidX i Jetpack.
David Miguel
2
@DavidMiguel Udzieliłem odpowiedzi na główne zadane pytanie, co to znaczy - „włącz jetifier” ?. Chociaż jeśli uważasz, że moja odpowiedź jest częściowa, odpowiednio ją zaktualizuję.
silwar
73

Zakładając, że znasz AndroidX. Jeśli nie, zobacz @ ten post .

Jetifierskonwertuje support librarieswszystkie twoje zależności na AndroidXautomatycznie, jeśli nie ustawisz tego na, truetwój projekt będzie miał zarówno wsparcie ( stał się przestarzały po wersji 28.0.0 ), jak i pakiet AndroidX , który jest zbędny.

Na przykład

Jeśli jesteś PhotoView.javana swoim utrzymaniu. Używa biblioteki wsparcia AppCompatImageView.

import android.support.v7.widget.AppCompatImageView;

Ta klasa została teraz przeniesiona do androidxpakietu, więc jak PhotoViewuzyskać Androidx AppCompatImageView? A aplikacja nadal działa na urządzeniu.

Kto to zrobił?

Jetifier , który konwertuje wszystkie pakiety wsparcia w czasie kompilacji.

Jetifier zmieni się android.support.v7.widget.AppCompatImageViewna androidx.appcompat.widget.AppCompatImageViewpodczas budowania projektu.

Wniosek

Włączenie Jetifier jest ważne podczas migracji z bibliotek pomocniczych do AndroidX .

Zobacz ten post, aby dowiedzieć się więcej o AndroidX.

Informacje

Twój kod może wyświetlać błędy czasu kompilacji po włączeniu Jetifier podczas korzystania z klas zależności. które można usunąć przez usunięcie .idea, .gradlea projekt re-sync.

obraz2

image1

Khemraj
źródło
10
Możesz pozbyć się błędów podczas kompilacji, usuwając .idea / libraries i ponownie zsynchronizuj Gradle.
Clo Knibbe
1
Myślę, że Jetifier działa w czasie kompilacji, a nie w czasie wykonywania, jak wspomniano tutaj. Możesz użyć android.enableJetifier = true w Gradle lub użyć samodzielnego narzędzia jetifier developer.android.com/studio/command-line/jetifier, aby przejść na androidx. Obie te opcje zastępują nazwy pakietów w czasie kompilacji, więc stare biblioteki obsługi nie są nawet częścią pakietu.
Nishanth
6

Jetifier pomaga w migracji projektu Android do AndroidX .

Jetifier pomaga w podejmowaniu 3rd party biblioteka zgodne z projektem AndroidX.

Jeśli nie korzystasz z żadnej biblioteki innej firmy w swoim projekcie Android, nie musisz używać Jetifier, ponieważ Jetifier pomaga tylko w „dostosowaniu biblioteki innej firmy” do Twojego projektu w przypadku migracji do AndroidX. Aby Twój projekt korzystał z Jetifier, napisz poniższy kod w gradle.properties .

android.enableJetifier=true
android.useAndroidX=true

Jeśli nie przeprowadzasz migracji do AndroidX i korzystasz z poprzedniego sposobu korzystania z bibliotek systemu Android (np. Com.android.support ), te biblioteki innych firm nie muszą być zgodne, ponieważ te biblioteki innych firm są już zgodne z poprzednim sposobem przy użyciu bibliotek Androida. W takim przypadku nie musisz używać Jetifier, więc teraz nie musisz pisać linii podanych powyżej lub możesz po prostu napisać jak poniżej, aby zmienić wartości w przyszłości, aby przejść do androidx: -

android.enableJetifier=false
android.useAndroidX=false
Abhishek Kumar
źródło
4

Jetifier

Jetifier to poręczne narzędzie, które automatycznie przenosi swoją dependenciesTO AndroidXw czasie kompilacji. Bez tego potrzebowałbyś każdej zależności, której używasz, aby mieć wersję AndroidX przed migracją, a to prawdopodobnie nie nastąpi przez jakiś czas.

Należy zwrócić uwagę na ważne ograniczenie: jetifier działa tylko na opakowanych artefaktach. Nie działa na Twoim kodzie źródłowym, który powinieneś zaktualizować samodzielnie

aby włączyć AndroidX, musisz dodać 2 flagi do swojego gradle.propertiespliku. Pierwsza flaga mówi wtyczce Androida, aby używała AndroidXpakietów zamiast AppCompat, a druga flaga włączy Jetifier:

android.useAndroidX=true
android.enableJetifier=true

Zobacz to , to po, aby zrozumieć więcej o AndroidX

Basi
źródło
3

Z oficjalnego doc

Gdy ta flaga jest ustawiona na wartość true, wtyczka systemu Android automatycznie migruje istniejące biblioteki innych firm, aby używać zależności systemu AndroidX, przepisując ich pliki binarne. Flaga ma domyślnie wartość false, jeśli nie zostanie określona.

Jest to przydatne ze względu na kompatybilność. Gdy Konsument używa, androidXa producent używa support. Na przykład, gdy Twój projekt AndroidXchce użyć zależności, która używa support libraryzamiast AndroidX[Przykład]

yoAlex5
źródło
0

Dodaj te dwie linie android.useAndroidX = true

android.enableJetifier = true

w buid.gradle To zadziałało dla mnie

Apurva Aggarwal
źródło