Come le release precedenti, Android 11 include modifiche del comportamento che potrebbero interessare la tua app. Le seguenti modifiche del comportamento si applicano esclusivamente alle app che hanno come target Android 11 o versioni successive. Se la tua app imposta targetSdkVersion
su 30
, devi modificarla in modo da supportare correttamente questi comportamenti, se applicabili.
Assicurati di esaminare anche l'elenco delle modifiche al comportamento che interessano tutte le app in esecuzione su Android 11.
Privacy
Android 11 introduce modifiche e limitazioni per migliorare la privacy degli utenti, tra cui:
- Applicazione dell'archiviazione basata sugli ambiti: l'accesso alle directory di archiviazione esterna è limitato a una directory specifica dell'app e a tipi specifici di contenuti multimediali creati dall'app.
- Reimpostazione automatica delle autorizzazioni: se gli utenti non interagiscono con un'app per alcuni mesi, il sistema reimposta automaticamente le autorizzazioni sensibili dell'app.
- Accesso alla posizione in background: gli utenti devono essere indirizzati alle impostazioni di sistema per concedere alle app l'autorizzazione di accesso alla posizione in background.
- Visibilità dei pacchetti: quando un'app richiede l'elenco delle app installate sul dispositivo, l'elenco restituito viene filtrato.
Per saperne di più, visita la pagina Privacy.
Sicurezza
Tagging dei puntatori dell'heap
Modifica dettagli
Cambia nome: NATIVE_HEAP_POINTER_TAGGING
ID modifica: 135754954
Come attivare/disattivare
Mentre testi la compatibilità della tua app con Android 11, puoi attivare o disattivare questa modifica utilizzando i seguenti comandi ADB:
adb shell am compat enable (135754954|NATIVE_HEAP_POINTER_TAGGING) PACKAGE_NAME
adb shell am compat disable (135754954|NATIVE_HEAP_POINTER_TAGGING) PACKAGE_NAME
Per ulteriori informazioni sul framework di compatibilità e sulle modifiche di attivazione/disattivazione, consulta Testare e eseguire il debug delle modifiche al comportamento della piattaforma nella tua app.
I puntatori dell'heap ora hanno un tag diverso da zero nel byte più significativo (MSB). Le applicazioni che utilizzano in modo errato gli indicatori, incluse quelle che modificano il MSB, ora possono avere arresti anomali o altri problemi. Questa modifica è necessaria per supportare il futuro hardware con l'estensione MTE (Memory Tagging Extension) ARM abilitata. Per scoprire di più, consulta Indicatori con tag.
Per disattivare questa funzionalità, consulta la documentazione del manifest allowNativeHeapPointerTagging
.
Aggiornamenti alle notifiche popup
Le notifiche popup personalizzate in background sono bloccate
Per motivi di sicurezza e per mantenere una buona esperienza utente, il sistema blocca i popup che contengono visualizzazioni personalizzate se vengono inviati in background da un'app che ha come target Android 11 o versioni successive. Tieni presente che le notifiche popup di testo sono ancora consentite. Si tratta di notifiche popup create utilizzando Toast.makeText()
che non richiamano setView()
.
Se la tua app tenta comunque di pubblicare un messaggio popup contenente una vista personalizzata in background, il sistema non mostra il messaggio all'utente. Il sistema registra invece il seguente messaggio in logcat:
W/NotificationService: Blocking custom toast from package \ <package> due to package not in the foreground
Callback di Toast
Se vuoi ricevere una notifica quando viene visualizzato o scompare un messaggio popup (di testo o personalizzato),
utilizza il
metodo
addCallback()
, aggiunto in Android 11.
Modifiche all'API di notifica popup di testo
Le app che hanno come target Android 11 o versioni successive presentano i seguenti effetti collaterali per le notifiche popup di testo:
- Il metodo
getView()
restituiscenull
. - I valori restituiti dei seguenti metodi non riflettono i valori effettivi, pertanto non devi basarti su di essi nella tua app:
- I seguenti metodi sono no-op, quindi la tua app non deve utilizzarli:
Connettività
Accesso in lettura limitato al database APN
Modifica dettagli
Cambia nome: APN_READING_PERMISSION_CHANGE_ID
ID modifica: 124107808
Come attivare/disattivare
Mentre testi la compatibilità della tua app con Android 11, puoi attivare o disattivare questa modifica utilizzando i seguenti comandi ADB:
adb shell am compat enable (124107808|APN_READING_PERMISSION_CHANGE_ID) PACKAGE_NAME
adb shell am compat disable (124107808|APN_READING_PERMISSION_CHANGE_ID) PACKAGE_NAME
Per ulteriori informazioni sul framework di compatibilità e sulle modifiche di attivazione/disattivazione, consulta Testare e eseguire il debug delle modifiche al comportamento della piattaforma nella tua app.
Le app destinate ad Android 11 ora richiedono l'Manifest.permission.WRITE_APN_SETTINGS
autorizzazione privilegiata per leggere o accedere al database APN del fornitore di Telefonia. Il tentativo di accedere al database APN senza questa autorizzazione genera un'eccezione di sicurezza.
Accessibilità
Dichiarare l'interazione con i motori TTS nel file manifest
A causa delle modifiche alla visibilità del pacchetto, le app destinate ad Android 11 e che interagiscono con un motore di sintesi vocale (TTS) devono aggiungere il seguente elemento <queries>
ai file manifest:
<queries> <intent> <action android:name="android.intent.action.TTS_SERVICE" /> </intent> </queries>
Dichiarare l'utilizzo del pulsante Accessibilità nel file dei metadati
Modifica dettagli
Cambia nome: REQUEST_ACCESSIBILITY_BUTTON_CHANGE
ID modifica: 136293963
Come attivare/disattivare
Mentre testi la compatibilità della tua app con Android 11, puoi attivare o disattivare questa modifica utilizzando i seguenti comandi ADB:
adb shell am compat enable (136293963|REQUEST_ACCESSIBILITY_BUTTON_CHANGE) PACKAGE_NAME
adb shell am compat disable (136293963|REQUEST_ACCESSIBILITY_BUTTON_CHANGE) PACKAGE_NAME
Per ulteriori informazioni sul framework di compatibilità e sulle modifiche di attivazione/disattivazione, consulta Testare e eseguire il debug delle modifiche al comportamento della piattaforma nella tua app.
A partire da Android 11, il servizio di accessibilità non può fare una dichiarazione di runtime che attesti l'associazione al pulsante di accessibilità del sistema. Se aggiungi AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON
alla proprietà flags
di un oggetto AccessibilityServiceInfo
, il framework non passa gli eventi di callback dei pulsanti di accessibilità al tuo servizio.
Per ricevere eventi di callback di accessibilità nel tuo servizio di accessibilità, utilizza il
file di metadati del servizio di accessibilità per dichiarare l'associazione del servizio con
il pulsante di accessibilità. Includi il valore flagRequestAccessibilityButton
nella definizione dell'attributo accessibilityFlags
. Una posizione comune per il file dei metadati del servizio di accessibilità è
res/raw/accessibilityservice.xml
.
Fotocamera
Le azioni relative all'intent multimediale richiedono la fotocamera predefinita di sistema
A partire da Android 11, solo le app della fotocamera di sistema preinstallate possono rispondere alle seguenti azioni intent:
android.media.action.VIDEO_CAPTURE
android.media.action.IMAGE_CAPTURE
android.media.action.IMAGE_CAPTURE_SECURE
Se è disponibile più di un'app di sistema per la fotocamera preinstallata, il sistema presenta una finestra di dialogo che consente all'utente di selezionare un'app. Se vuoi che la tua app utilizzi un'app di terze parti specifica per la fotocamera per acquisire immagini o video per suo conto, puoi rendere espliciti questi intent impostando un nome del pacchetto o un componente per l'intent.
Pacchettizzazione e installazione di app
File di risorse compressi
Modifica dettagli
Cambia nome: RESOURCES_ARSC_COMPRESSED
ID modifica: 132742131
Come attivare/disattivare
Mentre testi la compatibilità della tua app con Android 11, puoi attivare o disattivare questa modifica utilizzando i seguenti comandi ADB:
adb shell am compat enable (132742131|RESOURCES_ARSC_COMPRESSED) PACKAGE_NAME
adb shell am compat disable (132742131|RESOURCES_ARSC_COMPRESSED) PACKAGE_NAME
Per ulteriori informazioni sul framework di compatibilità e sulle modifiche di attivazione/disattivazione, consulta Testare e eseguire il debug delle modifiche al comportamento della piattaforma nella tua app.
Le app che hanno come target Android 11 (livello API 30) o versioni successive non possono essere installate se contengono un file resources.arsc
compresso o se questo file non è allineato su un confine di 4 byte. Questo file non può essere mappato in memoria dal sistema se è presente una di queste condizioni. Le tabelle delle risorse che non possono essere mappate in memoria devono essere lette in un buffer in RAM, con un conseguente carico di memoria non necessario sul sistema e un aumento significativo dell'utilizzo della RAM sul dispositivo.
Se in precedenza utilizzavi un file resources.arsc
compresso, prova strategie alternative, come la riduzione delle risorse dell'app o altri metodi per ridurre, offuscare e ottimizzare l'app.
Lo schema di firma dell'APK v2 è ora obbligatorio
Le app che hanno come target Android 11 (livello API 30) e che al momento sono firmate solo con lo schema di firma dell'APK v1 ora devono essere firmate anche con lo schema di firma dell'APK v2 o versioni successive. Gli utenti non possono installare o aggiornare le app firmate solo con lo schema di firma dell'APK v1 sui dispositivi con Android 11.
Per verificare che la tua app sia firmata con lo schema di firma dell'APK v2 o versioni successive, puoi utilizzare Android Studio o lo strumento apksigner
sulla riga di comando.
Firebase
Firebase JobDispatcher e GCMNetworkManager
Se la tua app ha come target il livello API 30 o versioni successive, le chiamate alle API Firebase JobDispatcher e GcmNetworkManager sono disattivate sui dispositivi con Android 6.0 (livello API 23) o versioni successive. Per informazioni sulla migrazione, consulta Eseguire la migrazione da Firebase JobDispatcher a WorkManager e Eseguire la migrazione da GCMNetworkManager a WorkManager.
Riconoscimento vocale
A causa delle modifiche alla visibilità del pacchetto, le app destinate ad Android 11 e che interagiscono con un servizio di riconoscimento vocale devono aggiungere il seguente elemento <queries>
ai file manifest:
<queries> <intent> <action android:name="android.speech.RecognitionService" /> </intent> </queries>
Modifiche al callback per OnSharedPreferenceChangeListener
Modifica dettagli
Cambia nome: CALLBACK_ON_CLEAR_CHANGE
ID modifica: 119147584
Come attivare/disattivare
Mentre testi la compatibilità della tua app con Android 11, puoi attivare o disattivare questa modifica utilizzando i seguenti comandi ADB:
adb shell am compat enable (119147584|CALLBACK_ON_CLEAR_CHANGE) PACKAGE_NAME
adb shell am compat disable (119147584|CALLBACK_ON_CLEAR_CHANGE) PACKAGE_NAME
Per ulteriori informazioni sul framework di compatibilità e sulle modifiche di attivazione/disattivazione, consulta Testare e eseguire il debug delle modifiche al comportamento della piattaforma nella tua app.
Per le app che hanno come target Android 11 (livello API 30), ogni volta che viene chiamata la funzione
Editor.clear
viene ora eseguito un callback a
OnSharedPreferenceChangeListener.onSharedPreferenceChanged
con una chiave null
.
Limitazioni relative alle interfacce non SDK
Android 11 include elenchi aggiornati di interfacce non SDK limitate in base alla collaborazione con gli sviluppatori Android e ai test interni più recenti. 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 interrompere la tua 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 la 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.