L'upgrade delle dipendenze ti consente di accedere alle funzionalità, alle correzioni di bug e ai miglioramenti più recenti. Per eseguire l'upgrade delle dipendenze, devi comprendere come Gradle risolve le versioni richieste, i rischi connessi e i passaggi che puoi svolgere per mitigarli.
Valuta la tua strategia di upgrade
Il passaggio più importante di qualsiasi upgrade è l'analisi dei rischi. Determina quanto ti senti a tuo agio con ogni dipendenza di cui esegui l'upgrade. Esistono molti aspetti da considerare per definire la strategia di upgrade, tra cui:
Creare una raccolta |
Stai creando un'applicazione che gli utenti scaricano ed eseguono su un dispositivo? Oppure stai creando una libreria per aiutare altri sviluppatori a creare le loro applicazioni? Se stai creando un'applicazione, il tuo obiettivo dovrebbe essere mantenerla aggiornata e stabile. Se stai creando una libreria, devi concentrarti sulle applicazioni di altri sviluppatori. Gli upgrade influiscono sui tuoi consumatori. Se esegui l'upgrade di una delle dipendenze, questa versione diventa una candidata per la risoluzione delle dipendenze di Gradle, con il rischio di interrompere l'utilizzo della dipendenza da parte dell'applicazione. Innanzitutto, riduci al minimo le dipendenze della libreria, se possibile. Meno dipendenze hai, minore sarà l'impatto sulla risoluzione delle dipendenze del tuo consumatore. Assicurati di seguire il versionamento semantico per indicare i tipi di modifiche che stai apportando. Ad esempio, AndroidX segue il versionamento semantico e aggiunge uno schema di versionamento pre-release. Cerca di evitare gli upgrade alla versione Valuta la possibilità di creare una release candidate (RC) della tua libreria da testare in anteprima dagli utenti. Consulta le linee guida sulla compatibilità con le versioni precedenti per gli autori delle librerie per informazioni dettagliate su come mantenere compatibile l'interfaccia a bit dell'applicazione (ABI) della libreria. Utilizza test di integrazione e strumenti come lo strumento di convalida della compatibilità binaria per assicurarti che le modifiche all'ABI corrispondano alla modifica della versione prevista. Se rilasci correzioni in una versione Se l'upgrade della libreria richiede modifiche che potrebbero essere particolarmente gravose per i tuoi consumatori, valuta la possibilità di rilasciarle come nuovo elemento in modo che la versione precedente e quella nuova possano coesistere e consentire un implementazione più graduale. Nota: se un upgrade di una delle tue dipendenze contiene una modifica importante all'API, ti consigliamo di eseguirlo in una release |
Ciclo di rilascio |
Con quale frequenza rilasci l'applicazione o la libreria? Cicli di sviluppo e rilascio più brevi
Cicli di sviluppo e rilascio più lunghi
|
Non perderti le ultime funzionalità |
Preferisci utilizzare le API e le funzionalità più recenti disponibili o eseguire l'upgrade solo quando hai bisogno di una funzionalità o di una correzione di bug? Valuta i compromessi degli upgrade frequenti. Gli upgrade futuri sono più semplici (meno modifiche da integrare), ma corri più spesso il rischio di upgrade. Testare gli upgrade alle versioni di pre-release (alpha, beta, release candidate) delle librerie può contribuire alla disponibilità quando sono disponibili release stabili. |
Nuova dipendenza |
Se aggiungi una nuova dipendenza, valuta la possibilità di sottoporre la libreria a un'attenta procedura di revisione che esamini tutti i criteri di rischio per assicurarti che siano stati valutati correttamente. Non consentire l'aggiunta di nuove dipendenze senza revisione. |
Team dedicato |
Hai un team di build dedicato? I tuoi tecnici software gestiscono la build? Un team dedicato può spesso dedicare più tempo all'analisi dei rischi di upgrade e al test delle nuove versioni per assicurarsi che la compilazione funzioni correttamente prima che gli ingegneri le utilizzino. |
Tipo di upgrade |
Alcuni upgrade sono più importanti di altri. Pensa a quali sono le più importanti per te. Gli upgrade degli strumenti di compilazione, come Gradle e i plug-in Gradle, in genere hanno un impatto minore sugli utenti e gran parte del rischio è interno alla compilazione. La compilazione stessa contribuisce a convalidare queste modifiche. Gli upgrade delle librerie e degli SDK sono più difficili da convalidare e presentano un rischio maggiore per gli utenti. Android Gradle Plugin (AGP): gli strumenti utilizzati per compilare l'applicazione o la libreria Android. Si tratta dell'upgrade più importante che puoi eseguire, in quanto spesso include o abilita miglioramenti delle prestazioni, correzioni di bug, nuove regole lint e il supporto per le nuove versioni della piattaforma Android. Gradle: spesso è necessario eseguire l'upgrade di Gradle quando esegui l'upgrade di AGP o di un altro plug-in Gradle. Altri plug-in Gradle: a volte l'API dei plug-in di Gradle cambia. Quando esegui l'upgrade di Gradle, controlla se sono disponibili upgrade per i plug-in che utilizzi. Kotlin e Java: alcune librerie e plug-in richiedono versioni minime di Kotlin o Java oppure vuoi sfruttare nuove funzionalità del linguaggio, API o miglioramenti delle prestazioni. Piattaforma Android: il Play Store richiede aggiornamenti regolari dell'SDK Android. Ti consigliamo di testare le nuove versioni dell'SDK Android il prima possibile. Alcuni upgrade dell'SDK richiedono modifiche all'applicazione, ad esempio nuove autorizzazioni o l'utilizzo di nuove API. Librerie: vuoi dare la priorità alle librerie in base alla loro vicinanza all'architettura complessiva?
Android Studio: mantieni aggiornato Android Studio per accedere alle funzionalità e alle correzioni di bug più recenti della piattaforma IntelliJ IDEA di base e agli strumenti per lavorare con gli SDK Android più recenti. |
Strumenti disponibili |
Esistono molti strumenti e plug-in disponibili per aiutarti con gli upgrade. Strumenti come Dependabot e Renovate eseguono l'upgrade automatico delle versioni delle librerie nella build, ma assicurati di analizzare i risultati per verificare la presenza di rischi. |
Strategie per tipi specifici di upgrade
L'upgrade di alcuni tipi di dipendenze potrebbe avere un effetto a cascata, richiedendo l'upgrade di altri tipi di dipendenze. Discutiamo le relazioni tra gli elementi di compilazione in Interdipendenze tra strumenti e librerie.
Quando esegui l'upgrade di ogni tipo di componente, valuta l'impatto dell'upgrade su altri componenti della build.
Android Gradle Plugin (AGP) |
Android Studio include un assistente per l'upgrade di APG che può aiutarti a svolgere queste attività. Se utilizzi l'assistente o esegui l'upgrade manualmente, tieni presente quanto segue: Consulta le note di rilascio dell'AGP. Esegui l'upgrade di Gradle almeno alla versione indicata. Esegui l'upgrade di Android Studio a una versione che supporti la versione di AGP scelta. Utilizza le versioni di Android Studio e AGP che supportano l'SDK Android che vuoi utilizzare. Verifica la compatibilità con SDK Build Tools, NDK e JDK. Se sviluppi un plug-in Gradle (per uso interno o pubblico) che estende o utilizza i dati di AGP, controlla se devi eseguire l'upgrade del plug-in. A volte AGP ritira e successivamente rimuove le API, causando incompatibilità con i plug-in precedenti. |
Compilatore, linguaggio e runtime Kotlin |
Consulta le note di rilascio di Kotlin per conoscere i problemi noti e le incompatibilità. Se utilizzi Jetpack Compose:
Se utilizzi Kotlin Symbol Processing (KSP), consulta la guida rapida di KSP per la configurazione e le release di KSP per le versioni disponibili. Tieni presente che devi utilizzare una versione di KSP corrispondente alla versione di Kotlin. Ad esempio, se utilizzi Kotlin 2.0.21, puoi utilizzare qualsiasi versione del plug-in KSP che inizi con 2.0.21, ad esempio 2.0.21-1.0.25. In genere non è necessario eseguire l'upgrade dei processori KSP (ad esempio il compilatore Room, che viene visualizzato come dipendenza Esegui l'upgrade di tutti gli altri plug-in del compilatore Kotlin che utilizzi. L'API del plug-in del compilatore Kotlin cambia spesso tra una release e l'altra e i plug-in devono utilizzare un'API compatibile. Se il plug-in è elencato in Plug-in del compilatore, devi utilizzare la stessa versione del compilatore Kotlin. Per qualsiasi altro plug-in di compilazione, controlla la documentazione per la mappatura appropriata. Tieni presente che i plug-in del compilatore che non vengono gestiti insieme al compilatore Kotlin stesso spesso presentano ritardi di rilascio in attesa che l'API del plug-in del compilatore si stabilizzi. Prima di eseguire l'upgrade di Kotlin, verifica che per tutti i plug-in del compilatore che utilizzi siano disponibili upgrade corrispondenti. Infine, in alcuni casi, il linguaggio Kotlin cambia e devi aggiornare il codice. Questo accade più spesso se stai provando funzionalità sperimentali. Se il codice non viene compilato correttamente dopo l'upgrade del compilatore Kotlin, controlla se sono presenti modifiche al linguaggio o interruzioni della libreria di runtime nelle note di rilascio di Kotlin. |
Plug-in del compilatore Kotlin |
Se devi eseguire l'upgrade di un plug-in del compilatore Kotlin, esegui l'upgrade alla versione corrispondente di Kotlin in uso. La maggior parte dei plug-in del compilatore Kotlin utilizza la stessa versione del compilatore Kotlin o inizia con la versione richiesta del compilatore Kotlin. Ad esempio, se la versione del plug-in è 2.0.21-1.0.25, devi utilizzare la versione 2.0.21 del compilatore Kotlin. A volte la modifica della versione del compilatore Kotlin richiede altre modifiche. |
Biblioteche |
Le librerie sono le dipendenze di cui viene eseguito più spesso l'upgrade nella build. Vedrai gli upgrade disponibili nell'editor di Android Studio o se utilizzi alcuni strumenti e plug-in per le dipendenze. Alcune librerie specificano un valore minimo di Alcune librerie specificano anche una versione minima di Kotlin da utilizzare. Aggiorna la versione di Kotlin nei file di compilazione in modo che sia almeno la versione specificata. |
Gradle |
A volte le nuove versioni di Gradle ritirano le API esistenti, rimuovendole in una release futura. Se sviluppi un plug-in Gradle, esegui l'upgrade il prima possibile, soprattutto se è pubblico. Alcuni upgrade di Gradle richiedono la ricerca di nuove versioni dei plug-in che utilizzi. Tieni presente che lo sviluppo di questi plug-in può subire ritardi durante l'upgrade per adeguarli alle API dei plug-in Gradle più recenti. Per eseguire l'upgrade di Gradle:
|
Plug-in Gradle |
I plug-in Gradle sottoposti ad upgrade a volte utilizzano API Gradle nuove o modificate, che a loro volta richiedono un upgrade di Gradle o eventualmente modifiche alla loro configurazione nei file di compilazione. In entrambi i casi, vedrai avvisi o errori di compilazione che indicano l'incompatibilità. Ogni volta che esegui l'upgrade dei plug-in, esegui l'upgrade di Gradle. |
SDK Android |
Android Studio include un Assistente per l'upgrade dell'SDK Android che può aiutarti a svolgere queste attività. Se utilizzi l'assistente o esegui l'upgrade manualmente, tieni presente quanto segue: Ogni release dell'SDK Android contiene nuove funzionalità e API, correzioni di bug e modifiche al comportamento. Il Play Store richiede l'aggiornamento di Prima di eseguire l'upgrade dell'SDK Android, leggi attentamente le note di rilascio. Presta particolare attenzione alla sezione relativa alle modifiche del comportamento, che include:
La sezione relativa alle modifiche del comportamento può essere piuttosto lunga, ma presta molta attenzione perché spesso contiene modifiche fondamentali che devi apportare alla tua applicazione. Devi eseguire l'upgrade di Per sfruttare le nuove funzionalità dell'SDK durante lo sviluppo e garantire la compatibilità durante la compilazione, esegui l'upgrade del plug-in Android Gradle (AGP) e di Android Studio. Sono inclusi strumenti nuovi e migliorati per i nuovi SDK. Consulta la sezione Versioni minime degli strumenti per il livello API Android. Quando esegui l'upgrade dell'SDK Android, esegui l'upgrade di eventuali librerie AndroidX che utilizzi. AndroidX utilizza spesso API nuove e aggiornate per una migliore compatibilità e prestazioni nelle varie versioni dell'SDK Android. |
Android Studio |
In genere, puoi eseguire l'upgrade di Android Studio in qualsiasi momento. Potresti visualizzare messaggi che ti chiedono di eseguire l'upgrade di AGP o di eseguire l'upgrade dell'SDK Android. Questi upgrade sono vivamente consigliati, ma non obbligatori. Se in un secondo momento vuoi utilizzare Android Studio per eseguire l'upgrade di AGP o dell'SDK Android, puoi trovare queste opzioni nel menu Strumenti: |
Java |
Se nella tua applicazione Android è presente codice sorgente Java, ti consigliamo di utilizzare le API Java più recenti. Ogni versione dell'SDK Android supporta un sottoinsieme di API Java e funzionalità del linguaggio. AGP offre compatibilità con le versioni precedenti dell'SDK Android utilizzando un processo chiamato desugaring. Le note di rilascio dell'SDK Android specificano il livello Java supportato e i potenziali problemi. Alcuni di questi problemi potrebbero interessare anche il codice sorgente di Kotlin, perché Kotlin ha accesso alle stesse API Java. Assicurati di prestare molta attenzione alle sezioni dell'API JDK che appaiono nella sezione relativa alle modifiche del comportamento delle note di rilascio, anche se non disponi del codice sorgente Java. L'utilizzo di JDK è specificato in più punti negli script di compilazione. Per ulteriori informazioni, consulta la sezione Versioni Java nella compilazione Android. |
Analisi dell'upgrade
L'upgrade di una dipendenza può comportare rischi sotto forma di modifiche all'API e al comportamento, nuovi requisiti di utilizzo, nuovi problemi di sicurezza o persino modifiche alla licenza. Ad esempio, devi:
- Modificare il codice per le modifiche all'API?
- Vuoi aggiungere nuovi controlli delle autorizzazioni?
- Creare test aggiuntivi o modificare quelli esistenti per le modifiche del comportamento?
Tieni presente che la dipendenza di cui hai eseguito l'upgrade ha aggiornato le versioni delle sue dipendenze. Ciò può rapidamente generare un enorme insieme di modifiche.
Se utilizzi uno strumento come Renovate o Dependabot per automatizzare gli upgrade, tieni presente che non eseguono alcuna analisi per te; eseguono l'upgrade alle versioni più recenti delle librerie. Non assumere che tutto funzioni correttamente dopo questi tipi di upgrade automatici.
La chiave per gli upgrade di successo è l'analisi dell'upgrade:
- Determina le differenze nelle dipendenze prima e dopo gli upgrade.
- Esamina ogni modifica e determina i rischi.
- Riduci i rischi o accetta o rifiuta le modifiche.
Determinare le differenze nelle dipendenze
Il primo passaggio dell'analisi di upgrade consiste nel determinare in che modo cambiano le dipendenze. Sfrutta il controllo della versione (VCS, come Git) e il plug-in Dependency Guard per visualizzare rapidamente le modifiche. Il tuo obiettivo è creare un'istantanea prima e dopo e confrontarle.
Configurare e creare la prima linea di base
Prima di iniziare l'upgrade, assicurati che il progetto venga compilato correttamente.
Idealmente, risolvi il maggior numero possibile di avvisi o crea linee di base per monitorare gli avvisi che hai già visualizzato.
- Lint: esamina gli avvisi lint esistenti e crea un base di riferimento per lint Android.
- Compilatore Kotlin:
- Attiva
-Werror
per trattare tutti gli avvisi come errori. Consulta la sezione Come definire le opzioni. - Valuta la possibilità di utilizzare plug-in come Kotlin Warning Baseline o Kotlin Warnings Baseline Generator.
- Attiva
- Altri strumenti: se utilizzi altri strumenti di analisi statica (come Detekt) che supportano il monitoraggio del baseline, configura i relativi baseline.
Queste linee di base degli avvisi ti consentono di vedere più facilmente i nuovi avvisi introdotti durante l'upgrade delle dipendenze.
Crea una linea di base delle dipendenze configurando ed eseguendo Dependency Guard. Nel catalogo delle versioni gradle/libs.versions.toml, aggiungi:
[versions]
dependencyGuard = "0.5.0"
[plugins]
dependency-guard = { id = "com.dropbox.dependency-guard", version.ref = "dependencyGuard" }
Aggiungi quanto segue al file di build dell'app:
Kotlin
plugins { alias(libs.plugins.dependency.guard) } dependencyGuard { configuration("releaseRuntimeClasspath") }
Groovy
plugins { alias(libs.plugins.dependency.guard) } dependencyGuard { configuration('releaseRuntimeClasspath') }
La configurazione releaseRuntimeClasspath
è un target probabile, ma se vuoi utilizzare una configurazione diversa, esegui ./gradlew dependencyGuard
senza una configurazione elencata nel file di build per visualizzare tutte le configurazioni disponibili.
Dopo la configurazione, esegui ./gradlew dependencyGuard
per generare un report in
app/dependencies/releaseRuntimeClasspath.txt
. Questo è il report di riferimento.
Esegui il commit nel tuo sistema di controllo della versione (VCS) per salvarlo.
Tieni presente che Dependency Guard acquisisce solo l'elenco delle dipendenze della biblioteca. Esistono altre dipendenze nei file di compilazione, ad esempio le versioni Android SDK e JDK. Se esegui il commit nel tuo VCS prima che le dipendenze cambino, la differenza del VCS evidenzia anche queste modifiche.
Esegui l'upgrade e confronta i dati con la base di riferimento
Dopo aver creato una base di riferimento, esegui l'upgrade delle dipendenze e di altre modifiche alla compilazione che volevi testare. A questo punto, non eseguire l'upgrade del codice sorgente o delle risorse.
Esegui ./gradlew lint
per visualizzare i nuovi avvisi o errori di lint. Risolvi eventuali problemi importanti, quindi aggiorna la linea di base degli avvisi eseguendo ./gradlew lint
-Dlint.baselines.continue=true
. Se hai utilizzato altri strumenti per acquisire le linee di base degli avvisi, come Kotlin Warning Baseline o Kotlin Warnings
Baseline Generator, risolvi i nuovi avvisi e aggiorna anche le relative linee di base.
Esegui ./gradlew dependencyGuard
per aggiornare il report di riferimento. Quindi, esegui la differenza VCS per visualizzare le modifiche non relative alla libreria. È probabile che includa molti più upgrade della biblioteca di quanto pensi.
Analizza i rischi
Una volta che sai cosa è cambiato, valuta i possibili rischi di ogni biblioteca di cui è stato eseguito l'upgrade. In questo modo puoi concentrare i test o approfondire le modifiche. Definisci un insieme di rischi da analizzare per il tuo progetto per garantire un'analisi coerente.
Alcune considerazioni:
Aggiornamenti principali delle versioni |
Il numero della versione principale è cambiato? Quando vedi questo messaggio, presta particolare attenzione alle librerie interessate quando esamini una delle seguenti considerazioni. Se il codice utilizza API sperimentali (che spesso richiedono l'attivazione tramite annotazioni o specifiche del file di compilazione), anche le modifiche alle versioni minori o alle patch, ad esempio l'upgrade da 1.2.3 a 1.3.1 o da 1.2.3 a 1.2.5, potrebbero comportare rischi aggiuntivi. |
API non stabile |
Alcune release della libreria potrebbero includere API non stabili. Di solito si tratta di API in fase di sviluppo o che dipendono da un'altra API instabile. Sebbene in genere siano limitate alle anteprime, come le release alpha, dev o sperimentali, alcune librerie includono API contrassegnate come sperimentali o instabili. Se possibile, evita queste API. Se devi utilizzarli, assicurati di registrare il tuo utilizzo e di verificare la presenza di modifiche o rimozioni nelle release successive. |
Comportamento dinamico |
Alcune librerie si comportano in modo diverso in base a fattori esterni. Ad esempio, una libreria che comunica con un server dipende dalle modifiche apportate a quel server.
|
Unione di manifest |
Le librerie pubblicate come archivi Android (AAR) possono contenere risorse e manifest che vengono uniti alla tua applicazione. Questi possono aggiungere nuove autorizzazioni e componenti Android, come attività o broadcast receiver, che vengono eseguiti indirettamente. |
Aggiornamenti di runtime |
Alcune librerie utilizzano funzionalità che possono essere aggiornate al di fuori del controllo dell'applicazione. Una libreria potrebbe utilizzare Play Services, di cui viene eseguito l'upgrade indipendentemente dall'SDK Android. Altre librerie possono essere associate a servizi in applicazioni esterne aggiornate in modo indipendente (spesso utilizzando AIDL). |
Quante versioni stai saltando? |
Più aspetti per eseguire l'upgrade di una libreria, maggiori sono i rischi potenziali. Se noti una versione che cambia in modo significativo, ad esempio da 1.2.3 a 1.34.5, presta particolare attenzione a questa libreria. |
Guide alla migrazione |
Controlla se la libreria dispone di una guida alla migrazione. In questo modo, puoi ridurre notevolmente l'analisi e la pianificazione della mitigazione dei rischi. Tieni presente che la presenza di una guida del genere è un buon indicatore del fatto che lo sviluppatore si sia concentrato sulla compatibilità e abbia preso in considerazione la mitigazione dell'upgrade. |
Note di rilascio |
Consulta le note di rilascio (se fornite) per ogni libreria modificata. Cerca indicazioni di modifiche che non sono più supportate o di nuovi requisiti, ad esempio autorizzazioni aggiunte. |
Documenti README |
Alcuni file README di una libreria segnalano potenziali rischi, soprattutto se la libreria non fornisce note di rilascio. Cerca i _problemi noti_, in particolare quelli relativi alla sicurezza. |
Controllare le vulnerabilità note |
Play SDK Index monitora le vulnerabilità di molti SDK di uso comune. Play Console segnala se utilizzi uno degli SDK elencati con vulnerabilità note. Quando modifichi i file di compilazione in Android Studio, l'IDE controlla l'indice SDK e segnala l'utilizzo di versioni delle librerie vulnerabili. Il National Institute of Standards and Technology (NIST) gestisce un ampio National Vulnerability Database (NVD). Il plug-in Gradle Dependency Check controlla le dipendenze utilizzate rispetto al NVD. Per utilizzare Dependency Check, richiedi una chiave API NVD, configura il plug-in Gradle ed esegui |
Conflitti di versione |
Le versioni vengono risolte come previsto? Cerca conflitti, in particolare differenze sostanziali tra le versioni. Per informazioni dettagliate su come cercare i conflitti, consulta la sezione Risoluzione delle dipendenze di Gradle. In particolare, cerca Se possibile, collabora con gli autori di una dipendenza per risolvere i conflitti. Se la tua azienda lo consente, apporta modifiche alla libreria (upstreaming) per contribuire a migliorarne la compatibilità. |
Controllare le licenze |
Cerca le modifiche alle licenze quando esegui l'upgrade di una raccolta. La libreria stessa potrebbe passare a una licenza non più compatibile con la tua applicazione o libreria. Le nuove dipendenze transitive potrebbero anche introdurre licenze incompatibili. Per informazioni dettagliate su come controllare l'attuale insieme di licenze nelle dipendenze, consulta Convalidare le licenze. |
Rischi relativi a |
Per le librerie con repository pubblici:
|
Open source e software proprietario |
Se una libreria è open source, sarà più facile eseguire il debug dei problemi rispetto a una closed source, indipendentemente dal fatto che i problemi si trovino nel codice o nel codice della libreria. Riduci al minimo le dipendenze closed source e applica un'ulteriore verifica durante la valutazione. Esistono alternative valide che si adattano al tuo caso d'uso? Quali accordi sul livello del servizio sono disponibili per le librerie closed source? Se scegli di utilizzare una dipendenza closed source, preparati a scrivere casi di test aggiuntivi per contribuire a limitare i rischi. |
Esegui una build
Crea il progetto. Cerca nuovi errori o avvisi. Se riesci a identificare la libreria che li causa, prendi nota del rischio per l'upgrade della libreria.
Se vengono visualizzati nuovi avvisi di deprezzamento, aggiungili come rischi specifici per la biblioteca che li genera. Questi possono essere rimossi nelle release successive. Se vuoi continuare a utilizzare la libreria, dedica del tempo alla conversione dall'utilizzo delle API obsolete alle relative sostituzioni oppure prendi nota delle ritirate per tenere d'occhio queste funzioni e se vengono rimosse in un secondo momento.
Utilizzare lint per rilevare i problemi relativi all'API
Android lint può rilevare molti problemi nella tua applicazione, inclusi alcuni
che sono il risultato della modifica delle versioni delle dipendenze o dell'SDK Android. Ad esempio, se esegui l'upgrade di compileSdk
e utilizzi le sue nuove API, lint segnala quelle non disponibili nelle versioni precedenti dell'SDK.
Lint viene eseguito nell'editor di Android Studio e segnala i problemi man mano che apporti le modifiche.
Tuttavia, in genere non viene eseguito nell'ambito della compilazione in Studio o quando esegui una compilazione da riga di comando, a meno che non utilizzi i target build
o lint
.
Se utilizzi l'integrazione continua (CI), esegui gradlew
build
o gradlew lint
durante le build CI (o almeno durante le build notturne) per rilevare questi tipi di errori.
Se non utilizzi l'integrazione continua, assicurati di eseguire gradlew lint
almeno occasionalmente.
Presta particolare attenzione agli errori e agli avvisi di lint. Alcune librerie vengono fornite con i propri controlli lint, contribuendo a garantire l'utilizzo corretto della loro API. Alcune nuove versioni di una libreria includono nuovi avvisi e errori di lint, che generano nuovi report durante la compilazione.
Riduci i rischi
Dopo aver determinato i rischi dell'upgrade, decidi come mitigarli:
- Accetta alcuni rischi così come sono. Alcuni rischi sono sufficientemente bassi da essere accettabili, soprattutto quando il tempo e le risorse per l'upgrade sono limitati.
- Rifiutare alcuni rischi del tutto. Alcuni upgrade potrebbero sembrare troppo rischiosi, soprattutto se al momento hai poco tempo o risorse per mitigarli. Se devi eseguire la triage, concentrati sugli upgrade necessari per i bug che hai riscontrato o per le nuove funzionalità di cui hai bisogno.
- Riduci i rischi rimanenti
- Valuta la possibilità di raggruppare gli upgrade in insiemi di modifiche più piccoli e indipendenti. In questo modo si riduce il rischio complessivo e si consente il rollback parziale.
- Esamina le modifiche in dettaglio.
- Esegui il test dell'app per verificare la presenza di modifiche inaspettate. Aggiungi nuovi test ove necessario per aumentare la sicurezza dell'upgrade.
- Quando viene trovato qualcosa di discutibile, controlla la fonte (se disponibile).
- Apporta le modifiche necessarie nel codice sorgente o nella compilazione.
Documenta le tue decisioni. Se i rischi di un upgrade diventano problemi durante l'esecuzione della tua applicazione, la documentazione dell'analisi dei rischi può ridurre l'analisi degli errori necessaria.
Convalidare le licenze
Gli sviluppatori delle librerie rilasciano le licenze per il tuo utilizzo. Devi rispettare i termini della licenza, altrimenti non potrai utilizzare la libreria. Alcune licenze sono molto permissive, spesso richiedono solo l'attribuzione della libreria e la visualizzazione del testo della licenza agli utenti finali. Alcune sono considerate virali. Se utilizzi queste librerie, devi applicare la stessa licenza alla tua applicazione o libreria.
Le licenze possono cambiare con ogni release. Ogni volta che esegui l'upgrade, devi verificare che le dipendenze che utilizzi siano concesse in licenza in modo compatibile con la tua applicazione o libreria.
Se una licenza non è compatibile (o non è più compatibile), non puoi utilizzare quella versione della libreria. Puoi:
- Contatta il proprietario della raccolta e richiedi il proseguimento della licenza esistente o la licenza doppia per continuare a consentire la vecchia licenza.
- Collabora con il tuo team legale per determinare se puoi modificare la licenza in modo che sia compatibile.
- Trova un'altra libreria con una licenza compatibile e modifica l'applicazione come necessario.
- Esegui il fork dell'ultima versione compatibile della libreria (se la licenza consente derivati e le modifiche non sono retroattive) e apporta le tue modifiche.