Was ist AndroidX?

255

Ich lese über eine Raumbibliothek von Android. Ich sehe sie geändert Paket androidzu androidx. Ich habe das nicht verstanden. Kann mir bitte jemand erklären?

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

Auch dies ist mit dem androidPaket auch verfügbar .

implementation "android.arch.persistence.room:runtime:$room_version"
annotationProcessor "android.arch.persistence.room:compiler:$room_version"
  • Was war nötig, um neue Support-Bibliotheken einzupacken, androidxanstatt android?
  • Anwendungsfall- und Einflussfaktoren in bestehenden Projekten.
Khemraj
quelle
4
Lesen Sie developer.android.com/topic/libraries/support-library/… . androidx.*ist die Pakethierarchie für Unterstützungsbibliotheken. Sie werden alle unter dem gleichen Paket wie in der Ära von androidx(wie Architekturkomponenten, andere Unterstützungsbibliotheken) geliefert .
ADM
3
Was hast du nicht genau verstanden? Warum haben sie das Paket geändert?
Rohit5k2
@ADM warum sie androidxvon CORE auf Paket umgestellt haben android.
Khemraj
2
Der Einfachheit halber haben sie die Paketstruktur neu gestaltet. Dies wurde auch in IO 2018 angekündigt, wenn Sie einen Blick darauf werfen möchten. Thx
ADM

Antworten:

334

AndroidX - Android-Erweiterungsbibliothek

Aus der AndroidX-Dokumentation

Wir führen eine neue Paketstruktur ein, um klarer zu machen, welche Pakete mit dem Android-Betriebssystem gebündelt und welche mit der APK Ihrer App gepackt sind. In Zukunft wird die Pakethierarchie für Android * für Android-Pakete reserviert, die mit dem Betriebssystem geliefert werden. Andere Pakete werden in der neuen androidx. * -Pakethierarchie als Teil der AndroidX-Bibliothek ausgegeben.

Benötigen Sie AndroidX

AndroidX ist eine neu gestaltete Bibliothek, um Paketnamen klarer zu machen. Von nun an wird die Android- Hierarchie nur noch für Android-Standardklassen gelten, die mit dem Android-Betriebssystem geliefert werden, und andere Bibliotheken / Abhängigkeiten werden Teil von AndroidX sein (sinnvoller). Von nun an wird die gesamte Neuentwicklung in Androidx aktualisiert.

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

Komplette Artefaktzuordnungen für AndroidX-Pakete

AndroidX verwendet die Semantic-Version

Zuvor wurde support librarydie SDK-Version verwendet, AndroidX jedoch die Semantic-version. Es wird von 28.0.0 → 1.0.0 neu versioniert.

So migrieren Sie das aktuelle Projekt

In Android Studio 3.2 (September 2018) gibt es eine direkte Option zum Migrieren eines vorhandenen Projekts nach AndroidX. Dadurch werden alle Pakete automatisch überarbeitet.

Vor der Migration wird dringend empfohlen, Ihr Projekt zu sichern.

Bestehendes Projekt

  • Android Studio> Refactor-Menü> Zu AndroidX migrieren ...
  • Es wird das Refraktorfenster unten analysieren und öffnen. Akzeptieren Sie die durchzuführenden Änderungen.

Bild

Neues Projekt

Setzen Sie diese Flaggen in Ihre gradle.properties

android.enableJetifier=true
android.useAndroidX=true

Überprüfen Sie die @ Library-Zuordnungen auf das gleiche AndroidX-Paket .

Überprüfen Sie @ Offizielle Seite von Migrate to AndroidX

Was ist Jetifier?

Fehler bei der Migration

  • Wenn Sie eine App erstellen und nach der Migration einige Fehler finden, müssen Sie diese geringfügigen Fehler beheben. Sie werden dort nicht stecken bleiben, da dies leicht behoben werden kann.
  • Bibliotheken von Drittanbietern werden nicht im Verzeichnis in AndroidX konvertiert, sondern zur Laufzeit von Jetifier konvertiert. Machen Sie sich also keine Sorgen über Fehler bei der Kompilierung. Ihre App wird einwandfrei ausgeführt.

