Co to jest AndroidX?

255

Czytam o bibliotece pokojowej Androida. Widzę, że zmienili pakiet androidna androidx. Nie zrozumiałem tego. Czy ktoś może wyjaśnić?

implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version"

Nawet to jest dostępne androidrównież w pakiecie.

implementation "android.arch.persistence.room:runtime:$room_version"
annotationProcessor "android.arch.persistence.room:compiler:$room_version"
  • Czemu potrzebowaliśmy androidxzamiast tego pakować nowe biblioteki wsparcia android?
  • Przypadek użycia i czynniki wpływające na istniejące projekty.
Khemraj
źródło
4
Przeczytaj developer.android.com/topic/libraries/support-library/ ... androidx.*to hierarchia pakietów dla bibliotek pomocniczych. Wszystkie otrzymają ten sam pakiet, co my w erze androidx(jak komponenty architektury, inne biblioteki wsparcia).
ADM
3
Czego nie zrozumiałeś dokładnie? Dlaczego zmienili pakiet?
Rohit5k2
@ ADM dlaczego przeszli na androidxpakiet z CORE android.
Khemraj
2
Po prostu przeprojektowali strukturę pakietu dla uproszczenia. Zostało to również ogłoszone w IO 2018, jeśli chcesz rzucić okiem. Dzięki
ADM

Odpowiedzi:

334

AndroidX - biblioteka rozszerzeń Androida

Z dokumentacji AndroidX

Wdrażamy nową strukturę pakietów, aby wyjaśnić, które pakiety są dołączone do systemu operacyjnego Android, a które są dołączone do aplikacji APK. W przyszłości hierarchia pakietów systemu Android. * Zostanie zarezerwowana dla pakietów systemu Android dostarczanych z systemem operacyjnym. Inne pakiety będą wydawane w nowej hierarchii pakietów Androidx. * Jako część biblioteki AndroidX.

Potrzebujesz AndroidaX

AndroidX to przeprojektowana biblioteka, dzięki której nazwy pakietów są bardziej przejrzyste. Więc od teraz android hierarchii będzie tylko dla android klas domyślnych, który jest wyposażony w system operacyjny Android i inne biblioteki / Zależności będzie częścią androidx (większy sens). Odtąd wszystkie nowe opracowania będą aktualizowane w Androidzie.

com.android.support. **: androidx. com.android.support:appcompat-v7
: androidx.appcompat: appcompat com.android.support:recyclerview-v7: androidx.recyclerview : recyclinglerview com.android.support:design : com.google.android.material: materiał

Kompletne mapowania artefaktów dla pakietów AndroidX

AndroidX używa wersji semantycznej

Wcześniej support libraryużywano wersji SDK, ale AndroidX używa Semantic-version. Będzie ponownie wersji z 28.0.0 → 1.0.0.

Jak przeprowadzić migrację bieżącego projektu

W Android Studio 3.2 (wrzesień 2018 r.) Istnieje bezpośrednia opcja migracji do istniejącego projektu AndroidX. To automatycznie refaktoryzuje wszystkie paczki.

Przed migracją zdecydowanie zaleca się wykonanie kopii zapasowej projektu.

Istniejący projekt

  • Android Studio> Menu Refactor> Migruj do AndroidX ...
  • Przeanalizuje i otworzy okno Refraktora na dole. Zaakceptuj zmiany do wykonania.

wizerunek

Nowy projekt

Umieść te flagi w swoim gradle.properties

android.enableJetifier=true
android.useAndroidX=true

Sprawdź mapowania @ Library pod kątem równego pakietu AndroidX .

Sprawdź @ Oficjalna strona Migracji do AndroidaX

Co to jest Jetifier?

Błędy migracji

  • Jeśli tworzysz aplikację i po migracji znajdziesz jakieś błędy, musisz naprawić te drobne błędy. Nie utkniesz tam, ponieważ można to łatwo naprawić.
  • Biblioteki innych firm nie są konwertowane na AndroidX w katalogu, ale są konwertowane w czasie wykonywania przez Jetifier , więc nie martw się błędami czasu kompilacji, aplikacja będzie działać idealnie.

