Was ist Jetifier?


96

Was ist Jetifier? Um beispielsweise ein neues Projekt mit den von AndroidX gepackten Abhängigkeiten zu erstellen, muss dieses neue Projekt der Datei gradle.properties die folgende Zeile hinzufügen :

android.enableJetifier=true

Was bedeutet es also - "Jetifier aktivieren"?


28
IIRC, Jetifier ist ein undokumentiertes Stück Googly-Technologie, das transitive Abhängigkeiten automatisch in AndroidX-Bibliotheken konvertieren soll. Angenommen, Sie haben implementation "com.commonsware.cwac:document:0.3.0"in Ihrem dependencies. Diese Bibliotheksversion hat eine transitive Abhängigkeit von com.android.support:support-annotations:27.0.2. Sie möchten jedoch androidx.annotation:annotationals Teil der Verwendung anderer AndroidX-Abhängigkeiten verwenden. Jetifier würde irgendwie aktualisieren, um com.commonsware.cwac:documentzu verwenden androidx.annotation:annotation.
CommonsWare

Antworten:


65

Das diesjährige Google I / O (18) hat Google Jetpack angekündigt, das eine Sammlung von Bibliotheken enthält, um Entwicklern das Leben zu erleichtern.

Jetpack enthält zuvor eingeführte Android-Architekturkomponenten (ViewModel, Room, Paging, LiveData usw.) sowie neu eingeführte Architekturkomponenten wie WorkManager, Navigation. Abgesehen davon hat Jetpack auch andere Bibliotheken wie AndroidX, AndroidKTX usw.

AndroidX ist eine neue Paketstruktur für Android-Supportbibliotheken wie Support, Datenbindung, Design usw.

zB jetzt auf Stationen verwenden Entwickler androidx.databinding. anstelle von android.databinding. beim Importieren von Bibliotheken in unsere Projekte

Dadurch kann Google SemVer oder Semantic Versioning in seine Bibliothekspakete aufnehmen. Für Entwickler bedeutet dies, dass wir nicht für alle Support-Bibliotheken dieselbe Support-Bibliotheksversion verwenden müssen. Jede Unterstützung oder besser gesagt AndroidX-Bibliothek behält ihre eigene Versionierung bei.

Ein weiterer Vorteil für Entwickler ist, dass wir nicht für alle Support-Bibliotheken in unserem Projekt dieselbe Version beibehalten müssen.

Über Jetifier werden alle Support-Pakete von Abhängigkeiten zur Erstellungszeit konvertiert. Gemäß offizieller Dokumentation von Jetifier

Das Jetifier-Tool migriert unterstützungsbibliotheksabhängige Bibliotheken, um sich stattdessen auf die entsprechenden AndroidX-Pakete zu verlassen. Mit dem Tool können Sie eine einzelne Bibliothek direkt migrieren, anstatt das mit Android Studio gelieferte Android Gradle-Plugin zu verwenden.

Um AndroidX in einem Projekt zu verwenden, müssen wir targetSdkVersion für unser Projekt auf 28 setzen und die folgenden 2 Zeilen in die Datei gradle.properties einfügen .

android.useAndroidX=true

android.enableJetifier=true

Ich hoffe, dies wird Ihre Frage beantworten.

BEARBEITEN

Dieser Link enthält eine Zuordnung aller Support-Bibliothekskomponenten zu ihrem AndroidX-Gegenstück.

Weitere Informationen zu AndroidX finden Sie in diesem Blog


33
Sie beantworten die Frage "Was ist Jetifier?" Nicht wirklich, sondern beschäftigen sich nur mit AndroidX und Jetpack.
David Miguel

2
@DavidMiguel Ich habe die Antwort auf die Hauptfrage gegeben, was bedeutet das - "Jetifier aktivieren"?. Wenn Sie der Meinung sind, dass meine Antwort teilweise ist, werde ich meine Antwort entsprechend aktualisieren.
Silwar

71

Vorausgesetzt, Sie kennen sich aus AndroidX. Wenn nicht, lesen Sie bitte @ diesen Beitrag .

JetifierKonvertiert support librariesalle Ihre Abhängigkeiten AndroidXautomatisch in. Wenn Sie dies nicht festlegen, verfügt trueIhr Projekt sowohl über die Unterstützung ( nach der Version 28.0.0 veraltet ) als auch über das redundante AndroidX- Paket.

Beispielsweise

Wenn Sie PhotoView.javain Ihrer Abhängigkeit haben. Das nutzt die Support-Bibliothek AppCompatImageView.

import android.support.v7.widget.AppCompatImageView;

Diese Klasse wird jetzt in das androidxPaket verschoben. Wie wird PhotoViewAndroidx erhalten AppCompatImageView? Und die App läuft immer noch auf dem Gerät.

