Quando carichi un APK, questo deve soddisfare i requisiti relativi al livello API target di Google Play.
A partire dal 31 agosto 2024:
- Le nuove app e gli aggiornamenti delle app devono avere come target Android 14 (livello API 34) o versioni successive per essere inviati a Google Play, ad eccezione delle app per Wear OS e Android TV, che devono avere come target Android 13 (livello API 33) o versioni successive.
- Le app esistenti devono avere come target Android 13 (livello API 33) o versioni successive per rimanere disponibili per i nuovi utenti su dispositivi con sistema operativo Android superiore al livello API target della tua app. Le app che hanno come target Android 12 (livello API 31) o versioni precedenti (Android 10 (livello API 29) o versioni precedenti per Wear OS e Android 11 (livello API 30) o versioni precedenti per Android TV) saranno disponibili solo sui dispositivi con sistema operativo Android pari o precedente al livello API target della tua app.
Se hai bisogno di più tempo per aggiornare l'app, potrai richiedere un'estensione fino al 1° novembre 2024. Entro la fine dell'anno, potrai accedere ai moduli di estensione per la tua app in Play Console.
Le eccezioni a questi requisiti includono:
- App sempre private riservate agli utenti di un'organizzazione specifica e destinate esclusivamente alla distribuzione interna.
- App che hanno come target Android Automotive OS o che sono incluse in APK che hanno come target Android Automotive OS.
Perché scegliere come target gli SDK più recenti?
Ogni nuova versione di Android introduce modifiche che apportano miglioramenti alla sicurezza e alle prestazioni, oltre a migliorare l'esperienza utente con Android. Alcune di queste modifiche si applicano solo alle app che dichiarano esplicitamente il supporto tramite l'attributo manifest targetSdkVersion
(noto anche come livello API target).
Se configuri l'app in modo che abbia come target un livello API recente, ti assicuri che gli utenti possano beneficiare di questi miglioramenti, mentre la tua app può comunque essere eseguita su versioni precedenti di Android. Scegliere come target un livello API recente consente inoltre alla tua app di sfruttare le funzionalità più recenti della piattaforma per deliziare gli utenti. Inoltre, a partire da Android 10 (livello API 29), gli utenti visualizzano un avviso quando avviano un'app per la prima volta se l'app ha come target Android 5.1 (livello API 22) o versioni precedenti.
Questo documento mette in evidenza i punti importanti da conoscere per aggiornare il livello API target in modo da soddisfare il requisito di Google Play. Consulta le istruzioni nelle sezioni seguenti, a seconda della versione a cui esegui la migrazione.
Esegui la migrazione da Android 12 e versioni successive (livello API 31) a una versione più recente
Per aggiornare l'app in modo che abbia come target una versione più recente di Android, segui l'elenco delle modifiche di comportamento pertinenti:
Esegui la migrazione da Android 11 (livello API 30) ad Android 12 (livello API 31)
Sicurezza e autorizzazioni
- Bluetooth: devi sostituire le dichiarazioni per le autorizzazioni
BLUETOOTH
eBLUETOOTH_ADMIN
con le autorizzazioniBLUETOOTH_SCAN
,BLUETOOTH_ADVERTISE
oBLUETOOTH_CONNECT
. Non è più necessario effettuare richieste diLOCATION
autorizzazioni di runtime per le operazioni Bluetooth. - Posizione: gli utenti possono richiedere alle app di recuperare solo informazioni sulla posizione approssimative. Devi richiedere l'autorizzazione
ACCESS_COARSE_LOCATION
ogni volta che richiediACCESS_FINE_LOCATION
.- Filtri per intent: se la tua app contiene attività, servizi o broadcast receiver che utilizzano filtri per intent, devi dichiarare esplicitamente l'attributo android:exported per questi componenti.
- Sospensione: le app possono essere messe in modalità di sospensione se non vengono utilizzate per un determinato periodo di tempo. In modalità di ibernazione, le autorizzazioni di runtime e la cache dell'app vengono reimpostate e non puoi eseguire job o avvisi. Puoi controllare lo stato della modalità di ibernazione della tua app.
- Mutabilità dei PendingIntent: devi specificare la mutabilità di ogni oggetto PendingIntent creato dalla tua app.
Esperienza utente
- Notifiche personalizzate: le notifiche con visualizzazioni dei contenuti personalizzate non utilizzeranno più l'area di notifica completa; al loro posto, il sistema applicherà un modello standard. Questo modello garantisce che le notifiche personalizzate abbiano la stessa decorazione delle altre notifiche in tutti gli stati. Questo comportamento è
quasi identico a quello di
Notification.DecoratedCustomViewStyle
. - Modifiche alla verifica dei link per app Android: quando utilizzi la verifica dei link per app Android, assicurati che i filtri intent includano la categoria BROWSABLE e supportino lo schema HTTPS.
Prestazioni
Limitazioni di avvio dei servizi in primo piano: per avere come target Android 12 o versioni successive, la tua app non può avviare servizi in primo piano durante l'esecuzione in background, ad eccezione di alcuni casi speciali. Se un'app tenta di avviare un servizio in primo piano mentre è in esecuzione in background, si verifica un'eccezione (tranne che per alcuni casi speciali).
Valuta la possibilità di utilizzare WorkManager per pianificare e avviare il lavoro accelerato mentre la tua app è in esecuzione in background. Per completare le azioni urgenti richieste dall'utente, avvia i servizi in primo piano entro un'ora esatta.
Limitazioni relative al trampolino di notifiche: quando gli utenti toccano le notifiche, alcune app rispondono avviando un componente dell'app che avvia l'attività che l'utente vede e con cui interagisce. Questo componente dell'app è noto come trampolino di notifica.
Le app non devono avviare attività da servizi o ricevitori di trasmissione utilizzati come trampolini di notifiche. Dopo che un utente tocca una notifica o un pulsante di azione al suo interno, l'app non può chiamare
startActivity()
all'interno di un servizio o di un'entità di ricezione di trasmissione.
Visualizza l'insieme completo di modifiche che interessano le app che hanno come target Android 12 (livello API 31).
Eseguire la migrazione da una versione precedente ad Android 11 (livello API 30)
Seleziona la versione di Android da cui eseguirai la migrazione:
Eseguire la migrazione ad Android 5 (livello API 21)
Consulta la rispettiva pagina Modifiche al comportamento per ciascuna delle seguenti release per assicurarti che la tua app abbia tenuto conto delle modifiche introdotte in queste release:
Continua seguendo le istruzioni riportate nella sezione successiva.
Eseguire la migrazione ad Android 6 (livello API 23)
Le seguenti considerazioni si applicano alle app che hanno come target Android 6.0 e versioni successive della piattaforma:
-
-
Le autorizzazioni pericolose vengono concesse solo in fase di esecuzione. I flussi dell'interfaccia utente devono fornire elementi che consentano di concedere queste autorizzazioni.
-
Ove possibile, assicurati che la tua app sia pronta a gestire il rifiuto delle richieste di autorizzazione. Ad esempio, se un utente rifiuta una richiesta di accesso al GPS del dispositivo, assicurati che la tua app abbia un altro modo per procedere.
-
Per un elenco esaustivo delle modifiche introdotte in Android 6.0 (livello API 23), consulta la pagina Modifiche al comportamento per la versione della piattaforma in questione.
Continua seguendo le istruzioni riportate nella sezione successiva.
Eseguire la migrazione ad Android 7 (livello API 24)
Le seguenti considerazioni si applicano alle app destinate ad Android 7.0 e alle versioni successive della piattaforma:
-
Sospensione e Standby delle app
Progetta in base ai comportamenti descritti in Ottimizzazione per sospensione e standby delle app, che include le modifiche incrementali introdotte in diverse release della piattaforma.
Quando un dispositivo è in modalità Sospensione e Standby app, il sistema si comporta nel seguente modo:
- Limita l'accesso alla rete
- Ritarda sveglie, sincronizzazioni e job
- Limita le ricerche GPS e Wi-Fi
- Limita i messaggi di Firebase Cloud Messaging con priorità normale.
-
Modifiche alle autorizzazioni
- Il sistema limita l'accesso alle directory private delle app.
-
L'esposizione di un URI
file://
al di fuori dell'app attiva unFileUriExposedException
. Se devi condividere file all'esterno della tua app, implementaFileProvider
-
Il sistema vieta il collegamento alle librerie non NDK.
Per un elenco esaustivo delle modifiche introdotte in Android 7.0 (livello API 24), consulta la pagina Modifiche al comportamento per la versione della piattaforma in questione.
Continua seguendo le istruzioni riportate nella sezione successiva.
Eseguire la migrazione ad Android 8 (livello API 26)
Le seguenti considerazioni si applicano alle app che hanno come target Android 8.0 e versioni successive della piattaforma:
-
Limiti di esecuzione in background
-
Il sistema limita i servizi per le app non in esecuzione in primo piano.
-
startService()
ora genera un'eccezione quando un'app tenta di invocarlo mentrestartService()
è vietato. -
Per avviare i servizi in primo piano, un'app deve utilizzare
startForeground()
estartForegroundService()
. - Esamina attentamente le modifiche apportate all'API JobScheduler, come documentato nella pagina Modifiche al comportamento di Android 8.0 (livello API 26).
- Firebase Cloud Messaging richiede la versione 10.2.1 dell' SDK Google Play Services o versioni successive.
- Quando utilizzi Firebase Cloud Messaging, l'invio dei messaggi è soggetto a limiti di esecuzione in background. Quando è necessario un lavoro in background alla ricezione del messaggio, ad esempio per eseguire la sincronizzazione dei dati in background, l'app deve pianificare i job utilizzando Firebase Job Dispatcher o JobIntentService. Per saperne di più, consulta la documentazione di Firebase Cloud Messaging.
-
-
Trasmissioni implicite
-
Le trasmissioni implicite sono limitate. Per informazioni sulla gestione degli eventi in background, consulta la documentazione dell'API
JobScheduler
.
-
Le trasmissioni implicite sono limitate. Per informazioni sulla gestione degli eventi in background, consulta la documentazione dell'API
-
Limiti di accesso alla posizione in background
-
Le app in esecuzione in background hanno accesso limitato ai dati sulla posizione.
- Sui dispositivi con Google Play Services, utilizza il provider di posizione combinato per ricevere aggiornamenti periodici sulla posizione.
-
Le app in esecuzione in background hanno accesso limitato ai dati sulla posizione.
-
Il sistema limita i servizi per le app non in esecuzione in primo piano.
-
Canali di notifica
- Devi definire le proprietà di interruzione delle notifiche in base al canale.
- Per visualizzare le notifiche, devi assegnarle a un canale.
-
Questa versione della piattaforma supporta
NotificationCompat.Builder
.
-
Privacy
- ANDROID_ID ha ambito per chiave di firma dell'app.
Per un elenco esaustivo delle modifiche introdotte in Android 8.0 (livello API 26), consulta la pagina Modifiche al comportamento per la versione della piattaforma in questione.
Esegui la migrazione da Android 8 (API 26) ad Android 9 (API 28)
-
Gestione alimentazione
- I bucket App Standby introducono nuove limitazioni in background in base al coinvolgimento con le app, come job differiti, allarmi e quote per i messaggi ad alta priorità
- Miglioramenti al Risparmio energetico: sono state aumentate le limitazioni per le app in modalità standby
-
Autorizzazione per i servizi in primo piano
- Devi richiedere l'autorizzazione normale
FOREGROUND_SERVICE
(non l'autorizzazione di runtime)
- Devi richiedere l'autorizzazione normale
-
Modifiche alla privacy
- Accesso limitato ai sensori in background
- Accesso limitato ai registri chiamate, ora nel gruppo di autorizzazioni
CALL_LOG
- Accesso limitato ai numeri di telefono, che richiede
l'autorizzazione
READ_CALL_LOG
- Accesso limitato alle informazioni sul Wi-Fi
Per un elenco esaustivo delle modifiche introdotte in Android 9.0 (livello API 28), consulta le modifiche al comportamento.
Esegui la migrazione da Android 9 (livello API 28) ad Android 10 (livello API 29)
-
Notifiche
con un intent a schermo intero
-
Devi richiedere l'autorizzazione normale
USE_FULL_SCREEN_INTENT
(non l'autorizzazione di runtime).
-
Devi richiedere l'autorizzazione normale
-
Supporto per dispositivi pieghevoli e con schermi di grandi dimensioni
-
Ora è possibile avere più attività nello stato "Riprendi" contemporaneamente, ma solo una è attiva.
-
Questa modifica interessa il comportamento di
onResume()
eonPause()
. -
Nuovo concetto di ciclo di vita "ripreso più in alto" che può essere rilevato
sottoscrivendo
onTopResumedActivityChanged()
.- Solo un'attività può essere "ripristinata in primo piano".
-
Questa modifica interessa il comportamento di
-
Quando
resizeableActivity
è impostato sufalse
, le app possono specificare anche un valore diminAspectRatio
che inserisce automaticamente una barra nera nell'app con proporzioni più strette.
-
Ora è possibile avere più attività nello stato "Riprendi" contemporaneamente, ma solo una è attiva.
-
Modifiche alla privacy
-
Spazio di archiviazione basato sugli ambiti
- L'accesso allo spazio di archiviazione esterno è limitato solo a una directory specifica dell'app e a tipi specifici di contenuti multimediali creati dall'app.
-
Accesso alla posizione limitato quando l'app è in background,
che richiede
l'autorizzazione
ACCESS_BACKGROUND_LOCATION
. - Accesso limitato a identificatori non reimpostabili come IMEI e numero di serie.
-
Accesso limitato alle informazioni sull'attività fisica, ad esempio il numero di passi dell'utente, che richiede l'autorizzazione
ACTIVITY_RECOGNITION
. -
Accesso limitato a
alcune
API di telefonia, Bluetooth e Wi-Fi, che richiedono
l'autorizzazione
ACCESS_FINE_LOCATION
. -
Accesso limitato alle impostazioni Wi-Fi
- Le app non possono più attivare o disattivare direttamente il Wi-Fi e devono farlo utilizzando i pannelli di impostazioni.
-
Limitazioni all'avvio di una connessione a una rete Wi-Fi,
che richiedono l'uso di
WifiNetworkSpecifier
oppureWifiNetworkSuggestion
.
-
Spazio di archiviazione basato sugli ambiti
Esegui la migrazione da Android 10 (livello API 29) ad Android 11 (livello API 30)
-
Privacy
- Applicazione dello spazio di archiviazione delimitato : le app devono adottare il modello di spazio di archiviazione delimitato in cui i tipi di file specifici dell'app, multimediali e di altro tipo vengono salvati e a cui si accede utilizzando posizioni dedicate.
- Reimpostazione automatica delle autorizzazioni: se gli utenti non interagiscono con un'app per alcuni mesi, il sistema reimposta automaticamente le autorizzazioni sensibili dell'app. Ciò non dovrebbe influire sulla maggior parte delle app. Se la tua app funziona principalmente in background senza interazioni degli utenti, potresti chiedere agli utenti di disattivare il ripristino automatico.
- Accesso alla posizione in background: le app devono richiedere separatamente l'autorizzazione di accesso alla posizione in primo piano e in background. La concessione dell'accesso all'autorizzazione di accesso alla posizione in background può essere eseguita solo nelle impostazioni dell'app anziché nelle finestre di dialogo di autorizzazione di runtime.
-
Visibilità pacchetti: quando un'app esegue query sull'elenco di app e servizi installati sul dispositivo, l'elenco restituito viene filtrato.
- Se utilizzi i servizi di Trascrizione vocale o Riconoscimento vocale, dovrai aggiungere elementi di query per i servizi al file manifest.
-
Sicurezza
- I file "resource.arsc" compressi non sono più supportati
- Ora è obbligatorio lo schema di firma dell'APK v2. Per motivi di compatibilità con le versioni precedenti, gli sviluppatori devono continuare a firmare anche con lo schema di firma dell'APK v1.
- Limitazione relativa all'interfaccia non SDK. L'utilizzo di interfacce non SDK non è consigliato per le app destinate al livello API 30, poiché alcune di queste interfacce non SDK sono ora bloccate. Consulta Interfacce non SDK ora bloccate in Android 11 per un elenco completo delle interfacce non SDK bloccate.
Per un elenco esaustivo delle modifiche introdotte in Android 11 (livello API 30), consulta la pagina Modifiche al comportamento.
Per continuare l'aggiornamento all'API 31, segui le istruzioni riportate nella sezione precedente.
Modernizza le tue app
Quando aggiorni il livello API target per le tue app, ti consigliamo di adottare le funzionalità della piattaforma più recenti per modernizzare le app e soddisfare gli utenti.
- Valuta la possibilità di utilizzare CameraX, in versione beta, per sfruttare al meglio la fotocamera.
- Utilizza i componenti Jetpack per seguire le best practice, non dover scrivere codice boilerplate e semplificare le attività complesse in modo da concentrarti sul codice che ti interessa.
- Utilizza Kotlin per scrivere app migliori più velocemente e con meno codice.
- Assicurati di rispettare i requisiti e le best practice relativi alla privacy.
- Aggiungi il supporto del tema scuro alle tue app.
- Aggiungi il supporto della navigazione con gesti alle tue app.
- Esegui la migrazione della tua app da Google Cloud Messaging (GCM) alla versione più recente di Firebase Cloud Messaging.
- Sfrutta la gestione avanzata delle finestre.
- Supporta proporzioni più grandi (più di 16:9) per sfruttare i recenti progressi dell'hardware. Assicurati che l'app venga ridimensionata in modo da riempire lo spazio sullo schermo disponibile. Dichiara un formato massimo solo come ultima alternativa. Per ulteriori informazioni sulle proporzioni massime, consulta Dichiarare il supporto di schermi con limitazioni.
- Aggiungi il supporto multi-finestra per aiutare la tua app ad aumentare la produttività e gestire più display.
- Se un'esperienza utente ottimale con l'app ridotta a icona migliorerebbe l'esperienza utente,
aggiungi il supporto per la funzionalità Picture in picture.
- Ottimizza per i dispositivi con il ritagliatore del display.
- Non dare per scontata l'altezza della barra di stato. Utilizza invece
WindowInsets
eView.OnApplyWindowInsetsListener
. Per saperne di più, guarda il video del droidcon NYC 2017 per una spiegazione. - Non dare per scontato che l'app abbia l'intera finestra. Conferma la sua posizione utilizzando
View.getLocationInWindow()
, nonView.getLocationOnScreen()
. * Quando gestisciMotionEvent
, utilizzaMotionEvent.getX()
eMotionEvent.getY()
, nonMotionEvent.getRawX()
,MotionEvent.getRawY()
.
Controllare e aggiornare gli SDK e le librerie
Assicurati che le dipendenze dell'SDK di terze parti supportino l'API 31: alcuni fornitori di SDK la pubblicano nel proprio manifest, mentre altri richiederanno ulteriori indagini. Se utilizzi un SDK che non supporta l'API 31, collabora con il fornitore dell'SDK per risolvere il problema.
Inoltre, tieni presente che il targetSdkVersion
della tua app o del tuo gioco potrebbe limitare
l'accesso alle librerie della piattaforma Android private. Per maggiori dettagli, consulta Collegamenti delle app NDK alle librerie della piattaforma.
Devi anche verificare eventuali limitazioni presenti nella versione della libreria di supporto Android in uso. Come sempre, devi assicurarti della compatibilità tra la versione principale della libreria di assistenza Android e compileSdkVersion
della tua app.
Ti consigliamo di scegliere un valore targetSdkVersion
minore o uguale alla versione principale della libreria di assistenza. Ti invitiamo a eseguire l'aggiornamento a una libreria di supporto compatibile recente per usufruire delle funzionalità di compatibilità e delle correzioni di bug più recenti.
Testare l'app
Dopo aver aggiornato il livello API e le funzionalità dell'app, se necessario, devi eseguire il test di alcuni casi d'uso di base. I seguenti suggerimenti non sono esaustivi, ma hanno lo scopo di guidarti nella procedura di test. Ti consigliamo di testare:
- La tua app viene compilata per l'API 29 senza errori o avvisi.
La tua app deve avere una strategia per i casi in cui l'utente rifiuta le richieste di autorizzazione e deve richiedere all'utente le autorizzazioni. Per farlo:
- Vai alla schermata Informazioni app dell'app e disattiva ogni autorizzazione.
- Apri l'app e assicurati che non si verifichino arresti anomali.
- Esegui i test dei casi d'uso principali e assicurati che le autorizzazioni richieste vengano nuovamente richieste.
Gestisce Doze con risultati previsti e senza errori.
- Utilizzando adb, inserisci il dispositivo di test in modalità Sospensione mentre l'app è in esecuzione.
- Testa tutti i casi d'uso che attivano i messaggi di Firebase Cloud Messaging.
- Testa tutti i casi d'uso che utilizzano Avvisi o Job.
- Elimina eventuali dipendenze dai servizi in background.
- Impostare l'app in modalità App in attesa
- Testa tutti i casi d'uso che attivano i messaggi di Firebase Cloud Messaging.
- Testa tutti i casi d'uso che utilizzano le sveglie.
- Utilizzando adb, inserisci il dispositivo di test in modalità Sospensione mentre l'app è in esecuzione.
Gestisce le nuove foto / i nuovi video acquisiti
- Verifica che l'app gestisca correttamente le trasmissioni
ACTION_NEW_PICTURE
eACTION_NEW_VIDEO
con limitazioni (ovvero spostate nei job JobScheduler). - Assicurati che tutti i casi d'uso critici che dipendono da questi eventi funzionino ancora.
- Verifica che l'app gestisca correttamente le trasmissioni
Gestisce la condivisione di file con altre app - Testa qualsiasi caso d'uso che condivida i dati dei file con qualsiasi altra app (anche un'altra app dello stesso sviluppatore)
- Verifica che i contenuti siano visibili nell'altra app e che non vengano attivati i crash.
Ulteriori informazioni
Attiva le email in Google Play Console per consentirci di inviarti aggiornamenti e annunci importanti di Android e Google Play, inclusa la nostra newsletter mensile per i partner.