Wsparcie 28.0.0 to ostatnia wersja?

Od Androida Wsparcie Wersja 28.0.0

Będzie to ostatnia wersja funkcji w pakiecie android.support , a deweloperów zachęca się do migracji do AndroidaX 1.0.0

Więc idź z AndroidX, ponieważ Android zaktualizuje teraz tylko pakiet Androidx.

Dalsza lektura

https://developer.android.com/topic/libraries/support-library/androidx-overview

https://android-developers.googleblog.com/2018/05/hello-world-androidx.html

Khemraj
źródło
2
@androidmalin Miło mi słyszeć od Ciebie - ta informacja pomogła Ci :)
Khemraj
W jakich okolicznościach możesz / powinieneś ustawić enableJetifier na false?
Mark
1
@ Mark enableJetifier=falsejest wartością domyślną. Jest to fałsz, jeśli go nie ustawisz. Oznacza to, że żadna z twoich bibliotek nie zostanie ponownie zapisana w systemie AndroidX.
Khemraj
4
Migracja studia Android działa źle. musiałem ręcznie naprawić setki plików ... spędzam więcej czasu na naprawie kodu ze względu na zmiany w narzędziach Google niż na faktyczne zaprogramowanie kodu, który ma znaczenie ... westchnienie
LearningPath,
1
Teraz nazywa się (3.3)Migrate to AndroidX
Dale
32

Na podstawie dokumentacji :

Androidx to nowa struktura pakietów, która wyjaśnia, które pakiety są dołączone do systemu operacyjnego Android, a które są dołączone do aplikacji APK. W przyszłości hierarchia pakietów systemu Android. * Zostanie zarezerwowana dla pakietów systemu Android dostarczanych z systemem operacyjnym; inne pakiety będą wydawane w nowej hierarchii pakietów androidx. *.

Przeprojektowana struktura pakietu ma zachęcać mniejsze i bardziej ukierunkowane biblioteki. Szczegółowe informacje na temat mapowania artefaktów znajdują się tutaj .

Istnieją biblioteki pomocnicze (zawierające komponent i pakiety dla kompatybilności wstecznej) o nazwie „v7”, gdy minimalny obsługiwany poziom zestawu SDK wynosi 14, nowe nazewnictwo wyjaśnia zrozumienie podziału między interfejsami API dołączonymi do platformy i bibliotek dla programistów aplikacji, które są używane na różnych wersjach Androida. Więcej informacji można znaleźć w oficjalnym ogłoszeniu .

Sagar
źródło
22

AndroidX to projekt typu open source, którego zespół Android używa do opracowywania, testowania, pakowania, wersji i wydawania bibliotek w Jetpack .

AndroidX to znaczna poprawa oryginalnej biblioteki wsparcia Androida . Podobnie jak Biblioteka pomocy, system AndroidX jest dostarczany oddzielnie od systemu operacyjnego Android i zapewnia zgodność wsteczną we wszystkich wersjach Androida. AndroidX całkowicie zastępuje bibliotekę pomocy, zapewniając parzystość funkcji i nowe biblioteki.

AndroidX zawiera następujące funkcje:

  • Wszystkie pakiety w systemie AndroidX działają w spójnej przestrzeni nazw, zaczynając od ciągu androidx. Pakiety biblioteki wsparcia zostały zamapowane na odpowiednie pakiety systemu Androidx. *. Aby uzyskać pełne mapowanie wszystkich starych klas i budowanie artefaktów na nowe, zobacz stronę Refaktoryzacja pakietów.

  • W przeciwieństwie do Biblioteki wsparcia, pakiety AndroidX są oddzielnie utrzymywane i aktualizowane. Pakiety Androidx używają ścisłej Semantic Versioningwersji począwszy od wersji 1.0.0. Możesz aktualizować biblioteki AndroidX w swoim projekcie niezależnie.

  • Wszystkie nowe opracowania biblioteki wsparcia będą się odbywać w bibliotece AndroidX. Obejmuje to konserwację oryginalnych artefaktów biblioteki pomocy technicznej i wprowadzenie nowych komponentów Jetpack.

