Migrazione ad Android 8.0

Android 8.0 (livello API 26) introduce modifiche del comportamento, nonché nuove funzionalità e API che che puoi sfruttare nelle tue app. Questo documento fornisce una panoramica dei passaggi per eseguire la migrazione dalle tue app ad Android 8.0 in due fasi chiave:

  1. Assicurare la compatibilità con Android 8.0

    Verifica che l'app sia completamente funzionante nella nuova versione della piattaforma. In questa fase, Non utilizzi nuove API né cambi targetSdkVersion dell'app, ma modifiche di minore entità potrebbe essere necessario.

  2. Aggiornare la versione di destinazione e utilizzare le funzionalità di Android 8.0

    Quando vorrai sfruttare le nuove funzionalità di piattaforma, aggiorna targetSdkVersion a 26, verifica che l'app continui per funzionare come previsto e poi iniziare a utilizzare nuove API.

Garantire la compatibilità con Android 8.0

L'obiettivo è garantire che l'app esistente funzioni così com'è su Android 8.0 (livello API 26). Poiché alcune modifiche alla piattaforma potrebbero influire sul comportamento dell'app, potrebbe essere necessario apportare alcune modifiche, ma non occorre utilizzare nuove API o modifica targetSdkVersion.

Garantisci la compatibilità con Android 8.0 passo passo

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 nella Gestore SDK in Android 8.0 come immagine di sistema Intel x86 Atom delle API di Google.

    Nota: l'immagine di sistema Android 8.0 può essere scaricata da Android Studio 3.0 e versioni successive. Per saperne di più, consulta la sezione riportata di seguito su come scaricare l'SDK Android 8.0.

Esegui test di compatibilità

Per lo più, testando la compatibilità con Android 8.0 (livello API 26) prevede lo stesso tipo di test che esegui durante la preparazione al rilascio dell'app. È il momento giusto per consultare le norme sulla qualità principali delle app e le best practice per i test.

Tuttavia, c'è un altro aspetto da testare: Android 8.0 introduce modifiche al piattaforma che può influire sul comportamento della tua app o interromperla del tutto, anche se non modifichi il tuo targetSdkVersion. Per questo motivo, è importante esaminare le modifiche principali nella tabella 1 e testa le eventuali correzioni implementate per adattare le modifiche.

Tabella 1. Modifiche principali che interessano tutte le app in esecuzione su dispositivi Android 8.0.

Cambia Riepilogo Ulteriori riferimenti
Aggiornamenti della posizione in background meno frequenti Se la tua app riceve aggiornamenti sulla posizione da un servizio in background, lo riceve meno frequentemente aggiornamenti su Android 8.0 (livello API 26) rispetto alle versioni precedenti di Android. Nello specifico, uno sfondo Il servizio non può ricevere aggiornamenti sulla posizione più di alcune volte all'ora. Tuttavia, mentre l'app è in primo piano, la frequenza degli aggiornamenti della posizione è invariata. Limiti di posizione 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 è riuscito. Modifiche del comportamento: connettività di rete e HTTP(S)
Valore NullPointerException corretto da AbstractCollection metodi AbstractCollection.removeAll(null) e AbstractCollection.retainAll(null) ora genera sempre un NullPointerException; in precedenza, NullPointerException non è stato generato quando la raccolta era vuota. Questa modifica rende il comportamento coerente con la documentazione. Modifiche del comportamento: gestione della raccolta
Valore NullPointerException corretto da Currency.getDisplayName(null) Chiamata a Currency.getDisplayName(null) lancia NullPointerException. Cambiamenti del comportamento: impostazioni internazionali e internazionalizzazione

Per un elenco più completo di cambiamenti del comportamento in Android 8.0 (livello API 26), inoltre consulta le Modifiche del comportamento di Android 8.0.

Aggiorna la versione di destinazione e usa le funzionalità di Android 8.0

Questa sezione spiega come attivare il supporto completo per Android 8.0 (livello API 26) aggiornando targetSdkVersion a 26 e l'aggiunta di nuove funzionalità disponibili in Android 8.0.

Oltre a offrirti nuove API, Android 8.0 introduce alcuni comportamenti cambia quando aggiorni targetSdkVersion alla versione 26. Poiché alcuni comportamenti cambiano potrebbero richiedere modifiche al codice per evitare interruzioni, è necessario innanzitutto capire come potrebbe essere influisce sulla modifica dell'targetSdkVersion mediante l'esame di tutte le modifiche del comportamento per le app che hanno come target Android 8.0.

