Modifiche del comportamento: app che hanno come target Android 11

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:

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:

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:

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.