Come nelle release precedenti, Android 11 include modifiche del comportamento che potrebbero
influire sulla tua app. Le seguenti modifiche del comportamento si applicano esclusivamente alle app
che hanno come target Android 11 o versioni successive. Se l'app imposta
targetSdkVersion
su 30
, devi modificare l'app per
supportare correttamente questi comportamenti, ove applicabile.
Assicurati di esaminare anche l'elenco delle modifiche del 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 con ambito: 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 hanno interagito 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à del pacchetto: quando un'app esegue una query per trovare l'elenco di app installate sul dispositivo, l'elenco restituito viene filtrato.
Per ulteriori informazioni, visita la pagina Privacy.
Sicurezza
Tagging puntatore heap
Dettagli modifiche
Cambia nome: NATIVE_HEAP_POINTER_TAGGING
Modifica ID: 135754954
Come attivare/disattivare
Quando 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 maggiori informazioni sul framework di compatibilità e sull'attivazione/disattivazione delle modifiche, consulta Testare ed eseguire il debug delle modifiche al comportamento della piattaforma nell'app.
I puntatori heap ora hanno un tag diverso da zero nel byte più significativo (MSB). Le applicazioni che utilizzano i puntatori in modo errato, incluse quelle che modificano MSB, ora possono arrestarsi in modo anomalo o presentare altri problemi. Questa modifica è necessaria per supportare l'hardware futuro con l'estensione ARM Memory Tagging (MTE) abilitata. Per scoprire di più, consulta la sezione Puntatori codificati.
Per disattivare questa funzionalità, consulta la documentazione del file manifest allowNativeHeapPointerTagging
.
Aggiornamenti relativi ai toast
I toast personalizzati in background sono bloccati
Per motivi di sicurezza e per garantire una buona esperienza utente, il sistema blocca
i toast che contengono visualizzazioni personalizzate se vengono inviati in background da
un'app destinata ad Android 11 o versioni successive. Tieni presente che i toast
di testo sono comunque consentiti. Si tratta dei toast creati utilizzando
Toast.makeText()
che
non chiamano setView()
.
Se la tua app tenta comunque di pubblicare un toast contenente una visualizzazione personalizzata da sfondo, 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 toast
Se vuoi ricevere una notifica quando viene visualizzato o scompare un avviso popup (testo o personalizzato),
utilizza il metodo
addCallback()
, che è stato aggiunto in Android 11.
Modifiche all'API Text toast
Le app destinate ad Android 11 o versioni successive registrano i seguenti effetti collaterali per i toast di testo:
- Il metodo
getView()
restituiscenull
. - I valori restituiti dei seguenti metodi non riflettono i valori effettivi, quindi non devi utilizzarli nella tua app:
- I seguenti metodi non sono operativi, pertanto la tua app non dovrebbe utilizzarli:
Connettività
Accesso in lettura limitato al database APN
Dettagli modifiche
Cambia nome: APN_READING_PERMISSION_CHANGE_ID
Modifica ID: 124107808
Come attivare/disattivare
Quando 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 maggiori informazioni sul framework di compatibilità e sull'attivazione/disattivazione delle modifiche, consulta Testare ed eseguire il debug delle modifiche al comportamento della piattaforma nell'app.
Le app destinate ad Android 11 ora richiedono l'autorizzazione privilegiata Manifest.permission.WRITE_APN_SETTINGS
per leggere o accedere al database APN del provider di telefonia. Il tentativo di accedere al database APN senza questa autorizzazione genera un'eccezione di sicurezza.
Accessibilità
Dichiara l'interazione con i motori di sintesi vocale nel file manifest
A causa delle modifiche alla visibilità
dei pacchetti, le app che hanno come target
Android 11 e 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>
Dichiara l'uso del pulsante di accessibilità nel file di metadati
Dettagli modifiche
Cambia nome: REQUEST_ACCESSIBILITY_BUTTON_CHANGE
Modifica ID: 136293963
Come attivare/disattivare
Quando 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 maggiori informazioni sul framework di compatibilità e sull'attivazione/disattivazione delle modifiche, consulta Testare ed eseguire il debug delle modifiche al comportamento della piattaforma nell'app.
A partire da Android 11, il servizio di accessibilità non può presentare una dichiarazione di runtime che contenga un'associazione con il pulsante di accessibilità del sistema. Se aggiungi AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON
alla proprietà flags
di un oggetto AccessibilityServiceInfo
, il framework non passa eventi di callback del pulsante di accessibilità al servizio.
Per ricevere eventi di callback di accessibilità nel 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
. Un percorso comune per il file di metadati del servizio di accessibilità è
res/raw/accessibilityservice.xml
.
Fotocamera
Le azioni per intent multimediali 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 della fotocamera di sistema preinstallata, il sistema presenta una finestra di dialogo in cui l'utente può selezionare un'app. Se vuoi che la tua app utilizzi un'app fotocamera di terze parti specifica per acquisire immagini o video per suo conto, puoi rendere espliciti questi intent impostando un nome di pacchetto o un componente per l'intent.
Pacchettizzazione e installazione delle app
File di risorse compressi
Dettagli modifiche
Cambia nome: RESOURCES_ARSC_COMPRESSED
Modifica ID: 132742131
Come attivare/disattivare
Quando 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 maggiori informazioni sul framework di compatibilità e sull'attivazione/disattivazione delle modifiche, consulta Testare ed eseguire il debug delle modifiche al comportamento della piattaforma nell'app.
Le app destinate ad 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
al limite 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 nella RAM, con conseguente pressione superflua della memoria nel sistema e un aumento significativo dell'utilizzo della RAM sul dispositivo.
Se in precedenza utilizzavi un file resources.arsc
compresso, prova strategie alternative, ad esempio diminuendo le risorse dell'app o altri metodi per restringere, offuscare e ottimizzare l'app.
Ora è richiesto lo schema di firma dell'APK v2
Le app destinate ad Android 11 (livello API 30) e attualmente firmate solo utilizzando lo schema di firma dell'APK v1 devono ora essere firmate anche utilizzando lo schema di firma dell'APK v2 o versioni successive. Gli utenti non possono installare o aggiornare app firmate solo con lo schema di firma dell'APK v1 sui dispositivi con Android 11.
Per verificare che la tua app sia stata firmata con lo schema di firma dell'APK v2 o versioni successive,
puoi utilizzare Android Studio
oppure lo strumento apksigner
nella riga di comando.
Firebase
Firebase JobDispatcher e GCMNetworkManager
Se la tua app ha come target il livello API 30 o versioni successive, le chiamate API Firebase JobDispatcher e GcmNetworkManager sono disattivate sui dispositivi con Android 6.0 (livello API 23) o versioni successive. Per informazioni sulla migrazione, consulta Migrazione da Firebase JobDispatcher a WorkManager e Migrazione da GCMNetworkManager a WorkManager.
Riconoscimento vocale
A causa delle modifiche alla visibilità
dei pacchetti, 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 di callback per OnSharedPreferenceChangeListener
Dettagli modifiche
Cambia nome: CALLBACK_ON_CLEAR_CHANGE
Modifica ID: 119147584
Come attivare/disattivare
Quando 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 maggiori informazioni sul framework di compatibilità e sull'attivazione/disattivazione delle modifiche, consulta Testare ed eseguire il debug delle modifiche al comportamento della piattaforma nell'app.
Per le app che hanno come target Android 11 (livello API 30), ogni volta che viene chiamato Editor.clear
, viene ora effettuato un callback a OnSharedPreferenceChangeListener.onSharedPreferenceChanged
con una chiave null
.
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.