Che cos'è AndroidX?


255

Sto leggendo una biblioteca di stanze di Android. Vedo che hanno cambiato il pacchetto androidin androidx. Non l'ho capito. Qualcuno può spiegare, per favore?

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

Anche questo è disponibile anche con il androidpacchetto.

implementation "android.arch.persistence.room:runtime:$room_version"
annotationProcessor "android.arch.persistence.room:compiler:$room_version"
  • Cosa occorreva impacchettare nuove librerie di supporto androidxanziché android?
  • Usa i casi e influenza i fattori nei progetti esistenti.

4
Leggi developer.android.com/topic/libraries/support-library/… . androidx.*è la gerarchia dei pacchetti per le librerie di supporto. Arriveranno tutti nello stesso pacchetto del nostro periodo androidx(come i componenti dell'architettura, altre librerie di supporto).
ADM,

3
Cosa non hai capito esattamente? Perché hanno cambiato il pacchetto?
Rohit5k2,

@ADM perché sono passati al androidxpacchetto da CORE android.
Khemraj,

2
Hanno appena riprogettato la struttura del pacchetto per semplicità. Questo è stato annunciato anche in IO 2018 se vuoi dare un'occhiata. Thx
ADM

Risposte:


334

AndroidX - Libreria di estensioni Android

Dalla documentazione di AndroidX

Stiamo implementando una nuova struttura di pacchetti per chiarire quali pacchetti sono in bundle con il sistema operativo Android e quali sono impacchettati con l'APK della tua app. In futuro, la gerarchia di pacchetti Android. * Sarà riservata ai pacchetti Android forniti con il sistema operativo. Altri pacchetti verranno emessi nella nuova gerarchia di pacchetti androidx. * Come parte della libreria AndroidX.

Necessità di AndroidX

AndroidX è una libreria riprogettata per rendere più chiari i nomi dei pacchetti. Quindi d'ora in poi la gerarchia Android sarà solo per le classi predefinite Android, che viene fornito con il sistema operativo Android e altre librerie / dipendenze faranno parte di Androidx (ha più senso). Quindi d'ora in poi tutto il nuovo sviluppo verrà aggiornato in androidx.

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: materiale

Mappatura completa degli artefatti per i pacchetti AndroidX

AndroidX utilizza la versione semantica

In precedenza, support libraryutilizzava la versione SDK ma AndroidX utilizzava Semantic-version. Riprenderà la versione da 28.0.0 → 1.0.0.

Come migrare il progetto corrente

In Android Studio 3.2 (settembre 2018) è disponibile un'opzione diretta per migrare il progetto esistente AndroidX. Questo refactoring automaticamente tutti i pacchetti.

Prima di migrare, si consiglia vivamente di eseguire il backup del progetto.

Progetto esistente

  • Android Studio> Menu Refactor> Migra su AndroidX ...
  • Analizzerà e aprirà la finestra del rifrattore in basso. Accetta le modifiche da apportare.

Immagine

Nuovo progetto

Metti queste bandiere nel tuo gradle.properties

android.enableJetifier=true
android.useAndroidX=true

Controlla i mapping di @ Library per un pacchetto AndroidX uguale .

Controlla sulla pagina ufficiale di Migrate ad AndroidX

Che cos'è Jetifier?

Bug di migrazione

  • Se crei un'app e riscontri alcuni errori dopo la migrazione, devi correggere quegli errori minori. Non rimarrai bloccato lì, perché può essere facilmente risolto.
  • Le librerie di terze parti non vengono convertite in AndroidX nella directory, ma vengono convertite in fase di esecuzione da Jetifier , quindi non preoccuparti di errori di compilazione, l'app funzionerà perfettamente.

Il supporto 28.0.0 è l'ultima versione?

Da supporto Android Revisione 28.0.0

Questa sarà l' ultima versione della funzionalità con il pacchetto android.support e gli sviluppatori sono incoraggiati a migrare su AndroidX 1.0.0

Quindi vai con AndroidX, perché Android aggiornerà solo il pacchetto androidx da ora.

Ulteriori letture

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

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


2
@androidmalin Lieto di avere tue notizie - queste informazioni ti hanno aiutato :)
Khemraj

In quali circostanze puoi / dovresti impostare enableJetifier su false?
Segna l'

1
@Mark enableJetifier=falseè il valore predefinito. È falso quando non lo si imposta. Ciò significa che nessuna delle tue librerie verrà riscritta su AndroidX.
Khemraj,

