La piattaforma Android 11 include modifiche al comportamento che potrebbero interessare la tua app. Le seguenti modifiche al comportamento si applicano a tutte le app quando vengono eseguite su Android 11, indipendentemente da targetSdkVersion
. Devi
testare l'app e poi modificarla in base alle esigenze per supportarle correttamente, ove applicabile.
Assicurati di esaminare anche l'elenco delle modifiche al comportamento che interessano solo le app che hanno come target Android 11.
Privacy
Android 11 introduce modifiche e limitazioni per migliorare la privacy degli utenti, tra cui:
- Autorizzazioni una tantum: offre agli utenti la possibilità di concedere un accesso più temporaneo alle autorizzazioni di accesso alla posizione, al microfono e alla fotocamera.
- Visibilità della finestra di dialogo delle autorizzazioni: il rifiuto ripetuto di un'autorizzazione implica "Non chiedermelo più".
- Controllo dell'accesso ai dati: ottieni informazioni su dove la tua app accede ai dati privati, sia nel codice dell'app sia nel codice delle librerie dipendenti.
- Autorizzazioni della finestra di avviso di sistema: a determinate classi di app viene concessa automaticamente l'autorizzazione
SYSTEM_ALERT_WINDOW
su richiesta. Inoltre, gli intent che includono l'ACTION_MANAGE_OVERLAY_PERMISSION
azione intent indirizzano sempre gli utenti a una schermata nelle impostazioni di sistema. - Identificatori SIM permanenti: su Android 11 e versioni successive, l'accesso agli ICCID non reimpostabili tramite il metodo
getIccId()
è limitato. Il metodo restituisce una stringa vuota non null. Per identificare univocamente una SIM installata sul dispositivo, utilizza invece il metodogetSubscriptionId()
. L'ID abbonamento fornisce un valore di indice (a partire da 1) per identificare in modo univoco le SIM installate, incluse quelle fisiche ed elettroniche. Il valore di questo identificatore è stabile per una determinata SIM, a meno che non vengano ripristinati i dati di fabbrica del dispositivo.
Per saperne di più, consulta la pagina Privacy.
Notifiche di esposizione
Android 11 aggiorna la piattaforma in base al sistema Notifiche di esposizione. Ora gli utenti possono eseguire le app Notifiche di esposizione su Android 11 senza dover attivare l'impostazione di geolocalizzazione del dispositivo. Si tratta di un'eccezione solo per il sistema Notifiche di esposizione, in quanto è stato progettato in modo che le app che lo utilizzano non possano dedurre la posizione del dispositivo tramite la scansione Bluetooth.
Per proteggere la privacy degli utenti, a tutte le altre app è ancora vietato eseguire la scansione Bluetooth, a meno che l'impostazione di geolocalizzazione del dispositivo non sia attiva e l'utente non abbia concesso l'autorizzazione di accesso alla posizione. Scopri di più nel nostro post Aggiornamento sulle Notifiche di esposizione.
Sicurezza
Per impostazione predefinita, le socket SSL utilizzano il motore SSL Conscrypt
L'implementazione predefinita di SSLSocket
di Android si basa su Conscrypt.
Da Android 11, l'implementazione è basata internamente su SSLEngine
di Conscrypt.
Scudo Hardened Allocator
Android 11 utilizza internamente lo Scudo Hardened Allocator per gestire le allocazioni dell'heap. Scudo è in grado di rilevare e mitigare
alcuni tipi di violazioni della sicurezza della memoria. Se noti arresti anomali correlati a Scudo
(ad esempio Scudo ERROR:
) nei report sugli arresti anomali nativi, consulta la
documentazione sulla risoluzione dei problemi di Scudo.
Statistiche sull'utilizzo dell'app
Per proteggere meglio gli utenti, Android 11 archivia le statistiche di utilizzo delle app di ciascun utente in uno spazio di archiviazione con crittografia delle credenziali. Pertanto,
né il sistema né le app possono accedere a questi dati, a meno che
isUserUnlocked()
non restituisca true
, il che si verifica dopo una delle seguenti operazioni:
- L'utente sblocca il dispositivo per la prima volta dopo l'avvio del sistema.
- L'utente passa al proprio account sul dispositivo.
Se la tua app è già associata a un'istanza di
UsageStatsManager
, verifica
di chiamare i metodi su questo oggetto dopo che l'utente ha sbloccato il proprio dispositivo.
In caso contrario, l'API ora restituisce valori null o vuoti.
Supporto dell'emulatore per il 5G
Android 11 aggiunge API 5G per consentire alle tue app di aggiungere funzionalità all'avanguardia. Per testare le funzionalità man mano che le aggiungi, puoi utilizzare le nuove funzionalità dell'emulatore Android SDK. La nuova funzionalità è stata aggiunta nella versione 30.0.22 dell'emulatore. La selezione dell'impostazione della rete 5G imposta TelephonyDisplayInfo
su OVERRIDE_NETWORK_TYPE_NR_NSA
, modifica la larghezza di banda stimata e ti consente di impostare la misurazione per verificare che la tua app risponda in modo appropriato alle modifiche dello stato NET_CAPABILITY_TEMPORARILY_NOT_METERED
.
Prestazioni e debug
Debug dei limiti delle chiamate API JobScheduler
Android 11 offre il supporto per il debug delle app per identificare potenziali chiamate dell'API JobScheduler
che hanno superato determinati limiti di frequenza.
Gli sviluppatori possono utilizzare questa funzionalità per identificare potenziali problemi di prestazioni. Per le app con l'attributo manifest debuggable
impostato su true, le chiamate API JobScheduler
che superano i limiti di frequenza restituiranno RESULT_FAILURE
.
Vengono impostati dei limiti in modo tale che i casi d'uso legittimi non vengano interessati.
Disinfettante dei descrittori dei file (fdsan)
Android 10 ha introdotto fdsan
(strumento di sanitizzazione dei descrittori dei file).
fdsan
rileva la gestione errata della proprietà del descrittore file, ad esempio uso dopo chiusura e chiusura doppia. La modalità predefinita per fdsan
sta cambiando in Android 11. fdsan
ora viene interrotto al rilevamento di un errore.
Il comportamento precedente era registrare un avviso e continuare. Se visualizzi arresti anomali
a causa di fdsan
nella tua applicazione, consulta
fdsan documentation
.
Limitazioni relative alle interfacce non SDK
Android 11 include elenchi aggiornati di interfacce non SDK limitate in base alla collaborazione con sviluppatori Android e agli ultimi test interni. Ove possibile, ci assicuriamo che siano disponibili alternative pubbliche prima di applicare limitazioni alle interfacce non SDK.
Se la tua app non ha come target Android 11, alcune di queste modifiche potrebbero non interessarti immediatamente. Tuttavia, anche se al momento puoi utilizzare alcune interfacce non SDK (a seconda del livello API target della tua app), l'utilizzo di qualsiasi metodo o campo non SDK comporta sempre un rischio elevato di danneggiare la tua app.
Se non hai la certezza che la tua app utilizzi interfacce non SDK, puoi testarla per scoprirlo. Se la tua app si basa su interfacce non SDK, dovresti iniziare a pianificare una migrazione a alternative SDK. Tuttavia, siamo consapevoli che alcune app hanno casi d'uso validi per l'utilizzo di interfacce non SDK. Se non riesci a trovare un'alternativa all'utilizzo di un'interfaccia non SDK per una funzionalità nella tua app, devi richiedere una nuova API pubblica.
Per scoprire di più sulle modifiche in questa release di Android, consulta Aggiornamenti alle limitazioni delle interfacce non SDK in Android 11. Per saperne di più sulle interfacce non SDK in generale, consulta Limitazioni relative alle interfacce non SDK.
Libreria condivisa di Maps versione 1 rimossa
La versione 1 della raccolta condivisa di Maps è stata completamente rimossa in Android 11. Questa libreria è stata ritirata in precedenza e ha smesso di funzionare per le app in Android 10. Le app che in precedenza si basavano su questa libreria condivisa per i dispositivi con Android 9 (livello API 28) o versioni precedenti devono utilizzare Maps SDK for Android.
Interazione con altre app
Condividere gli URI dei contenuti
Se la tua app condivide un URI dei contenuti con un'altra app, l'intent deve concedere autorizzazioni di accesso URI impostando almeno uno dei seguenti flag intent:
FLAG_GRANT_READ_URI_PERMISSION
e
FLAG_GRANT_WRITE_URI_PERMISSION
.
In questo modo, se l'altra app ha come target Android 11, può comunque accedere all'URI
contenuto. L'app deve includere gli indicatori di intent anche quando l'URI dei contenuti è associato a un fornitore di contenuti non di proprietà dell'app.
Se la tua app è proprietaria del provider di contenuti associato all'URI dei contenuti, verifica che il provider di contenuti non sia esportato. Consigliamo già questa best practice per la sicurezza.
Caricamento della libreria
Caricamento della libreria comune ICU con percorso assoluto
Le app che hanno come target l'API 28 e versioni precedenti non possono utilizzare dlopen(3)
per caricare libicuuc
con il percorso assoluto "/system/lib/libicuuc.so". Per queste app,
dlopen("/system/lib/libicuuc.so", ...)
restituirà un handle null.
Per caricare la libreria, utilizza il nome della libreria come nome del file, ad esempio dlopen("libicuuc.so", ...)
.