Cos'è Jetifier?


97

Cos'è Jetifier? Ad esempio, per creare un nuovo progetto utilizzando le dipendenze del pacchetto androidx, questo nuovo progetto deve aggiungere la seguente riga al file gradle.properties :

android.enableJetifier=true

Allora cosa significa "abilitare jetifier"?


29
IIRC, Jetifier è un bit non documentato della tecnologia Googly che dovrebbe convertire automaticamente le dipendenze transitive per utilizzare le librerie AndroidX. Ad esempio, supponi di avere implementation "com.commonsware.cwac:document:0.3.0"nel tuo file dependencies. Quella versione della libreria ha una dipendenza transitiva da com.android.support:support-annotations:27.0.2. Tuttavia, si desidera utilizzare androidx.annotation:annotationcome parte dell'utilizzo di altre dipendenze AndroidX. Jetifier si aggiornerà in qualche modo com.commonsware.cwac:documentda usare androidx.annotation:annotation.
CommonsWare

Risposte:


67

Google I / O di quest'anno (18), Google ha annunciato Jetpack che è un set / raccolta di librerie per semplificare la vita degli sviluppatori.

Jetpack include componenti dell'architettura Android introdotti in precedenza (ViewModel, Room, Paging, LiveData ecc.) Oltre a componenti dell'architettura appena introdotti come WorkManager, Navigation. Oltre a questo Jetpack ha anche altri set di librerie come AndroidX, AndroidKTX ecc.

AndroidX è una nuova struttura del pacchetto per le librerie di supporto Android come supporto, associazione dati, design ecc.

ad esempio, ora gli sviluppatori di reparti useranno androidx.databinding. invece di android.databinding. durante l'importazione di librerie nei nostri progetti

Ciò consente a Google di aggiungere SemVer o Semantic Versioning nei pacchetti della libreria. Per gli sviluppatori, questo significa che non dobbiamo utilizzare la stessa versione della libreria di supporto per tutte le librerie di supporto. Ogni supporto o per meglio dire libreria AndroidX manterrà il proprio controllo delle versioni.

Un altro vantaggio per gli sviluppatori è che non dobbiamo preoccuparci di mantenere la stessa versione per tutte le librerie di supporto nel nostro progetto.

A proposito di Jetifier, converte tutti i pacchetti di supporto della dipendenza in fase di compilazione. Come da documentazione ufficiale di Jetifier

Lo strumento Jetifier migra le librerie dipendenti dalla libreria di supporto per fare affidamento invece sui pacchetti AndroidX equivalenti. Lo strumento ti consente di migrare direttamente una singola libreria, invece di utilizzare il plug-in Gradle Android in bundle con Android Studio.

Per utilizzare AndroidX in un progetto, dobbiamo impostare targetSdkVersion per il nostro progetto su 28 e aggiungere le seguenti 2 righe nel file gradle.properties .

android.useAndroidX=true

android.enableJetifier=true

Spero che questo risponda alla tua domanda.

MODIFICARE

Questo collegamento ha la mappatura di tutti i componenti della libreria di supporto con la loro controparte AndroidX.

Si prega inoltre di fare riferimento a questo blog per una spiegazione dettagliata su AndroidX


34
Non stai davvero rispondendo alla domanda "Cos'è Jetifier?", Stai solo parlando di AndroidX e Jetpack.
David Miguel

2
@DavidMiguel Ho fornito la risposta alla domanda principale posta che cosa significa - "abilitare jetifier" ?. Anche se pensi che la mia risposta sia parziale, aggiornerò la mia risposta di conseguenza.
silwar

71

Supponendo che tu abbia familiarità con AndroidX. In caso contrario, vedere @ questo post .

Jetifierconvertirà automaticamente support librariestutte le tue dipendenze AndroidX, se non lo imposti, il truetuo progetto avrà sia il supporto ( deprecato dopo la versione 28.0.0 ) che il pacchetto AndroidX , che è ridondante.

Per esempio

Se hai PhotoView.javanella tua dipendenza. Che utilizza la libreria di supporto AppCompatImageView.

import android.support.v7.widget.AppCompatImageView;