Support 28.0.0 ist letzte Version?

Ab Android Support Revision 28.0.0

Dies ist die letzte Feature-Version unter der android.support-Verpackung . Entwickler werden aufgefordert, auf AndroidX 1.0.0 zu migrieren

Gehen Sie also mit AndroidX, da Android ab sofort nur noch das Androidx-Paket aktualisiert.

Weiterführende Literatur

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

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

Khemraj
quelle
2
@androidmalin Freut mich von Ihnen zu hören - diese Informationen haben Ihnen geholfen :)
Khemraj
Unter welchen Umständen können / sollten Sie enableJetifier auf false setzen?
Mark
1
@Mark enableJetifier=falseist der Standardwert. Es ist falsch, wenn Sie es nicht einstellen. Das bedeutet, dass keine Ihrer Bibliotheken in AndroidX neu geschrieben wird.
Khemraj
4
Die Migration von Android Studio funktioniert schlecht. Ich musste Hunderte von Dateien manuell reparieren ... Ich verbringe mehr Zeit damit, Code aufgrund von Änderungen an den Google-Tools zu reparieren, als den Code tatsächlich zu programmieren, der wichtig ist ... seufz
LearningPath
1
Es heißt jetzt (3.3)Migrate to AndroidX
Dale
32

Basierend auf der Dokumentation :

androidx ist eine neue Paketstruktur, um klarer zu machen, welche Pakete mit dem Android-Betriebssystem gebündelt sind und welche mit der APK Ihrer App gepackt sind. In Zukunft wird die Pakethierarchie für Android * für Android-Pakete reserviert, die mit dem Betriebssystem geliefert werden. andere pakete werden in der neuen androidx. * pakethierarchie ausgegeben.

Die neu gestaltete Paketstruktur soll kleinere und fokussiertere Bibliotheken fördern. Details zu den Artefaktzuordnungen finden Sie hier .

Es gibt Unterstützungsbibliotheken (mit Komponenten und Paketen aus Gründen der Abwärtskompatibilität) mit dem Namen "v7", wenn die unterstützte Mindest-SDK-Stufe 14 beträgt. Die neue Benennung macht deutlich, dass die Trennung zwischen APIs, die mit der Plattform gebündelt sind, und den Bibliotheken für verwendete App-Entwickler klar ist auf verschiedenen Versionen von Android. Weitere Informationen finden Sie in der offiziellen Ankündigung .

Sagar
quelle
22

AndroidX ist das Open-Source-Projekt, mit dem das Android-Team Bibliotheken in Jetpack entwickelt, testet , verpackt, versioniert und veröffentlicht .

AndroidX ist eine wesentliche Verbesserung gegenüber der ursprünglichen Android Support Library . Wie die Support-Bibliothek wird AndroidX separat vom Android-Betriebssystem ausgeliefert und bietet Abwärtskompatibilität für alle Android-Versionen. AndroidX ersetzt die Support-Bibliothek vollständig, indem es Feature-Parität und neue Bibliotheken bereitstellt.

AndroidX enthält die folgenden Funktionen:

  • Alle Pakete in AndroidX leben in einem konsistenten Namespace, beginnend mit der Zeichenfolge androidx. Die Support Library-Pakete wurden den entsprechenden androidx. * -Paketen zugeordnet. Eine vollständige Zuordnung aller alten Klassen und Build-Artefakte zu den neuen finden Sie auf der Seite Paket-Refactoring.

  • Im Gegensatz zur Support-Bibliothek werden AndroidX-Pakete separat verwaltet und aktualisiert. Die AndroidX-Pakete verwenden strikt Semantic Versioningab Version 1.0.0. Sie können AndroidX-Bibliotheken in Ihrem Projekt unabhängig aktualisieren.

  • Die gesamte Entwicklung der neuen Support-Bibliothek erfolgt in der AndroidX-Bibliothek. Dies umfasst die Wartung der ursprünglichen Artefakte der Support Library und die Einführung neuer Jetpack-Komponenten.

