
Mit Google I / O 2018 wurde ein Ersatz für vorhandene Support-Bibliotheken eingeführt - AndroidX
Ursprünglich wurden Support-Bibliotheken für die Abwärtskompatibilität neuer APIs entwickelt und waren eng mit dem Betriebssystem verbunden. Unterstützungsbibliotheken wurden in internen Zweigen entwickelt, die regelmäßig in das Android Open Source Project (AOSP) integriert wurden. Dieser Ansatz beschränkte die Merge-Pull-Anforderung der Community auf kurze Zeiträume, in denen der AOSP-Code und der interne Google-Code synchronisiert wurden. Um mit Support-Bibliotheken arbeiten zu können, musste außerdem der gesamte Plattformcode abgepumpt werden. Dies sind mehr als 40 GB Quellcode. Für mein 250-GB-Laufwerk ist das ziemlich viel.
Die aktuelle Funktionalität von Support-Bibliotheken ist viel umfassender als die ursprüngliche Idee. Beispielsweise ist eine Komponente implementiert, um die Entwicklung der AppCompat-Benutzeroberfläche zu vereinfachen, eine Komponente für die Arbeit mit Raumdatenbanken und eine Komponente für WorkManager-Hintergrundaufgaben. Viele dieser Bibliotheken sind anfangs abwärtskompatibel und lose an die Android-API gebunden. Die Nummer in der Support-Bibliotheksnummer gibt die Mindeststufe der unterstützten API an. Beispielsweise unterstützt support-v7 die Android-API Version 7 und höher. Ab Version 26.0.0 unterstützen Support-Bibliotheken jedoch Android API 14 und höher. Ein weiterer Nachteil ist die Notwendigkeit, alle Support-Bibliotheken gleichzeitig zu aktualisieren. All dies deutet darauf hin, dass Support-Bibliotheken veraltet sind und neu überdacht werden müssen.
Das Entwicklungsteam hat mehrere Jahre damit verbracht, Support-Bibliotheken in einem separaten kleinen Projekt zu isolieren, mit dem Sie mit Android Studio und Gradle arbeiten können. Die Entwicklung wurde in eine separate Niederlassung verlegt, die kürzlich öffentlich wurde. Aktualisierte Bibliotheken heißen AndroidX. Ein weiterer wichtiger Unterschied zwischen den neuen Bibliotheken ist die Möglichkeit unabhängiger Updates. Google verspricht Binärkompatibilität im Rahmen einer Hauptversion, die die Verwendung von recyclerview Version 1.0 und AppCompat Version 1.9 im selben Projekt ermöglicht.
Meiner Meinung nach ist dies der richtige und logische Schritt bei der Entwicklung von Support-Bibliotheken. Ich musste Komponenten aus Support-Bibliotheken mehrmals stark anpassen, was dazu führte, dass in meinem Projekt das Paket com.android.support erstellt werden musste ... um auf paketprivate Klassen / Methoden / Felder zuzugreifen.
Jetzt schlage ich vor, eine Bibliothek aus der AndroidX-Familie mit mir zu „hacken“. Als Tutorial habe ich CardView gewählt. Ich werde das Verhalten von CardView beeinflussen, ohne Änderungen am Code vorzunehmen, der es verwendet.
Wir benötigen: einen Computer unter Linux oder MacOS (Windows wird nicht unterstützt), Android SDK, optional Android Studio (ich habe Version 3.1.3 verwendet)
Was ist mit Windows?Zum Herunterladen der Quellen wird empfohlen, das Repo- Dienstprogramm zu verwenden, das für Windows nicht verfügbar ist. Quellen können beispielsweise auch mit git heruntergeladen werden: git clone --single-branch -b androidx-master-dev https://android.googlesource.com/platform/frameworks/support
In diesem Fall jedoch nicht Dienstprogramme und kompilierte Abhängigkeiten heruntergeladen. Ich habe nicht überprüft, wie wichtig es ist, zu bauen
Zu Beginn habe ich ein kleines Beispiel mit AndroidX vorbereitet.
Highlights:
Verwenden von AndroidX
def cardViewVer = '1.0.0-beta01' dependencies { implementation "androidx.cardview:cardview:$cardViewVer" }
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <androidx.cardview.widget.CardView android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginBottom="32dp" android:layout_marginEnd="32dp" android:layout_marginLeft="32dp" android:layout_marginRight="32dp" android:layout_marginStart="32dp" android:layout_marginTop="32dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" /> </androidx.cardview.widget.CardView> </FrameLayout>
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }
Als Ergebnis erhalten wir die folgende Anwendung:

