Modifiche al comportamento: tutte le app

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 la tua app e poi modificarla in base alle necessità per supportare correttamente questi comportamenti, 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 accesso alla posizione, al microfono e alla fotocamera.
  • Visibilità della finestra di dialogo delle autorizzazioni: i rifiuti ripetuti di un'autorizzazione implicano "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 per la 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 delle 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 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 non vengano ripristinati i dati di fabbrica del dispositivo.

Per scoprire di più, consulta la pagina Privacy.

Notifiche di esposizione

Android 11 aggiorna la piattaforma tenendo conto del sistema Notifiche di esposizione. Ora gli utenti possono eseguire le app di 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, 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 dell'utente, 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. 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 predefinita di SSLSocket di Android si basa su Conscrypt. A partire da Android 11, l'implementazione è basata internamente su SSLEngine di Conscrypt.

Scudo Hardened Allocator

Android 11 utilizza internamente Scudo Hardened Allocator per gestire le allocazioni heap. Scudo è in grado di rilevare e mitigare alcuni tipi di violazioni della sicurezza della memoria. Se riscontri arresti anomali relativi a Scudo (ad esempio Scudo ERROR:) nei report sugli arresti anomali nativi, consulta la documentazione relativa alla risoluzione dei problemi di Scudo.

Statistiche sull'utilizzo dell'app

Per proteggere meglio gli utenti, Android 11 memorizza le statistiche di utilizzo delle app di ogni utente nello spazio di archiviazione criptato con credenziali. Pertanto, né il sistema né le app possono accedere ai dati, a meno che isUserUnlocked() non restituisca true, il che avviene dopo che si verifica 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 è già associata 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 nulli 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 SDK Android. La nuova funzionalità è stata aggiunta nella versione 30.0.22 dell'emulatore. Se selezioni 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 l'app risponda in modo appropriato alle modifiche dello stato di 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 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 da non influire sui casi d'uso legittimi.

File descriptor sanitizer (fdsan)

Android 10 ha introdotto fdsan (sanitizer del descrittore del file). fdsan rileva la gestione errata della proprietà del descrittore del file, ad esempio use-after-close e double-close. La modalità predefinita per fdsan sta cambiando in Android 11. fdsan ora si interrompe quando rileva un errore; il comportamento precedente era registrare un avviso e continuare. Se si verificano 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 sugli ultimi test interni. Quando 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, 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à della tua app, devi richiedere una nuova API pubblica.

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

Libreria condivisa Maps v1 rimossa

La versione 1 della libreria 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

Condividi gli URI dei contenuti

Se la tua app condivide un URI contenuto con un'altra app, l'intent deve concedere le autorizzazioni di accesso all'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 contenuto. La tua app deve includere i flag di intent anche quando l'URI contenuto è associato a un provider di contenuti che non è di proprietà della tua app.

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

Caricamento della raccolta in corso…

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 file, ad esempio dlopen("libicuuc.so", ...).