Korzystanie z AndroidX

Zobacz Migracja do systemu AndroidX, aby dowiedzieć się, jak przeprowadzić migrację istniejącego projektu.

Jeśli chcesz używać systemu AndroidX w nowym projekcie, musisz ustawić zestaw SDK kompilacji na Android 9.0 (poziom API 28) lub wyższy i ustawić obie następujące flagi wtyczek Android Gradle na true w swoim gradle.propertiespliku.

  • android.useAndroidX: Po ustawieniu wartości true wtyczka Androida używa odpowiedniej biblioteki AndroidX zamiast biblioteki pomocy technicznej. Flaga jest domyślnie fałszywa, jeśli nie jest określona.

  • android.enableJetifier: Po ustawieniu wartości true wtyczka systemu Android automatycznie migruje istniejące biblioteki innych firm w celu korzystania z systemu AndroidX, przepisując ich pliki binarne. Flaga jest domyślnie fałszywa, jeśli nie jest określona.

Dla artefakty mapowania zobaczyć ten

Basi
źródło
14

Ten artykuł Android Jetpack: Co oznaczają ostatnie ogłoszenia dla biblioteki wsparcia Androida? dobrze to wyjaśnia

Obecnie wielu uważa bibliotekę pomocy technicznej za niezbędny element tworzenia aplikacji na Androida, do tego stopnia, że ​​korzysta z niej 99 procent aplikacji w sklepie Google Play. Jednak wraz z rozwojem Biblioteki wsparcia pojawiły się niespójności w otaczającej konwencji nazewnictwa biblioteki.

Początkowo nazwa każdego pakietu wskazywała minimalny poziom API obsługiwany przez ten pakiet, na przykład support-v4. Jednak wersja 26.0.0biblioteki wsparcia zwiększyła minimalny interfejs API do 14, więc dziś wiele nazw pakietów nie ma nic wspólnego z minimalnym obsługiwanym poziomem interfejsu API. Gdy oba pakiety support-v4 i support-v7 mają minimum API 14, łatwo jest zrozumieć, dlaczego ludzie się mylą!

Aby usunąć to zamieszanie, Google obecnie refaktoryzuje bibliotekę pomocy technicznej do nowej struktury pakietu biblioteki rozszerzeń Androida (AndroidX). AndroidX będzie zawierać uproszczone nazwy pakietów, a także Maven groupIds i artefactIds, które lepiej odzwierciedlają zawartość każdego pakietu i obsługiwanych poziomów API.

Przy obecnej konwencji nazewnictwa nie jest również jasne, które pakiety są dołączone do systemu operacyjnego Android, a które są dołączone do aplikacji APK (Android Package Kit) . Aby usunąć to zamieszanie, wszystkie rozpakowane biblioteki zostaną przeniesione do przestrzeni nazw systemu AndroidX. * AndroidX, podczas gdy hierarchia pakietów systemu Android. * Zostanie zarezerwowana dla pakietów dostarczanych z systemem operacyjnym Android .

onmyway133
źródło
12

Tylko kilka dodatków z mojej strony do wszystkich dostępnych odpowiedzi

Potrzebujesz AndroidaX

  1. Jak napisano w zdumiewającej odpowiedzi @KhemRaj,