Kommen wir zu AndroidX
Zuerst müssen Sie das Repo-Dienstprogramm installieren, das erstellt wurde, um die Arbeit mit Git im Kontext von Android zu vereinfachen.
Wir erstellen einen Arbeitsordner für unsere Manipulationen, obwohl Sie auch das Home-Verzeichnis verwenden können.
mkdir androidX
Installieren Sie das Dienstprogramm
d androidX mkdir bin curl https://storage.googleapis.com/git-repo-downloads/repo > ./bin/repo chmod a+x ./bin/repo PATH={some_path}/androidX/bin/:$PATH
Lassen Sie mich erklären, was wir gerade getan haben:
Im androidX-Ordner haben wir den Repo-Ordner erstellt, in dem wir die Datei unter https://storage.googleapis.com/git-repo-downloads/repo heruntergeladen, die Datei ausführbar gemacht und den Ordner bin als Teil der aktuellen Terminalsitzung zu PATH hinzugefügt haben.
In meinem Fall sah der letzte Befehl folgendermaßen aus: PATH = ~ / Work / projects / androidX / bin /: $ PATH
Laden Sie die Quelle AndroidX herunter:
Erstellen Sie den Ordner androidX / androidX-source und machen Sie ihn aktuell
mkdir androidX-source cd androidX-source
Wir initialisieren das lokale Repository. Es werden etwa 16 Megabyte Daten zu vorhandenen Zweigen im Repository heruntergeladen.
repo init -u https://android.googlesource.com/platform/manifest -b androidx-master-dev
Dabei werden der Name und die E-Mail-Adresse des Benutzers aus der globalen Gig-Konfiguration abgerufen. In meinem Fall sah dies folgendermaßen aus:
Your identity is: Andrew <me@example.com> If you want to change this, please re-run 'repo init' with --config-name , . . Testing colorized output (for 'repo diff', 'repo status'): black red green yellow blue magenta cyan white bold dim ul reverse Enable color display in this user account (y/N)?
Ich habe die letzte Frage bejaht.
Am Ende bekommen wir eine Nachricht
repo has been initialized in /Users/{user}/Work/projects/androidX/androidX-source
Laden Sie als Nächstes die Quelle direkt herunter (ca. 3 Gigabyte).
repo sync -j8 -c
Wir können die heruntergeladenen Quellen in Android Studio oder einem anderen Editor öffnen. Der Stammordner des Gradle-Projekts befindet sich unter: androidX/androidX-source/frameworks/support/
Es gibt viele Module mit unterschiedlichen Funktionen und verschiedene Testanwendungen. Wir können sie zusammenbauen und installieren, um die Leistung zu überprüfen.
Öffnen Sie die Klasse androidx.cardview.widget.RoundRectRrawDrawable im Cardview-Modul
Fügen Sie der onDraw-Methode einen harmlosen Witz hinzu
canvas.drawText(“Hacked!”, 100, 100, paint);
Voller Patch
Für das Projekt wird die Gradle-Aufgabe createArchive beschrieben, mit der die androidX-Bibliotheken gesammelt und im lokalen Maven-Repository abgelegt werden. Repository-Adresse: androidX/androidX-source/out/host/gradle/frameworks/support/build/support_repo
Um es zu verwenden, müssen Sie den Pfad in der Root-Build-Datei angeben.
maven { url 'androidX/androidX-source/out/host/gradle/frameworks/support/build/support_repo' }
Bitte beachten Sie, dass die zusammengestellte Version möglicherweise neuer als im Google-Repository ist. Zum Zeitpunkt dieses Schreibens habe ich eine AndroidX-Bibliotheksversion 1.0.0-rc01 kompiliert. Sie können die Version der kompilierten Bibliothek im lokalen Maven-Repository anzeigen: androidX/androidX-source/out/host/gradle/frameworks/support/build/support_repo/androidx/cardview/cardview/maven-metadata.xml
Beispiel aktualisiert
Wir werden unsere Anwendung neu erstellen und das folgende Bild sehen:

AndroidX erfolgreich gepatcht!
Was gibt uns das:
- Wir können kritische Probleme beheben, ohne auf ein Update von Google zu warten. Das AndroidX-Team akzeptiert übrigens Pull-Anfragen.
- Passen Sie die androidX-Bibliothek stark an.
Verwandte Links:
Support Library Documentation
Entwickler-Blog-Beitrag
AndroidX-Beitragshandbuch
AndroidX Task Tracker
AndroidX-Quellen