Android 8.0 (livello API 26) introduce modifiche del comportamento, nonché nuove funzionalità e API che puoi sfruttare nelle tue app. Questo documento offre una panoramica dei passaggi per eseguire la migrazione delle tue app ad Android 8.0 in due fasi principali:
- Assicurare la compatibilità con Android 8.0
Verifica che la tua app sia completamente funzionale nella nuova versione della piattaforma. In questa fase, non utilizzi nuove API o modifichi il valore
targetSdkVersion
dell'app, ma potrebbero essere necessarie modifiche di minore entità. - Aggiornare la versione di destinazione e utilizzare le funzionalità di Android 8.0
Quando è tutto pronto per sfruttare le nuove funzionalità della piattaforma, aggiorna
targetSdkVersion
a 26, verifica che l'app continui a funzionare come previsto e inizia a utilizzare le nuove API.
Garantire la compatibilità con Android 8.0
L'obiettivo è assicurarti che la tua app esistente funzioni così com'è su Android 8.0 (livello API 26). Poiché alcune modifiche alla piattaforma potrebbero influire sul comportamento dell'app,
potrebbero essere necessari alcuni aggiustamenti, ma non è necessario utilizzare nuove API o
modificare targetSdkVersion
.
Preparare un dispositivo con Android 8.0
- Se hai un dispositivo compatibile (Pixel, Pixel XL, Pixel C, Nexus 5X, Nexus 6P o Nexus Player), segui le istruzioni per eseguire il flashing del dispositivo.
- In alternativa, scarica l'immagine di sistema Android 8.0 per l'emulatore di Android. È elencata in
SDK Manager in
Android 8.0 come Immagine di sistema Intel x86 Atom delle API di Google.
Nota: l'immagine di sistema Android 8.0 è disponibile per il download da Android Studio 3.0 e versioni successive. Per ulteriori informazioni, consulta la sezione seguente su come scaricare l'SDK Android 8.0.
Esegui test di compatibilità
Testare la compatibilità con Android 8.0 (livello API 26) in gran parte comporta lo stesso tipo di test che esegui quando ti prepari a rilasciare l'app. È il momento giusto per rivedere le norme sulla qualità delle app principali e le best practice per i test.
Tuttavia, c'è un altro aspetto dei test: Android 8.0 introduce modifiche alla piattaforma Android che possono influire sul comportamento della tua app o danneggiarla del tutto, anche se non modifichi il tuo targetSdkVersion
. Per questo motivo, è importante esaminare le modifiche principali nella tabella 1 e testare le eventuali correzioni implementate per adeguarle.
Cambia | Riepilogo | Ulteriori informazioni |
---|---|---|
Aggiornamenti della posizione in background meno frequenti | Se la tua app riceve aggiornamenti della posizione da un servizio in background, riceve aggiornamenti meno frequenti su Android 8.0 (livello API 26) rispetto alle versioni precedenti di Android. In particolare, un servizio in background non può ricevere aggiornamenti della posizione più di alcune volte all'ora. Tuttavia, mentre la tua app è in primo piano, la frequenza degli aggiornamenti della posizione rimane invariata. | Limiti di posizioni in background |
net.hostname non sono più supportati
|
L'esecuzione di query sulla proprietà di sistema net.hostname produce un risultato nullo.
|
Nessun valore |
Nuova eccezione da send(DatagramPacket) |
Il metodo send(DatagramPacket) genera SocketException se il metodo connect(InetAddress, int) eseguito in precedenza non è riuscito.
|
Modifiche del comportamento: connettività di rete e HTTP(S) |
NullPointerException corretto da
AbstractCollection metodi
|
AbstractCollection.removeAll(null) e
AbstractCollection.retainAll(null) ora generano sempre un
NullPointerException ;
in precedenza, NullPointerException non veniva generato quando la raccolta era vuota.
Questa modifica rende il comportamento coerente con la documentazione.
|
Modifiche del comportamento: gestione della raccolta |
NullPointerException corretto da
Currency.getDisplayName(null)
|
La chiamata di Currency.getDisplayName(null)
genera un NullPointerException .
|
Modifiche del comportamento: impostazioni internazionali e internazionalizzazione |
Per un elenco più completo delle modifiche del comportamento in Android 8.0 (livello API 26), consulta anche la pagina Modifiche del comportamento Android 8.0.
Aggiornare la versione di destinazione e utilizzare le funzionalità di Android 8.0
Questa sezione spiega come attivare il supporto completo per Android 8.0 (livello API 26) aggiornando il tuo targetSdkVersion
alla versione 26 e aggiungendo nuove funzionalità disponibili in Android 8.0.
Oltre a offrirti nuove API, Android 8.0 introduce alcuni cambiamenti del comportamento quando aggiorni il tuo targetSdkVersion
alla versione 26. Poiché alcune modifiche al comportamento
potrebbero richiedere modifiche al codice per evitare interruzioni, dovresti innanzitutto capire in che modo la tua app potrebbe
essere interessata dalla modifica di targetSdkVersion
esaminando tutte le modifiche del comportamento per le app destinate ad Android 8.0.
Nota: i passaggi descritti sopra per garantire la compatibilità della piattaforma sono prerequisiti per scegliere come target della tua app Android 8.0, quindi assicurati di completare prima questi passaggi.
Scarica l'SDK per Android 8.0
Puoi ricevere i pacchetti SDK per creare la tua app con Android 8.0 (livello API 26) utilizzando la versione più recente di Android Studio (è consigliato Android Studio 3.0 o versioni successive). Android Studio 3.0 e versioni successive include strumenti utili per le funzionalità di Android 8.0, come le icone adattive e i caratteri scaricabili. Se non hai ancora bisogno di queste funzionalità, puoi usare la versione stabile di Android Studio 2.3.3 per creare la tua app con Android 8.0 e usare le nuove API.
Per effettuare la configurazione con una delle versioni di Android Studio, procedi nel seguente modo:
- Avvia Android Studio e apri SDK Manager facendo clic su Strumenti > Gestore SDK.
- Nella scheda Piattaforme SDK, seleziona Mostra dettagli pacchetto. Sotto
Anteprima di Android 8.0, controlla quanto segue:
- Piattaforma SDK Android 26
- Immagine di sistema Atom Intel x86 API di Google API (richiesta solo per l'emulatore)
- Passa alla scheda Strumenti SDK e seleziona tutti gli elementi per cui sono disponibili aggiornamenti (fai clic su ogni casella di controllo che mostra un trattino ). Ciò dovrebbe includere le versioni più recenti dei seguenti elementi obbligatori:
- Strumenti build SDK Android 26.0.0
- Piattaforma-Strumenti SDK per Android 26.0.0
- Emulatore Android 26.0.0
- Fai clic su OK per installare tutti i pacchetti SDK selezionati.
Ora è tutto pronto per iniziare a creare con Android 8.0.
Aggiorna la configurazione della build
Aggiorna compileSdkVersion
,
targetSdkVersion
e la versione della Support Library alle ultime
revisioni disponibili, ad esempio:
android { compileSdkVersion 26 defaultConfig { targetSdkVersion 26 } ... } dependencies { compile 'com.android.support:appcompat-v7:26.0.0' } // REQUIRED: Google's new Maven repo is required for the latest // support library that is compatible with Android 8.0 repositories { google() // If you're using a version of Gradle lower than 4.1, you must instead use: // maven { // url 'https://maven.google.com' // } }
Rimuovi ricevitori di trasmissioni dal file manifest
Poiché Android 8.0 (livello API 26) introduce nuove limitazioni per i ricevitori di trasmissione, devi rimuovere tutti i ricevitori di trasmissione registrati per intent di trasmissione implicit. Lasciarli attivi non interrompe l'app in fase di build o runtime, ma non hanno effetto quando l'app viene eseguita su Android 8.0.
Le trasmissioni a cui solo la tua app può rispondere (intervenzioni e trasmissioni esplicite inviate specificamente al nome del pacchetto dell'app) continuano a funzionare allo stesso modo su Android 8.0.
Esistono eccezioni a questa nuova limitazione. Per un elenco delle trasmissioni implicite ancora funzionanti nelle app destinate ad Android 8.0, consulta la sezione Eccezioni alle trasmissioni implicite.
Testare l'app Android 8.0
Una volta completati i preparativi precedenti, puoi creare la tua app e testarla ulteriormente per assicurarti che funzioni correttamente quando scegli come target Android 8.0 (livello API 26). Questo è un altro buon momento per consultare le norme principali sulla qualità delle app e le best practice per i test.
Quando crei la tua app con targetSdkVersion
impostato su 26, ci sono modifiche specifiche alla piattaforma di cui dovresti essere a conoscenza. Alcune di queste modifiche possono influire notevolmente sul comportamento della tua app o addirittura interrompere del tutto l'app, anche se non implementi nuove funzionalità in Android 8.0.
La tabella 2 fornisce un elenco di queste modifiche con link a ulteriori informazioni.
Cambia | Riepilogo | Ulteriori informazioni |
---|---|---|
Privacy | Android 8.0 (livello API 26) non supporta l'utilizzo delle proprietà di sistema net.dns1, net.dns2, net.dns3 o net.dns4. | Cambiamenti del comportamento: privacy |
Applicazione di segmenti scrivibili ed eseguibili | Per le librerie native, Android 8.0 (livello API 26) applica la regola secondo cui i dati non devono essere eseguibili e il codice non deve essere scrivibile. | Modifiche del comportamento: librerie native |
Convalida di intestazioni e sezioni ELF | Il linker dinamico controlla più valori nell'intestazione ELF e nelle intestazioni di sezione e restituisce esito negativo se non sono validi. | Modifiche del comportamento: librerie native |
Notifiche | Le app che hanno come target la versione Android 8.0 (livello API 26) dell'SDK devono implementare uno o più canali di notifica per pubblicare notifiche per gli utenti. | Panoramica delle API: notifiche |
Il metodo List.sort()
|
Le implementazioni di questo metodo potrebbero non chiamare più Collections.sort() oppure la tua app genererà un'eccezione a causa dell'overflow dello stack.
|
Modifiche al comportamento: gestione della raccolta |
Il metodo Collections.sort()
|
Nelle implementazioni dell'elenco, Collections.sort() ora genera
ConcurrentModificationException .
|
Modifiche al comportamento: gestione delle raccolte |
Per un elenco più completo delle modifiche del comportamento in Android 8.0 (livello API 26), consulta la pagina Modifiche del comportamento su Android 8.0.
Per esplorare le nuove funzionalità e API disponibili con Android 8.0 (livello API 26), consulta la pagina Funzionalità e API di Android 8.0.