Modifiche al comportamento: tutte le app

La piattaforma Android 11 include modifiche al comportamento che potrebbero influire sulla tua app. Le seguenti modifiche al comportamento si applicano a tutte le app quando vengono eseguite su Android 11, indipendentemente da targetSdkVersion. Devi testare la tua app e poi modificarla in base alle esigenze per supportare correttamente questi elementi, 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 restrizioni 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 posizione, microfono e fotocamera.
  • Visibilità della finestra di dialogo delle autorizzazioni: i ripetuti rifiuti di un'autorizzazione implicano "Non chiedere 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 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'azione di intent ACTION_MANAGE_OVERLAY_PERMISSION portano sempre gli utenti a una schermata nelle impostazioni di sistema.
  • Identificatori SIM permanenti: su Android 11 e versioni successive, l'accesso agli ICCID non ripristinabili tramite il metodo getIccId() è limitato. Il metodo restituisce una stringa vuota non nulla. Per identificare in modo univoco una SIM installata sul dispositivo, utilizza invece il metodo getSubscriptionId(). 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 il dispositivo non venga ripristinato ai dati di fabbrica.

Per saperne di più, consulta la pagina Privacy.

Notifiche di esposizione

Android 11 aggiorna la piattaforma tenendo presente il sistema Notifiche di esposizione. Ora gli utenti possono eseguire app Notifiche di esposizione su Android 11 senza dover attivare l'impostazione di posizione del dispositivo. Si tratta di un'eccezione solo per il sistema Notifiche di esposizione, dato che è 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, tutte le altre app hanno ancora il divieto di eseguire la scansione Bluetooth, a meno che l'impostazione della posizione del dispositivo non sia attiva e l'utente non abbia concesso l'autorizzazione alla posizione. Per saperne di più, leggi il nostro post Aggiornamento sulle Notifiche di esposizione.

Sicurezza

I socket SSL utilizzano il motore SSL Conscrypt per impostazione predefinita

L'implementazione SSLSocket predefinita di Android si basa su Conscrypt. A partire da Android 11, questa implementazione è basata internamente su SSLEngine di Conscrypt.

Scudo Hardened Allocator

Android 11 utilizza internamente 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 nei report sugli arresti anomali nativi visualizzi arresti anomali correlati a Scudo (ad esempio Scudo ERROR:), consulta la documentazione relativa alla risoluzione dei problemi di Scudo.

Statistiche sull'utilizzo delle app

Per proteggere meglio gli utenti, Android 11 memorizza le statistiche sull'utilizzo delle app di ogni utente in uno spazio di archiviazione criptato con le 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 uno dei seguenti eventi:

  • 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 esegue già il binding a un'istanza di UsageStatsManager, verifica di chiamare i metodi su questo oggetto dopo che l'utente ha sbloccato il dispositivo. In caso contrario, l'API ora restituisce valori null o vuoti.

Supporto dell'emulatore per il 5G

Android 11 aggiunge le 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 SDK Android. La nuova funzionalità è stata aggiunta nella versione 30.0.22 dell'emulatore. Selezionando l'impostazione della rete 5G, TelephonyDisplayInfo viene impostato su OVERRIDE_NETWORK_TYPE_NR_NSA, la larghezza di banda stimata viene modificata e puoi impostare la misurazione per verificare che la tua app risponda in modo appropriato alle modifiche dello stato di NET_CAPABILITY_TEMPORARILY_NOT_METERED.

Rendimento e debug

Debug dei limiti delle chiamate API JobScheduler

Android 11 offre il supporto per il debug delle app per identificare potenziali invocazioni 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 oltre i limiti di frequenza restituiranno RESULT_FAILURE. I limiti sono impostati in modo che i casi d'uso legittimi non siano interessati.

Sanitizer del descrittore del file (fdsan)

Android 10 ha introdotto fdsan (sanitizer del descrittore del file). fdsan rileva la gestione errata della proprietà del descrittore di file, ad esempio use-after-close e double-close. La modalità predefinita per fdsan cambierà in Android 11. fdsan ora viene interrotto al rilevamento di un errore; il comportamento precedente era di registrare un avviso e continuare. Se visualizzi arresti anomali dovuti a fdsan nella tua applicazione, consulta la fdsan documentation.

Limitazioni relative alle interfacce non SDK

Android 11 include elenchi aggiornati di interfacce non SDK con limitazioni basati sulla collaborazione con gli sviluppatori Android e sui test interni più recenti. Ove possibile, ci assicuriamo che siano disponibili alternative pubbliche prima di limitare le 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 interruzione dell'app.

Se non sai con certezza se la tua app utilizza interfacce non SDK, puoi testarla per scoprirlo. Se la tua app si basa su interfacce non SDK, devi iniziare a pianificare una migrazione ad alternative SDK. Tuttavia, ci rendiamo conto 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à della tua app, devi richiedere una nuova API pubblica.

Per saperne di più sulle modifiche apportate a questa release di Android, consulta Aggiornamenti alle limitazioni dell'interfaccia non SDK in Android 11. Per scoprire di più sulle interfacce non SDK in generale, consulta Limitazioni relative alle interfacce non SDK.

Libreria condivisa di Maps v1 rimossa

La versione 1 della raccolta condivisa di Maps è stata completamente rimossa in Android 11. Questa libreria è stata ritirata 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 invece l'SDK Maps per Android.

Interazione con altre app

Condividere gli URI dei contenuti

Se la tua app condivide un URI di contenuti con un'altra app, l'intent deve concedere autorizzazioni di accesso URI impostando almeno uno dei seguenti flag di 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 dei contenuti. La tua app deve includere i flag intent anche quando l'URI dei contenuti è associato a un fornitore di contenuti di cui la tua app non è proprietaria.

Se la tua app è proprietaria del content provider associato all'URI dei contenuti, verifica che il content provider non sia esportato. Consigliamo già questa best practice per la sicurezza.

Caricamento della raccolta

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

Per caricare la libreria, utilizza invece il nome della libreria come nome file, ad esempio dlopen("libicuuc.so", ...).