Przy obecnej konwencji nazewnictwa nie jest jasne, które pakiety są dołączone do systemu operacyjnego Android , a które są dołączone do aplikacji APK ( Android Package Kit ). Aby rozwiązać ten problem, wszystkie rozpakowane biblioteki zostaną przeniesione do przestrzeni nazw systemu AndroidX. * Systemu AndroidX. *, Podczas gdy hierarchia pakietów systemu Android. * Zostanie zarezerwowana dla pakietów dostarczanych z systemem operacyjnym Android.

  1. Inne niż to,

    Początkowo nazwa każdego pakietu wskazywała minimalny poziom API obsługiwany przez ten pakiet, na przykład support-v4 . Jednak wersja 26.0.0 biblioteki wsparcia zwiększyła minimalny interfejs API do 14 , więc dziś wiele nazw pakietów nie ma nic wspólnego z minimalnym obsługiwanym poziomem interfejsu API. Gdy oba pakiety support-v4 i support-v7 mają minimum API 14, łatwo jest zrozumieć, dlaczego ludzie się mylą! Tak więc teraz w systemie AndroidX nie ma zależności od poziomu interfejsu API.

Kolejną ważną zmianą jest to, że artefakty AndroidX będą się aktualizować niezależnie, dzięki czemu będziesz mógł aktualizować poszczególne biblioteki AndroidX w swoim projekcie, zamiast zmieniać wszystkie zależności jednocześnie. Te frustrujące komunikaty „ Wszystkie biblioteki com.android.support muszą używać dokładnie tej samej specyfikacji wersji ” powinny odejść w przeszłość!

Abhishek Kumar
źródło
7

Dowiedziałem się o AndroidX z tego wideo na Android Dev Summit . Podsumowanie to -

  1. Nigdy więcej biblioteki wsparcia: Google nie będzie nigdy obsługiwać biblioteki wsparcia Androida pod obszarem nazw biblioteki wsparcia. Jeśli więc chcesz znaleźć poprawki błędu w bibliotece wsparcia, musisz przeprowadzić migrację projektu w systemie AndroidX
  2. Lepsze zarządzanie pakietami: w przypadku znormalizowanego i niezależnego wersjonowania. Ponieważ poprzednie wersje bibliotek wsparcia były zbyt mylące. Uwolni cię to od bólu „Wszystkie biblioteki com.android.support muszą używać dokładnie tej samej specyfikacji wersji” .
  3. Inne biblioteki Boga migrowały do ​​systemu AndroidX : usługi Google Play, Firebase, Mockito 2 itd. Są migrowane do systemu AndroidX.
  4. Nowe biblioteki zostaną opublikowane przy użyciu artefaktu AndroidX: Wszystkie biblioteki będą znajdować się w przestrzeni nazw AndroidX, np. Android Jetpack
Gk Mohammad Emon
źródło
4

Jest to to samo, co wersje wsparcia AppCompat, ale ma mniej bałaganu w wersjach v4 i v7, więc jest to bardzo pomocne w korzystaniu z różnych składników elementów XML Androida.

raj kavadia
źródło
4

androidxzastąpi support librarypo 28.0.0. Powinieneś migrować swój projekt, aby go użyć. androidxwykorzystuje Semantic Versioning. Używanie AndroidXnie będzie mylone z wersją przedstawioną w nazwie biblioteki i nazwie pakietu. Życie staje się łatwiejsze

[AndroidX i kompatybilność z obsługą]

yoAlex5
źródło
3

AndroidX to projekt typu open source, którego zespół Android używa do opracowywania, testowania, pakowania, wersji i wydawania bibliotek w Jetpack.

Po wielu godzinach walki rozwiązałem go, dołączając następujące elementy do app / build.gradle:

android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

Umieść te flagi w gradle.properties

android.enableJetifier=true
android.useAndroidX=true

Changes in gradle:

implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'com.google.android.material:material:1.1.0-alpha04'

Podczas migracji w Android Studio plik aplikacji / oceny jest automatycznie aktualizowany przy użyciu implementacji biblioteki poprawek ze standardowej biblioteki

Zobacz: https://developer.android.com/jetpack/androidx/migrate

Kanwarpreet Singh
źródło
0

Android zapewnia kilka różnych zestawów bibliotek. Jeden nazywa się biblioteką obsługi Androida, a drugi nazywa się AndroidX. Wybranie opcji „Użyj Androida. * Artefakty” oznacza, że ​​chcemy używać systemu AndroidX.

CYUBAHIRO Patrick
źródło