Migrazione delle app ad Android 9

Android 9 (livello API 28) introduce nuove funzionalità e API che puoi sfruttare nelle tue app, nonché nuove modifiche al comportamento. Questo documento offre una panoramica dei passaggi per eseguire la migrazione delle tue 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 funzionale 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 le 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 di fabbrica dei dispositivi Pixel. Le istruzioni generali per eseguire il 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 alla voce API Android 28 come Immagine di sistema Intel x86 Atom delle API di Google.

Nota: l'immagine del sistema di emulatori 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 garantire la compatibilità con Android 9

Esegui test di compatibilità

In gran parte, testare la compatibilità con Android 9 comporta lo stesso tipo di test che esegui quando ti prepari per rilasciare l'app. È il momento giusto per rivedere le norme fondamentali sulla qualità 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 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.

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

Cambia Riepilogo
Limitazioni sulle interfacce non SDK Ora l'accesso a specifiche interfacce non SDK è bloccato, indipendentemente dal fatto che l'accesso sia diretto, tramite JNI o tramite riflesso. I tentativi di accedere a interfacce limitate generano errori come NoSuchFieldException e NoSuchMethodException. Per maggiori dettagli, consulta le limitazioni sulle interfacce non SDK.
Rimozione del provider di criptovalute A partire da Android 9, il provider JCA di Crypto è stato rimosso. Le chiamate a SecureRandom.getInstance("SHA1PRNG", "Crypto") genereranno NoSuchProviderException.
Decodificatore UTF-8 più rigoroso In Android 9, il decoder UTF-8 per il linguaggio Java è più restrittivo e segue lo standard Unicode.
Accesso a fotocamera, microfono e 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 le nuove funzionalità disponibili in Android 9.

Oltre a offrirti nuove API, Android 9 introduce alcuni cambiamenti del comportamento quando aggiorni il tuo targetSdkVersion alla versione 28. 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 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 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 eseguire la compilazione in base a quella versione della piattaforma, puoi utilizzare Android Studio 3.1. Android Studio 3.2 fornisce un 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 principali sulla qualità delle app e le best practice per i test.

Quando crei la tua app con targetSdkVersion impostato su P, 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 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. Si tratta di un'autorizzazione normale, pertanto 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 dal provider Bouncy Castle a 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 richiedere l'implementazione predefinita.
Rimozione dell'accesso diretto a Build.serial Le app che richiedono l'identificatore Build.serial ora devono richiedere l'autorizzazione READ_PHONE_STATE e usare 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 i 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 ciascuna app. Ora non è 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 destinate ad Android 9, consulta il documento Modifiche del comportamento.

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