Modifiche del comportamento: tutte le app

La piattaforma Android 11 include modifiche del comportamento che potrebbero influire sulla tua app. Le seguenti modifiche del 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 del 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: consente agli utenti di concedere più accessi temporanei alle autorizzazioni di accesso a posizione, microfono e fotocamera.
  • Visibilità della finestra di dialogo delle autorizzazioni: rifiuti ripetuti di un'autorizzazione implicano "Non chiedermelo più".
  • Controllo dell'accesso ai dati: ottieni insight su dove la tua app accede ai dati privati, sia nel codice dell'app che nel codice delle librerie dipendenti.
  • Autorizzazioni per la finestra di avviso di sistema:ad alcune 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 rimandano 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 e 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 ulteriori informazioni, visita 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 geolocalizzazione del dispositivo. Questa è un'eccezione solo per il sistema Notifiche di esposizione, poiché è stato progettato in modo tale che le app che lo utilizzano non possano dedurre la posizione del dispositivo tramite la scansione Bluetooth.

Per proteggere la privacy dell'utente, tutte le altre app non possono comunque eseguire la scansione del Bluetooth, a meno che la geolocalizzazione del dispositivo non sia attiva e l'utente non abbia concesso l'autorizzazione di accesso alla posizione. Per saperne di più, consulta il nostro post Aggiornamento sulle notifiche di esposizione.

Sicurezza

I socket SSL utilizzano il motore Conscrypt SSL per impostazione predefinita

L'implementazione predefinita di SSLSocket di Android si basa su Conscritta. Da Android 11, l'implementazione è basata internamente su SSLEngine di Conscrypt.

Allocatore protetto da Scudo

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

Statistiche sull'utilizzo dell'app

Per proteggere meglio gli utenti, Android 11 archivia le statistiche sull'utilizzo delle app di ogni utente in spazio di archiviazione criptato credenziale. Pertanto, né il sistema né le app possono accedere a questi dati, a meno che isUserUnlocked() restituisce true, evento che si verifica dopo che si verifica una delle seguenti condizioni:

  • L'utente sblocca il dispositivo per la prima volta dopo un 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 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 per Android. La nuova funzionalità è stata aggiunta nell'emulatore versione 30.0.22. La selezione dell'impostazione di rete 5G imposta TelephonyDisplayInfo su OVERRIDE_NETWORK_TYPE_NR_NSA, modifica la larghezza di banda stimata e consente di impostare la misurazione per verificare che la tua app risponda in modo appropriato ai cambiamenti dello stato NET_CAPABILITY_TEMPORARILY_NOT_METERED.

Prestazioni e debug

Debug dei limiti delle chiamate API JobScheduler

Android 11 offre 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 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.

Sanitizer del descrittore di file (fdsan)

Android 10 ha introdotto fdsan (sanitizzatore per descrittore di file). fdsan rileva un'errata gestione della proprietà del descrittore dei file, ad esempio use-after-close e double-close. La modalità predefinita per fdsan cambierà in Android 11. Ora fdsan si interrompe quando viene rilevato 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 all'interfaccia non SDK

Android 11 include elenchi aggiornati di interfacce non SDK limitate in base alla collaborazione con sviluppatori Android e agli ultimi test interni. Se 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 riguardarti 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, sappiamo 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 gli aggiornamenti alle limitazioni relative all'interfaccia non SDK in Android 11. Per scoprire di più sulle interfacce non SDK in generale, consulta Restrizioni relative alle interfacce non SDK.

Libreria condivisa di Maps v1 rimossa

La versione 1 della libreria condivisa di Maps è stata rimossa completamente in Android 11. Questa libreria è stata deprecata in precedenza e ha smesso di funzionare per le app in Android 10. Le app che in precedenza utilizzavano questa libreria condivisa per i dispositivi con Android 9 (livello API 28) o versioni precedenti devono utilizzare invece Maps SDK per Android.

Interazione con altre app

Condividi URI contenuti

Se la tua app condivide un URI dei contenuti 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 dei contenuti. L'app deve includere i flag di intent anche se l'URI dei contenuti è associato a un fornitore di contenuti che non è di proprietà dell'app.

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

Caricamento della libreria in corso...

Caricamento della libreria comune di T.I. con percorso assoluto in corso...

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 il nome della libreria come nome del file, ad esempio dlopen("libicuuc.so", ...).