Questa classe è stata spostata ora nel androidxpacchetto, quindi come PhotoViewotterrà androidx AppCompatImageView? E l'app funziona ancora nel dispositivo.

Chi ha fatto questa corsa?

Jetifier , che converte tutti i pacchetti di supporto della dipendenza in fase di compilazione.

Jetifier si convertirà android.support.v7.widget.AppCompatImageViewin androidx.appcompat.widget.AppCompatImageViewdurante la creazione del progetto.

Conclusione

L'abilitazione di Jetifier è importante quando esegui la migrazione dalle librerie di supporto ad AndroidX .

Vedi questo post per saperne di più su AndroidX.

Informazioni

Il codice potrebbe mostrare errori in fase di compilazione dopo aver abilitato Jetifier durante l'utilizzo delle classi di dipendenza. che si può rimuovere eliminando .idea, .gradlee progetto di re-sincronizzazione.

immagine2

immagine1


10
Puoi sbarazzarti degli errori in fase di compilazione eliminando .idea / libraries e risincronizzando Gradle.
Clo Knibbe

1
Penso che Jetifier funzioni in fase di compilazione e non in fase di esecuzione come menzionato qui. Puoi utilizzare android.enableJetifier = true su gradle o utilizzare lo strumento autonomo jetifier developer.android.com/studio/command-line/jetifier per migrare ad androidx. Entrambe queste opzioni sostituiscono i nomi dei pacchetti in fase di compilazione, quindi le vecchie librerie di supporto non fanno nemmeno parte del pacchetto.
Nishanth dal

6

Jetifier aiuta a migrare un progetto Android su AndroidX .

Jetifier aiuta a rendere la libreria di terze parti compatibile con il tuo progetto AndroidX.

Se non utilizzi alcuna libreria di terze parti nel tuo progetto Android, non è necessario utilizzare Jetifier perché Jetifier aiuta solo a "rendere la libreria di terze parti" compatibile con il tuo progetto nel caso in cui esegui la migrazione ad AndroidX. Quindi, per fare in modo che il tuo progetto utilizzi Jetifier, scrivi di seguito il codice in gradle.properties .

android.enableJetifier=true
android.useAndroidX=true

Se non stai migrando ad AndroidX e utilizzi il modo precedente di utilizzare le librerie Android (ad esempio: com.android.support ), allora queste librerie di terze parti non devono essere rese compatibili poiché queste librerie di terze parti sono già compatibili con il modo precedente di utilizzando le librerie Android. In tal caso, non è necessario utilizzare Jetifier, quindi ora non è necessario scrivere le righe fornite sopra o puoi semplicemente scrivere come di seguito per modificare i valori in futuro per passare ad androidx: -

android.enableJetifier=false
android.useAndroidX=false

4

Jetifier

Il jetifier è un pratico strumento che migra automaticamente il vostro dependenciesper AndroidXal momento della compilazione. Senza di essa, avresti bisogno di ogni dipendenza che utilizzi per avere una versione di AndroidX prima di poter migrare, e questo probabilmente non accadrà per un po 'di tempo.

C'è una limitazione importante da notare: il jetifier funziona solo su artefatti confezionati. Non funziona sul tuo codice sorgente, che dovresti aggiornare tu stesso

per abilitare AndroidX, devi aggiungere 2 flag al tuo gradle.propertiesfile. Il primo flag indica al plug-in Android di utilizzare i AndroidXpacchetti al posto di AppCompat, e il secondo flag abiliterà Jetifier:

android.useAndroidX=true
android.enableJetifier=true

Vedi questo , questo post per saperne di più su AndroidX


3

Da doc. Ufficiale

Quando questo flag è impostato su true, il plug-in Android migra automaticamente le librerie di terze parti esistenti per utilizzare le dipendenze di AndroidX riscrivendo i loro binari. Il flag è false per impostazione predefinita se non è specificato.

È utile per la compatibilità. Quando un consumatore utilizza androidXe un produttore utilizza support. Ad esempio, quando il tuo progetto su AndroidXdesidera utilizzare una dipendenza che utilizza support libraryinvece di AndroidX[Esempio]


0

Aggiungi queste due righe android.useAndroidX = true

android.enableJetifier = true

in buid.gradle Ha funzionato per me

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.