Migrazione delle app ad Android 9

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

  1. Assicurare la compatibilità di base con Android 9

    Verifica che l'app esistente sia completamente funzionante nella nuova versione della piattaforma. In questa fase, non utilizzi nuove API né modifichi targetSdkVersion della tua app, ma potrebbero essere necessarie piccole modifiche.

  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 inizia a utilizzare le nuove API.

Preparare un dispositivo con Android 9

Se hai un dispositivo compatibile, ottieni il Immagine di sistema Android 9 del produttore per il tuo dispositivo. fai clic qui per immagini di fabbrica Dispositivi Pixel. Istruzioni generali per un'immagine di sistema lampeggiante sono qui.

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

Nota: l'immagine di sistema dell'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, vedi 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 della tua app, potrebbe essere necessario apportare alcuni aggiustamenti, ma non è necessario utilizzare nuove API o modificare il tuo targetSdkVersion.

Garantire la compatibilità con Android 9 passo passo

Eseguire test di compatibilità

Per la maggior parte, 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 consultare le norme sulla qualità principali delle app e le best practice per i test.

Tuttavia, c'è un altro aspetto del test: Android 9 introduce delle 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 riportate nella tabella 1 e testare le correzioni che implementi per adattarle alle modifiche.

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

Cambia Riepilogo
Limitazioni relative alle interfacce non SDK L'accesso a interfacce non SDK specifiche è ora bloccato, indipendentemente dal fatto che sia diretto, tramite JNI o tramite riflessione. I tentativi di accedere a interfacce con limitazioni generano errori come NoSuchFieldException e NoSuchMethodException. Per maggiori dettagli, consulta la sezione Limitazioni sulle interfacce non SDK.
Rimozione del fornitore di criptovalute A partire da Android 9, il provider JCA di crittografia è stato rimosso. Le chiamate a SecureRandom.getInstance("SHA1PRNG", "Crypto") genereranno NoSuchProviderException.
Decodificatore UTF-8 più rigoroso In Android 9, il decodificatore UTF-8 per il linguaggio Java è più rigoroso 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 ai sensori della fotocamera, del microfono o di SensorManager.

Per un elenco più completo delle modifiche al comportamento per tutte le app in esecuzione su Android 9, consulta il documento Modifiche al 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 targetSdkVersion a 28 e l'aggiunta di nuove funzionalità disponibili in Android 9.

Oltre a offrire nuove API, Android 9 introduce alcune modifiche al comportamento quando aggiorni targetSdkVersion alla versione 28. Poiché alcuni comportamenti cambiano potrebbero richiedere modifiche al codice per evitare interruzioni, è necessario innanzitutto capire come potrebbe essere Interessati quando modifichi targetSdkVersion esaminando tutte le modifiche del comportamento per le app che hanno come target Android 9.

Nota: i passaggi descritti sopra per garantire la compatibilità della piattaforma sono un prerequisito per scegliere come target della tua app Android 9, quindi assicurati di completarli per primi.

Aggiornare la versione target e utilizzare le funzionalità di Android 9 passo passo

Scarica l'SDK Android 9

Puoi ottenere i pacchetti SDK per creare la tua app con Android 9 utilizzando Android Studio 3.1 o versioni successive. Se non avete ancora bisogno delle nuove funzionalità di Android 9 e volete solo compilarle della piattaforma, puoi utilizzare Android Studio 3.1. Android Studio 3.2 offre il supporto completo per Funzionalità di Android 9.

Testare l'app Android 9

Una volta completate le preparazioni precedenti, puoi creare l'app e poi testarla ulteriormente per assicurarti che funzioni correttamente quando scegli come target Android 9 (livello API 28). È un'altra buona occasione per consultare le norme sulla qualità delle app di base e le best practice per i test.

Quando crei la tua app impostando targetSdkVersion su P, 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 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 devono ora richiedere l'autorizzazione FOREGROUND_SERVICE per prima cosa. Si tratta di un'autorizzazione normale, quindi il sistema la concede automaticamente all'app che la richiede. L'avvio di un servizio in primo piano senza l'autorizzazione genera un'eccezione SecurityException.
Ritiro delle crittografie del castello gonfiabile Android 9 ritira diversi algoritmi di crittografia dal provider Bouncy Castle a favore di quelli forniti dal provider Conscrypt. Le chiamate a getInstance() che richiedono il fornitore Bouncy Castle generano errori NoSuchAlgorithmException. 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'elemento READ_PHONE_STATE e poi usa il nuovo metodo Build.getSerial() aggiunto in Android 9.
Condivisione non consentita della directory dei dati di WebView 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 nell'account android.webkit pacchetto, l'app avrà un arresto 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 su ogni app privata dei dati dell'app. L'accesso diretto alla directory dei dati di un'altra app in base al percorso è non è più consentito. Le app possono continuare a condividere dati utilizzando meccanismi IPC, ad esempio passando FD.

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

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