Migrazione delle app ad Android 9

Android 9 (livello API 28) introduce nuove funzionalità e API di cui puoi usufruire nelle tue app, nonché nuove modifiche del comportamento. Questo documento offre una panoramica dei passaggi per eseguire la migrazione delle app ad Android 9 in due fasi principali:

  1. Assicurare la compatibilità di base con Android 9

    Verifica che la tua app esistente sia completamente funzionante nella nuova versione della piattaforma. In questa fase non utilizzi nuove API né modifichi il valore targetSdkVersion dell'app, ma potrebbero essere necessarie modifiche di minore entità.

  2. Scegli come target la nuova piattaforma, compila con l'SDK Android 9 e crea con le funzionalità di Android 9

    Quando è tutto pronto per sfruttare le nuove funzionalità della piattaforma, aggiorna targetSdkVersion a 28, verifica che l'app continui a funzionare come previsto e poi inizia a utilizzare nuove API.

Preparare un dispositivo con Android 9

Se hai un dispositivo compatibile, richiedi al produttore l'immagine di sistema Android 9 per il tuo dispositivo; fai clic qui per visualizzare le immagini del produttore per i dispositivi Pixel. Le istruzioni generali per l'esecuzione del flashing di un'immagine di sistema sono disponibili qui.

Puoi anche scaricare l'immagine di sistema Android 9 per l'emulatore Android. È elencata in SDK Manager in API Android 28 come API di Google Intel x86 Atom System Image.

Nota: l'immagine del sistema di emulatore Android 9 è disponibile per il download in Android Studio 3.1 e versioni successive; Android Studio 3.2 offre la massima compatibilità. Per ulteriori informazioni, consulta la sezione Scaricare l'SDK Android 9.

Garantire la compatibilità con Android 9

L'obiettivo è assicurarti che la tua app esistente funzioni così com'è su Android 9. 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.

Istruzioni dettagliate per la compatibilità con Android 9

Esegui test di compatibilità

Nella maggior parte dei casi, testare la compatibilità con Android 9 comporta lo stesso tipo di test che esegui quando ti prepari a rilasciare l'app. È un buon momento per rivedere le norme sulla qualità principali delle app e le best practice per i test.

Tuttavia, c'è un altro aspetto dei test: Android 9 introduce delle modifiche alla piattaforma Android che possono 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 testare le eventuali correzioni implementate per adeguarle.

Tabella 1. Modifiche principali che interessano tutte le app in esecuzione sui dispositivi Android 9.

Cambia Riepilogo
Limitazioni sulle interfacce non SDK L'accesso a interfacce non SDK specifiche è ora bloccato, sia che l'accesso sia diretto, tramite JNI o tramite riflessione. I tentativi di accedere a interfacce limitate generano errori come NoSuchFieldException e NoSuchMethodException. Per maggiori dettagli, consulta Restrizioni sulle interfacce non SDK.
Rimozione del provider di criptovalute A partire da Android 9, il provider Crypto JCA è stato rimosso. Le chiamate a SecureRandom.getInstance("SHA1PRNG", "Crypto") genereranno NoSuchProviderException.
Decoder UTF-8 più rigoroso In Android 9, il decoder UTF-8 per il linguaggio Java è più restrittivo e segue lo standard Unicode.
Accesso alla fotocamera, al microfono e ai sensori bloccato per le app inattive Quando le app sono inattive, non possono più accedere alla fotocamera, al microfono o ai sensori di SensorManager.

Per un elenco più completo delle modifiche del comportamento per tutte le app eseguite su Android 9, consulta il documento Modifiche del comportamento.

Aggiornare la versione di destinazione e utilizzare le funzionalità di Android P

Questa sezione spiega come attivare il supporto completo per Android 9 aggiornando il tuo targetSdkVersion alla versione 28 e aggiungendo nuove funzionalità disponibili su Android 9.

Oltre a offrirti nuove API, Android 9 introduce alcune modifiche del comportamento quando aggiorni il tuo targetSdkVersion alla versione 28. Poiché alcune modifiche del comportamento potrebbero richiedere modifiche al codice per evitare interruzioni, prima di tutto devi capire in che modo la tua app potrebbe essere interessata dalla modifica di targetSdkVersion esaminando tutte le modifiche del comportamento delle app destinate ad Android 9.

Nota: i passaggi descritti sopra per garantire la compatibilità della piattaforma sono prerequisiti per scegliere Android 9 come target della tua app, quindi assicurati di completare prima questi passaggi.

Aggiorna la versione di destinazione e usa le funzionalità di Android 9 passo passo

Scarica l'SDK per Android 9

Puoi ricevere i pacchetti SDK per creare la tua app con Android 9 utilizzando Android Studio 3.1 o versioni successive. Se non hai ancora bisogno delle nuove funzionalità di Android 9 e vuoi compilare solo per quella versione della piattaforma, puoi utilizzare Android Studio 3.1. Android Studio 3.2 offre il supporto completo per le funzionalità di Android 9.

Testare l'app Android 9

Una volta completati i preparativi precedenti, puoi creare la tua app e testarla ulteriormente per assicurarti che funzioni correttamente quando scegli come target Android 9 (livello API 28). Questo è un altro buon momento per consultare le norme sulla qualità principali delle app e le best practice per i test.

Quando crei un'app con targetSdkVersion impostato su P, esistono modifiche specifiche alla piattaforma di cui devi 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 9.

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 28.

Cambia Riepilogo
Autorizzazione per i servizi in primo piano Le app che vogliono utilizzare i servizi in primo piano ora devono richiedere prima l'autorizzazione FOREGROUND_SERVICE. Questa è un'autorizzazione normale, quindi il sistema la concede automaticamente all'app richiedente. L'avvio di un servizio in primo piano senza l'autorizzazione genera un'eccezione SecurityException.
Ritiro delle crittografie di Bouncy Castle Android 9 ritira diverse crittografie del provider Bouncy Castle in favore di quelle fornite dal provider Conscrypt. Le chiamate a getInstance() che richiedono il provider Bouncy Castle generano NoSuchAlgorithmException errori. Per risolvere gli errori, non specificare un provider in getInstance() (ovvero, richiedi l'implementazione predefinita).
Rimozione dell'accesso diretto a Build.serial Le app che richiedono l'identificatore Build.serial devono ora richiedere l'autorizzazione READ_PHONE_STATE e poi utilizzare il nuovo metodo Build.getSerial() aggiunto in Android 9.
Condivisione della directory dei dati di WebView non consentita Le app non possono più condividere una singola directory di dati WebView tra più processi. Se la tua app ha più di un processo utilizzando WebView, CookieManager o qualsiasi altra API nel pacchetto android.webkit, l'app si arresta in modo anomalo quando il secondo processo chiama un metodo WebView.
Accesso alla directory dei dati dell'app bloccato da SELinux Il sistema applica sandbox SELinux per app con restrizioni SELinux per app sulla directory dei dati privati di ogni app. Non è più consentito accedere direttamente alla directory dei dati di un'altra app in base al percorso. Le app possono continuare a condividere dati utilizzando meccanismi IPC, ad esempio passando FD.

Per un elenco più completo delle modifiche del comportamento per le app che hanno come target Android 9, consulta il documento Modifiche del comportamento.

Per esplorare le nuove funzionalità e API disponibili Android 9, consulta Funzionalità e API di Android 9.