Verwenden von AndroidX

Unter Migrieren auf AndroidX erfahren Sie, wie Sie ein vorhandenes Projekt migrieren.

Wenn Sie AndroidX in einem neuen Projekt verwenden möchten, müssen Sie das Kompilierungs-SDK auf Android 9.0 (API-Stufe 28) oder höher setzen und beide der folgenden Android Gradle-Plugin-Flags in Ihrer gradle.propertiesDatei auf true setzen .

  • android.useAndroidX: Wenn true festgelegt ist, verwendet das Android-Plugin anstelle einer Support-Bibliothek die entsprechende AndroidX-Bibliothek. Das Flag ist standardmäßig falsch, wenn es nicht angegeben ist.

  • android.enableJetifier: Wenn true festgelegt ist, migriert das Android-Plugin vorhandene Bibliotheken von Drittanbietern automatisch zur Verwendung von AndroidX, indem die Binärdateien neu geschrieben werden. Das Flag ist standardmäßig falsch, wenn es nicht angegeben ist.

Für Artifact Zuordnungen sehen diese

Basi
quelle
14

Dieser Artikel Android Jetpack: Was bedeuten die jüngsten Ankündigungen für die Android Support Library? erklärt es gut

Heutzutage betrachten viele die Support-Bibliothek als einen wesentlichen Bestandteil der Android-App-Entwicklung, bis zu dem Punkt, an dem sie von 99 Prozent der Apps im Google Play Store verwendet wird. Mit dem Wachstum der Support-Bibliothek haben sich jedoch Inkonsistenzen in Bezug auf die Namenskonvention der Bibliothek eingeschlichen.

Anfänglich gab der Name jedes Pakets die von diesem Paket unterstützte Mindest-API-Ebene an, z. B. support-v4. Die Version 26.0.0der Support-Bibliothek hat jedoch die Mindest-API auf 14 erhöht, sodass viele der Paketnamen heute nichts mehr mit der Mindest-API-Stufe zu tun haben. Wenn die Pakete support-v4 und support-v7 beide eine Mindest-API von 14 haben, ist leicht zu erkennen, warum die Leute verwirrt sind!

Um diese Verwirrung zu beseitigen, überarbeitet Google derzeit die Support-Bibliothek in eine neue Android-Erweiterungsbibliothek beseitigen, überarbeitet AndroidX-Paketstruktur ( ). AndroidX bietet vereinfachte Paketnamen sowie Maven-Gruppen- und Artefakt-IDs, die den Inhalt jedes Pakets und die unterstützten API-Ebenen besser widerspiegeln.

Mit der aktuellen Namenskonvention ist auch nicht klar, welche Pakete mit dem Android-Betriebssystem gebündelt sind und welche mit dem APK (Android Package Kit) Ihrer Anwendung gepackt sind . Um diese Verwirrung zu beseitigen, werden alle entbündelten Bibliotheken in den AndroidX. * Namespace von AndroidX verschoben, während die Pakethierarchie für Android. * Für Pakete reserviert wird, die mit dem Android-Betriebssystem geliefert werden .

onmyway133
quelle
12

Nur ein paar Kleinigkeiten von meiner Seite zu allen verfügbaren Antworten

Benötigen Sie AndroidX

  1. Wie in einer erstaunlichen Antwort von @KhemRaj gesagt,

