Android 8.0 (livello API 26) introduce modifiche al comportamento, nonché nuove funzionalità e API che puoi sfruttare nelle tue app. Questo documento fornisce una panoramica dei passaggi necessari per eseguire la migrazione delle tue app ad Android 8.0 in due fasi chiave:
- Assicurare la compatibilità con Android 8.0
Verifica che la tua app sia completamente funzionale sulla nuova versione della piattaforma. In questa fase non utilizzi nuove API né modifichi
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 usufruire delle nuove funzionalità della piattaforma, aggiorna
targetSdkVersion
alla versione 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 della tua app,
potrebbe essere necessario apportare alcuni aggiustamenti, ma non è necessario utilizzare nuove API o
modificare il tuo 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 Android. È elencato in Gestione SDK in Android 8.0 come Immagine di sistema Intel x86 Atom per le API 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 di seguito per ottenere l'SDK Android 8.0.
Esegui test di compatibilità
Per la maggior parte, testare la compatibilità con Android 8.0 (livello API 26) richiede lo stesso tipo di test che esegui quando ti prepari a rilasciare l'app. È un buon momento per rivedere le linee guida sulla qualità principale delle app e le best practice per i test.
Tuttavia, c'è un altro aspetto nel test: Android 8.0 introduce modifiche alla piattaforma Android che possono influenzare il comportamento della tua app o interromperla del tutto, anche se non modifichi targetSdkVersion
. Per questo motivo, è importante esaminare le modifiche principali riportate nella tabella 1 e testare le correzioni che implementi per adattarle alle modifiche.
Cambia | Riepilogo | Ulteriori riferimenti |
---|---|---|
Aggiornamenti della posizione in background meno frequenti | Se la tua app riceve aggiornamenti sulla posizione da un servizio in background, su Android 8.0 (livello API 26) riceve aggiornamenti meno frequenti rispetto alle versioni precedenti di Android. Nello specifico, un servizio in background non può ricevere aggiornamenti sulla posizione più di qualche volta all'ora. Tuttavia, mentre la tua app è in primo piano, la frequenza degli aggiornamenti della posizione rimane invariata. | Limiti di località in background |
net.hostname non sono più supportati
|
L'esecuzione di una query sulla proprietà di sistema net.hostname produce un risultato nullo.
|
Nessuno |
Nuova eccezione da send(DatagramPacket) |
Il metodo send(DatagramPacket) genera un SocketException
se il metodo connect(InetAddress, int) eseguito in precedenza non ha avuto esito positivo.
|
Modifiche del comportamento: connettività di rete e HTTP(S) |
Metodi NullPointerException da
AbstractCollection appropriati
|
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 a Currency.getDisplayName(null)
genera un NullPointerException .
|
Modifiche al comportamento: impostazioni internazionali e localizzazione |
Per un elenco più completo delle modifiche al comportamento in Android 8.0 (livello API 26), consulta anche Modifiche al comportamento di 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 targetSdkVersion
alla versione 26
e aggiungendo nuove funzionalità disponibili in Android 8.0.
Oltre a offrire nuove API, Android 8.0 introduce alcune modifiche al comportamento quando aggiorni targetSdkVersion
alla versione 26. Poiché alcune modifiche del comportamento
potrebbero richiedere modifiche al codice per evitare interruzioni, devi prima capire in che modo la tua app potrebbe essere
interessata quando modifichi il targetSdkVersion
esaminando tutte le modifiche del comportamento per le app che hanno come target Android 8.0.
Nota: i passaggi descritti sopra per garantire la compatibilità delle piattaforme sono un prerequisito per poter scegliere come target della tua app Android 8.0, quindi assicurati di completare prima questi passaggi.
Scaricare l'SDK Android 8.0
Puoi ottenere i pacchetti SDK per creare la tua app con Android 8.0 (livello API 26) utilizzando la versione più recente di Android Studio (è consigliata la versione 3.0 o successive di Android Studio). Android Studio 3.0 e versioni successive include strumenti utili per le funzionalità di Android 8.0, come le icone ad attivazione dinamica e i caratteri scaricabili. Se non hai ancora bisogno di queste funzionalità, puoi utilizzare la versione stabile di Android Studio 2.3.3 per creare la tua app con Android 8.0 e utilizzare le nuove API.
Per configurare una delle versioni di Android Studio, procedi nel seguente modo:
- Avvia Android Studio e apri SDK Manager facendo clic su Strumenti > SDK Manager.
- Nella scheda SDK Platforms (Piattaforme SDK), seleziona Mostra dettagli pacchetto. Nella sezione
dell'anteprima di Android 8.0 controlla quanto segue:
- Piattaforma SDK Android 26
- Immagine di sistema Atom Intel x86 per le API Google (obbligatoria solo per l'emulatore)
- Passa alla scheda Strumenti SDK e controlla tutti gli elementi per i quali sono disponibili aggiornamenti (fai clic su ogni casella di controllo che mostra un trattino ). Dovrebbero essere incluse le versioni più recenti dei seguenti elementi obbligatori:
- Android SDK Build-Tools 26.0.0
- SDK Platform-Strumenti per Android 26.0.0
- Android Emulator 26.0.0
- Fai clic su OK per installare tutti i pacchetti SDK selezionati.
Ora puoi iniziare a creare con Android 8.0.
Aggiorna la configurazione di compilazione
Aggiorna compileSdkVersion
,
targetSdkVersion
e la versione della Libreria di supporto alle revisioni
più recenti 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' // } }
Rimuovere i receiver di trasmissione dal file manifest
Poiché Android 8.0 (livello API 26) introduce nuove limitazioni per i broadcast receiver, devi rimuovere tutti i broadcast receiver registrati per gli intent di trasmissione impliciti. Se li lasci invariati, l'app non viene interrotta in fase di compilazione o di esecuzione, ma non hanno alcun effetto quando l'app viene eseguita su Android 8.0.
Le trasmissioni a cui solo la tua app può rispondere (gli intent di trasmissione espliciti e le trasmissioni inviate al nome del pacchetto della tua app in modo specifico) continuano a funzionare allo stesso modo su Android 8.0.
Esistono eccezioni a questa nuova limitazione. Per un elenco di trasmissioni implicite ancora disponibili nelle app che hanno come target Android 8.0, vedi Eccezioni per le trasmissioni implicite.
Testa la tua app per Android 8.0
Una volta completate le preparazioni precedenti, puoi creare l'app e poi testarla ulteriormente per assicurarti che funzioni correttamente quando scegli come target Android 8.0 (livello API 26). È un'altra buona occasione per consultare le norme sulla qualità delle app di base e le best practice per i test.
Quando crei l'app con targetSdkVersion
impostato su 26,
devi tenere conto di modifiche specifiche della piattaforma. Alcune di queste modifiche possono influire notevolmente sul comportamento della tua app o addirittura interromperla del tutto, 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 riferimenti |
---|---|---|
Privacy | Android 8.0 (livello API 26) non supporta l'utilizzo delle proprietà di sistema net.dns1, net.dns2, net.dns3 o net.dns4. | Modifiche al comportamento: Privacy |
Segmenti scrivibili ed eseguibili applicati | 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 dell'intestazione e della sezione ELF | Il linker dinamico controlla più valori nell'intestazione ELF e nelle intestazioni delle sezioni e ha esito negativo se non sono validi. | Modifiche al comportamento: Librerie native |
Notifiche | Le app che hanno come target la versione dell'SDK per Android 8.0 (livello API 26) devono implementare uno o più canali di notifica per inviare notifiche agli utenti. | Panoramica dell'API: Notifiche |
Il metodo List.sort()
|
Le implementazioni di questo metodo potrebbero non chiamare più Collections.sort() oppure la tua app potrebbe generare un'eccezione a causa di un overflow dello stack.
|
Modifiche al comportamento: Gestione delle raccolte |
Il metodo Collections.sort()
|
Nelle implementazioni di List, Collections.sort() ora genera un
ConcurrentModificationException .
|
Modifiche al comportamento: gestione delle raccolte |
Per un elenco più completo delle modifiche al comportamento in Android 8.0 (livello API 26), consulta Modifiche al comportamento di Android 8.0.
Per esplorare le nuove funzionalità e API disponibili con Android 8.0 (livello API 26), consulta Funzionalità e API di Android 8.0.