4
La migrazione di Android Studio funziona male. ho dovuto riparare manualmente centinaia di file ... dedico più tempo a riparare il codice a causa delle modifiche degli strumenti di Google che a programmare effettivamente il codice che conta ... sigh
LearningPath

1
Ora è chiamato (3.3)Migrate to AndroidX
Dale

32

Sulla base della documentazione :

androidx è una nuova struttura di pacchetti per chiarire quali pacchetti sono in bundle con il sistema operativo Android e quali sono impacchettati con l'APK della tua app. In futuro, la gerarchia di pacchetti Android. * Sarà riservata ai pacchetti Android forniti con il sistema operativo; altri pacchetti saranno emessi nella nuova gerarchia di pacchetti androidx. *.

La struttura del pacchetto riprogettata è per incoraggiare librerie più piccole e più focalizzate. Potete trovare i dettagli riguardanti le mappature artefatto qui .

Esistono librerie di supporto (contenenti componenti e pacchetti per la compatibilità con le versioni precedenti) denominate "v7" quando il livello minimo di SDK supportato è 14, il nuovo nome chiarisce la comprensione della divisione tra API in bundle con la piattaforma e le librerie per sviluppatori di app che vengono utilizzate su diverse versioni di Android. Puoi fare riferimento all'annuncio ufficiale per maggiori dettagli.


22

AndroidX è il progetto open source che il team di Android utilizza per sviluppare, testare, pacchetto, versione e rilascio di librerie all'interno di Jetpack .

AndroidX rappresenta un notevole miglioramento rispetto alla libreria di supporto Android originale . Come la libreria di supporto, AndroidX viene fornito separatamente dal sistema operativo Android e offre compatibilità con le versioni precedenti di Android. AndroidX sostituisce completamente la libreria di supporto fornendo parità di funzionalità e nuove librerie.

AndroidX include le seguenti funzionalità:

  • Tutti i pacchetti in AndroidX vivono in uno spazio dei nomi coerente a partire dalla stringa androidx. I pacchetti della libreria di supporto sono stati mappati nei corrispondenti pacchetti androidx. *. Per una mappatura completa di tutte le vecchie classi e per creare manufatti con quelli nuovi, vedere la pagina Rifattorizzazione pacchetti.

  • A differenza della Libreria di supporto, i pacchetti AndroidX sono gestiti e aggiornati separatamente. I pacchetti androidx usano rigorosamente a Semantic Versioningpartire dalla versione 1.0.0. Puoi aggiornare le librerie AndroidX nel tuo progetto in modo indipendente.

  • Tutto lo sviluppo di nuove librerie di supporto avverrà nella libreria AndroidX. Ciò include la manutenzione degli artefatti della libreria di supporto originale e l'introduzione di nuovi componenti Jetpack.

Usando AndroidX

Consulta Migrazione ad AndroidX per informazioni su come migrare un progetto esistente.

Se si desidera utilizzare AndroidX in un nuovo progetto, è necessario impostare l'SDK di compilazione su Android 9.0 (livello API 28) o superiore e impostare entrambi i seguenti flag del plug-in Android Gradle su true nel gradle.propertiesfile.

  • android.useAndroidX: Se impostato su true, il plug-in Android utilizza la libreria AndroidX appropriata anziché una libreria di supporto. Il flag è falso per impostazione predefinita se non è specificato.

  • android.enableJetifier: Se impostato su true, il plug-in Android migra automaticamente le librerie di terze parti esistenti per utilizzare AndroidX riscrivendo i loro binari. Il flag è falso per impostazione predefinita se non è specificato.

Per le mappature degli artefatti vedi questo


14

Questo articolo Android Jetpack: cosa significano gli annunci recenti per la libreria di supporto di Android? lo spiega bene

Oggi, molti considerano la libreria di supporto una parte essenziale dello sviluppo di app Android, al punto in cui viene utilizzata dal 99 percento delle app nel Google Play Store. Tuttavia, man mano che la libreria di supporto è cresciuta, si sono insinuate incoerenze attorno alla convenzione di denominazione della biblioteca.

Inizialmente, il nome di ciascun pacchetto indicava il livello API minimo supportato da quel pacchetto, ad esempio support-v4. Tuttavia, la versione 26.0.0della libreria di supporto ha aumentato l'API minima a 14, quindi oggi molti dei nomi dei pacchetti non hanno nulla a che fare con il livello minimo di API supportato. Quando support-v4 e i pacchetti support-v7 hanno entrambi un'API minima di 14, è facile capire perché le persone si confondono!