Nota: i passaggi descritti sopra per garantire la compatibilità della piattaforma sono un prerequisito. il targeting della tua app ad Android 8.0, quindi esegui questi passaggi.

Aggiorna la versione di destinazione e utilizza le funzionalità di Android 8.0 passo passo

Scarica l'SDK per Android 8.0

Puoi scaricare 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 caratteri scaricabili. Se non hai ancora bisogno di queste funzionalità, puoi utilizzare la versione stabile di Android Studio 2.3.3 per creare l'app con Android 8.0 e usare le nuove API.

Per configurare una delle versioni di Android Studio, procedi nel seguente modo:

  1. Avvia Android Studio e apri SDK Manager facendo clic su Strumenti > SDK Manager.
  2. Nella scheda SDK Platforms (Piattaforme SDK), seleziona Mostra dettagli pacchetto. Inferiore Anteprima Android 8.0 controlla quanto segue:
      .
    • Piattaforma SDK Android 26
    • Immagine di sistema Intel x86 Atom delle API di Google (richiesto solo per l'emulatore)
  3. Passa alla scheda SDK Tools e controlla tutti gli elementi con aggiornamenti disponibili (fai clic ogni casella di controllo che mostra un trattino ). Dovrebbero essere incluse le versioni più recenti dei seguenti elementi obbligatori:
    • Strumenti di build SDK per Android 26.0.0
    • SDK Platform-Strumenti per Android 26.0.0
    • Emulatore Android 26.0.0
  4. Fai clic su OK per installare tutti i pacchetti SDK selezionati.

Ora puoi iniziare a creare con Android 8.0.

Aggiorna la configurazione della build

Aggiorna compileSdkVersion, targetSdkVersion e la versione della libreria di supporto alla più recente 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'
    // }
}

Rimuovere i broadcast receiver dal file manifest

Perché Android 8.0 (livello API 26) introduce nuove limitazioni per i broadcast receiver, devi rimuovere tutti i broadcast receiver che sono registrati per gli intent di trasmissione impliciti. Se li lasciano nella posizione corretta, la tua app non viene interrotta in fase di build o runtime, ma non hanno alcun effetto se l'app viene eseguita su Android 8.0.

Annunci a cui solo la tua app può rispondere: intent di trasmissione espliciti e annunci inviati specificamente al nome del pacchetto dell'app; continueranno a funzionare allo stesso modo Android 8.0 e versioni successive.

Esistono delle eccezioni a questa nuova limitazione. Per un per l'elenco delle trasmissioni implicite che funzionano ancora nelle app che hanno come target Android 8.0, vedi Eccezioni per le trasmissioni implicite.

Testare l'app per Android 8.0

Completata la preparazione descritta sopra, puoi creare la tua app e poi testarla per assicurarti che funzioni correttamente quando hai scelto come target Android 8.0 (livello API 26). Questo è un altro buon momento per esaminare App principale Norme sulla qualità e Migliore Pratiche per i test.

Quando crei la tua app impostando targetSdkVersion su 26, devi essere a conoscenza di modifiche specifiche alla piattaforma. Alcuni di queste modifiche possono influire notevolmente sul comportamento della tua app o addirittura interrompere completamente l'app, anche se non implementi nuovi in Android 8.0.

La tabella 2 fornisce un elenco di queste modifiche con link a ulteriori informazioni.

Tabella 2. Modifiche principali che interessano le app quando il valore di targetSdkVersion è impostato su 26.

Cambia Riepilogo Ulteriori riferimenti
Privacy Android 8.0 (livello API 26) non supporta l'utilizzo dei Proprietà di sistema net.dns1, net.dns2, net.dns3 o net.dns4. Modifiche del comportamento: Privacy
Segmenti scrivibili ed eseguibili applicati Per le librerie native, Android 8.0 (livello API 26) applica la regola che 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 intestazioni di sezione e non funzionano se non sono valide. Modifiche del comportamento: Librerie native
Notifiche 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 le notifiche per gli utenti. Panoramica dell'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 del comportamento: Gestione della raccolta
Il metodo Collections.sort() Nelle implementazioni dell'elenco, Collections.sort() ora genera un ConcurrentModificationException. Comportamento Modifiche: gestione della raccolta

Per un elenco più completo delle modifiche del comportamento in Android 8.0 (livello API 26), consulta le Modifiche del comportamento di Android 8.0.

Per esplorare le nuove funzionalità e le API disponibili con Android 8.0 (livello API 26), consulta Funzionalità e API di Android 8.0.