Mit der aktuellen Namenskonvention ist nicht klar, welche Pakete mit dem Android-Betriebssystem gebündelt sind und welche mit dem APK ( Android Package Kit ) Ihrer Anwendung gepackt sind . Um diese Verwirrung zu beseitigen , werden alle entbündelten Bibliotheken in den AndroidX * -Namensraum von AndroidX verschoben, während die Pakethierarchie für Android * für Pakete reserviert wird, die mit dem Android-Betriebssystem geliefert werden.

  1. Anderes als das,

    Anfänglich gab der Name jedes Pakets die von diesem Paket unterstützte Mindest-API-Ebene an, z. B. support-v4 . In Version 26.0.0 der Support Library wurde die Mindest-API jedoch auf 14 erhöht , sodass viele der Paketnamen heute nichts mehr mit der Mindest-API-Stufe zu tun haben. Wenn die Pakete support-v4 und support-v7 beide eine Mindest-API von 14 haben, ist leicht zu erkennen, warum die Leute verwirrt sind!. Mit AndroidX besteht also keine Abhängigkeit von der API-Ebene.

Eine weitere wichtige Änderung besteht darin, dass die AndroidX-Artefakte unabhängig voneinander aktualisiert werden, sodass Sie einzelne AndroidX-Bibliotheken in Ihrem Projekt aktualisieren können, anstatt jede Abhängigkeit gleichzeitig ändern zu müssen. Diese frustrierenden MeldungenAlle com.android.support-Bibliotheken müssen genau dieselbe Versionsspezifikation verwenden “ sollten der Vergangenheit angehören !

Abhishek Kumar
quelle
7

Ich habe AndroidX aus diesem Android Dev Summit-Video kennengelernt . Die Zusammenfassung ist -

  1. Keine Support-Bibliothek mehr: Die Android-Support-Bibliothek wird von Google niemals unter dem Namespace der Support-Bibliothek verwaltet. Wenn Sie also Fehlerbehebungen in der Support-Bibliothek finden möchten, müssen Sie Ihr Projekt in AndroidX migrieren
  2. Bessere Paketverwaltung: Für eine standardisierte und unabhängige Versionierung. Weil die vorherige Versionierung der Supportbibliothek zu verwirrend war. Sie werden den Schmerz der Meldung "Alle Bibliotheken von com.android.support müssen genau dieselbe Versionsspezifikation verwenden" loslassen .
  3. Andere God-Bibliotheken sind auf AndroidX migriert : Google Play Services, Firebase, Mockito 2 usw. werden auf AndroidX migriert.
  4. Neue Bibliotheken werden mit AndroidX-Artefakten veröffentlicht: Alle Bibliotheken befinden sich wie Android Jetpack im AndroidX-Namespace
Gk Mohammad Emon
quelle
4

Es ist dasselbe wie die AppCompat-Versionen der Unterstützung, hat jedoch weniger Probleme mit den Versionen 4 und 7, sodass die Verwendung der verschiedenen Komponenten von Android-XML-Elementen sehr hilfreich ist.

Raj Kavadia
quelle
4

androidxwird support librarynach ersetzen 28.0.0. Sie sollten Ihr Projekt migrieren, um es zu verwenden. androidxverwendet Semantic Versioning. Die Verwendung AndroidXwird nicht durch die Version verwechselt, die im Bibliotheksnamen und im Paketnamen angegeben ist. Das Leben wird einfacher

[AndroidX und Support-Kompatibilität]

yoAlex5
quelle
3

AndroidX ist das Open-Source-Projekt, mit dem das Android-Team Bibliotheken in Jetpack entwickelt, testet, verpackt, versioniert und veröffentlicht.

Nach stundenlangem Kämpfen habe ich es gelöst, indem ich Folgendes in app / build.gradle aufgenommen habe:

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

Setzen Sie diese Flags in Ihre 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'

Bei der Migration unter Android Studio wird die App / Gradle-Datei automatisch mit den Implementierungen der Korrekturbibliothek aus der Standardbibliothek aktualisiert

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

Kanwarpreet Singh
quelle
0

Android bietet verschiedene Bibliothekssätze. Eine heißt Android Support Library und die andere heißt AndroidX. Wenn Sie "Android. * Artefakte verwenden" auswählen, wird angezeigt, dass AndroidX verwendet werden soll.

CYUBAHIRO Patrick
quelle