Per chiarire questa confusione, Google sta attualmente eseguendo il refactoring della libreria di supporto in una nuova struttura di pacchetti della libreria di estensioni Android (AndroidX). AndroidX includerà nomi di pacchetti semplificati, nonché ID gruppo Maven e artefatto che riflettono meglio il contenuto di ciascun pacchetto e i livelli API supportati.

Con l'attuale convenzione di denominazione, inoltre, non è chiaro quali pacchetti sono in bundle con il sistema operativo Android e quali sono confezionati con l'APK dell'applicazione (Android Package Kit) . Per chiarire questa confusione, tutte le librerie disaggregate verranno spostate nello spazio dei nomi androidx. * Di AndroidX, mentre la gerarchia dei pacchetti android. * Sarà riservata ai pacchetti forniti con il sistema operativo Android .


12

Solo alcune aggiunte da parte mia a tutte le risposte disponibili

Necessità di AndroidX

  1. Come detto nella sorprendente risposta di @KhemRaj,

Con l'attuale convenzione di denominazione, non è chiaro quali pacchetti siano associati al sistema operativo Android e quali siano impacchettati con l'APK dell'applicazione ( Android Package Kit ). Per chiarire questa confusione, tutte le librerie disaggregate verranno spostate nello spazio dei nomi androidx. * Di AndroidX, mentre la gerarchia dei pacchetti android. * Sarà riservata ai pacchetti forniti con il sistema operativo Android.

  1. Diverso da questo,

    Inizialmente, il nome di ciascun pacchetto indicava il livello API minimo supportato da quel pacchetto, ad esempio support-v4 . Tuttavia, la versione 26.0.0 della libreria di supporto ha aumentato l' API minima a 14 , quindi oggi molti dei nomi dei pacchetti non hanno nulla a che fare con il livello minimo di API supportato. Quando support-v4 e i pacchetti support-v7 hanno entrambi un'API minima di 14, è facile capire perché le persone si confondono !. Quindi ora con AndroidX, non vi è alcuna dipendenza dal livello API.

Un altro cambiamento importante è che gli artefatti AndroidX verranno aggiornati in modo indipendente, quindi sarai in grado di aggiornare singole librerie AndroidX nel tuo progetto, anziché dover cambiare ogni dipendenza in una volta. Quei frustranti messaggi " Tutte le librerie com.android.support devono usare esattamente le stesse specifiche di versione " dovrebbero diventare un ricordo del passato!


7

Sono venuto a conoscenza di AndroidX da questo video di Android Dev Summit . Il riassunto è -

  1. Niente più libreria di supporto: la libreria di supporto Android non verrà mai gestita da Google nello spazio dei nomi della libreria di supporto. Quindi, se vuoi trovare correzioni di un bug nella libreria di supporto, devi migrare il tuo progetto in AndroidX
  2. Migliore gestione dei pacchetti: per un versioning standardizzato e indipendente, poiché il precedente versioning della libreria di supporto era troppo confuso. Ti rilascerà la sofferenza del messaggio "Tutte le librerie com.android.support devono utilizzare esattamente la stessa specifica di versione" .
  3. Altre librerie God sono migrate su AndroidX : Google Play Services, Firebase, Mockito 2, ecc. Sono migrati su AndroidX.
  4. Le nuove librerie saranno pubblicate usando l'artefatto AndroidX: tutte le librerie saranno nello spazio dei nomi AndroidX come Android Jetpack

4

È uguale alle versioni di supporto di AppCompat ma ha meno confusione delle versioni v4 e v7, quindi è di grande aiuto dall'uso dei diversi componenti degli elementi XML Android.



3

AndroidX è il progetto open source che il team di Android utilizza per sviluppare, testare, pacchetto, versione e rilascio di librerie all'interno di Jetpack.

Dopo ore di difficoltà, l'ho risolto includendo quanto segue in app / build.gradle:

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

Metti queste bandiere nelle tue proprietà 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'

Durante la migrazione su Android Studio, il file app / gradle viene automaticamente aggiornato con le implementazioni della libreria di correzione dalla libreria standard

Fare riferimento a: https://developer.android.com/jetpack/androidx/migrate


0

Android offre un paio di set di librerie diverse. Uno si chiama Android Support Library e l'altro si chiama AndroidX. La selezione di "Usa manufatti Android. *" Indica che vogliamo usare AndroidX.

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.