Wer hat diesen Lauf gemacht?

Jetifier , der alle Unterstützungspakete der Abhängigkeit zur Erstellungszeit konvertiert.

Jetifier konvertiert android.support.v7.widget.AppCompatImageViewzu , androidx.appcompat.widget.AppCompatImageViewwährend das Projekt zu bauen.

Fazit

Das Aktivieren von Jetifier ist wichtig, wenn Sie von Support Libraries auf AndroidX migrieren .

In diesem Beitrag erfahren Sie mehr über AndroidX.

Die Info

Ihr Code zeigt möglicherweise Fehler bei der Kompilierung an, nachdem Sie Jetifier aktiviert haben, während Sie Abhängigkeitsklassen verwenden. die Sie durch das Löschen entfernen .idea, .gradleund Neu-Sync - Projekt.

image2

image1


10
Sie können die Fehler bei der Kompilierung beseitigen, indem Sie .idea / library löschen und Gradle erneut synchronisieren.
Clo Knibbe

1
Ich denke, Jetifier funktioniert zur Build-Zeit und nicht zur Laufzeit, wie hier erwähnt. Sie können entweder android.enableJetifier = true auf gradle verwenden oder das eigenständige Jetifier-Tool developer.android.com/studio/command-line/jetifier verwenden , um zu androidx zu migrieren. Beide Optionen ersetzen Paketnamen beim Erstellen, sodass die alten Unterstützungsbibliotheken nicht einmal Teil der Verpackung sind.
Nishanth

6

Jetifier hilft bei der Migration eines Android-Projekts auf AndroidX .

Jetifier hilft dabei, die Bibliothek eines Drittanbieters mit Ihrem AndroidX-Projekt kompatibel zu machen.

Wenn Sie in Ihrem Android-Projekt keine Bibliothek eines Drittanbieters verwenden, müssen Sie Jetifier nicht verwenden, da Jetifier nur dazu beiträgt, die Bibliothek eines Drittanbieters mit Ihrem Projekt kompatibel zu machen, falls Sie auf AndroidX migrieren. Damit Ihr Projekt Jetifier verwendet, schreiben Sie den folgenden Code in gradle.properties .

android.enableJetifier=true
android.useAndroidX=true

Wenn Sie nicht auf AndroidX migrieren und die vorherige Art der Verwendung von Android-Bibliotheken verwenden (z. B. com.android.support ), müssen diese Bibliotheken von Drittanbietern nicht kompatibel gemacht werden, da diese Bibliotheken von Drittanbietern bereits mit der vorherigen Methode von kompatibel sind mit Android-Bibliotheken. In diesem Fall müssen Sie Jetifier nicht verwenden. Jetzt müssen Sie keine Zeilen mehr schreiben, oder Sie können einfach wie folgt schreiben, um die Werte in Zukunft zu ändern und zu AndroidX zu wechseln: -

android.enableJetifier=false
android.useAndroidX=false

4

Jetifier

Der Jetifier ist ein praktisches Tool, dependencieszu dem Sie AndroidXbeim Erstellen automatisch migrieren . Ohne sie benötigen Sie jede Abhängigkeit, die Sie verwenden, um eine AndroidX-Version zu haben, bevor Sie migrieren können, und das wird wahrscheinlich für einige Zeit nicht passieren.

Es gibt eine wichtige Einschränkung zu beachten: Der Jetifier funktioniert nur mit verpackten Artefakten. Es funktioniert nicht mit Ihrem Quellcode, den Sie voraussichtlich selbst aktualisieren werden

Um AndroidX zu aktivieren, müssen Sie Ihrer gradle.propertiesDatei 2 Flags hinzufügen . Das erste Flag weist das Android-Plugin an, AndroidXPakete anstelle von zu verwenden AppCompat, und das zweite Flag aktiviert Folgendes Jetifier:

android.useAndroidX=true
android.enableJetifier=true

Sehen Sie diese , diese Post zu verstehen , mehr über AndroidX


3

Aus dem offiziellen Dokument

Wenn dieses Flag auf true gesetzt ist, migriert das Android-Plugin vorhandene Bibliotheken von Drittanbietern automatisch, um AndroidX-Abhängigkeiten zu verwenden, indem die Binärdateien neu geschrieben werden. Das Flag ist standardmäßig falsch, wenn es nicht angegeben ist.

Es ist nützlich für die Kompatibilität. Wenn ein Verbraucher androidXund ein Produzent verwendet support. Zum Beispiel, wenn Ihr Projekt AndroidXeine Abhängigkeit verwenden möchte, die support libraryanstelle von AndroidX[Beispiel] verwendet wird.


0

Fügen Sie diese beiden Zeilen hinzu android.useAndroidX = true

android.enableJetifier = true

in buid.gradle Es hat bei mir funktioniert

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.