Modifiche del comportamento: app destinate ad Android 11

Come le 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 la tua 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 eseguite 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 del puntatore heap

Dettagli modifiche

Cambia nome: NATIVE_HEAP_POINTER_TAGGING

ID modifica: 135754954

Come attivare/disattivare

Mentre verifichi 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 del comportamento della piattaforma nella tua app.

I puntatori heap ora hanno un tag diverso da zero nel byte più significativo (MSB). Le applicazioni che utilizzano i cursori in modo errato, incluse quelle che modificano l'MSB, ora possono arrestarsi in modo anomalo o presentare altri problemi. Questa modifica è necessaria per supportare hardware futuro con MTE (Memory Tagging Extension) ARM abilitata. Per scoprire di più, consulta la sezione Puntatori taggati.

Per disattivare questa funzionalità, consulta la documentazione relativa al file manifest di allowNativeHeapPointerTagging.

Aggiornamenti ai toast

Gli avvisi toast personalizzati in background sono bloccati

Per motivi di sicurezza e per mantenere 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 sono comunque consentiti i toast di testo creati utilizzando Toast.makeText() che non chiamano setView().

Se la tua app tenta comunque di pubblicare un avviso popup contenente una visualizzazione personalizzata in background, il sistema non mostra il messaggio all'utente. Il sistema, invece, registra il seguente messaggio in logcat:

W/NotificationService: Blocking custom toast from package \
  <package> due to package not in the foreground

Callback dei toast

Se vuoi ricevere una notifica quando un avviso popup (testo o personalizzato) viene visualizzato o scompare, utilizza il metodo addCallback(), aggiunto in Android 11.

Modifiche all'API Text toast

Le app destinate ad Android 11 o versioni successive vedono 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

ID modifica: 124107808

Come attivare/disattivare

Mentre verifichi 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 del comportamento della piattaforma nella tua app.

Le app che hanno come target Android 11 ora richiedono l'autorizzazione 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 TTS nel file manifest

A causa delle modifiche alla visibilità dei pacchetti, le app destinate ad Android 11 e che interagiscono con un motore di sintesi vocale (TTS) devono aggiungere il seguente elemento <queries> ai propri file manifest:

<queries>
  <intent>
    <action
       android:name="android.intent.action.TTS_SERVICE" />
  </intent>
</queries>

Dichiara l'utilizzo del pulsante Accessibilità nel file di metadati

Dettagli modifiche

Cambia nome: REQUEST_ACCESSIBILITY_BUTTON_CHANGE

ID modifica: 136293963

Come attivare/disattivare

Mentre verifichi 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 del comportamento della piattaforma nella tua app.

A partire da Android 11, il servizio di accessibilità non può fare una dichiarazione di runtime che sia associata al pulsante di accessibilità del sistema. Se aggiungi AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON alla proprietà flags di un oggetto AccessibilityServiceInfo, il framework non trasmette al servizio gli eventi di callback del pulsante di accessibilità.

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. Una posizione 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 fotocamera di sistema preinstallate possono rispondere alle seguenti azioni relative all'intent:

Se è disponibile più di un'app della fotocamera di sistema preinstallata, il sistema visualizza 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 questi intent espliciti impostando un nome pacchetto o un componente per l'intent.

Packaging e installazione dell'app

File di risorse compressi

Dettagli modifiche

Cambia nome: RESOURCES_ARSC_COMPRESSED

ID modifica: 132742131

Come attivare/disattivare

Mentre verifichi 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 del 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 limite di 4 byte. Il sistema non può mappare la memoria a questo file in presenza di una di queste condizioni. Le tabelle delle risorse che non possono essere mappate in memoria devono essere lette in un buffer nella RAM, il che comporta una pressione di memoria non necessaria per il sistema e un notevole aumento dell'utilizzo della RAM sul dispositivo.

Se in precedenza utilizzavi un file resources.arsc compresso, prova strategie alternative, come ridurre le risorse dell'app o altri metodi per ridurre, offuscare e ottimizzare la tua app.

Ora lo schema di firma dell'APK v2 è obbligatorio

Le app destinate ad Android 11 (livello API 30) che al momento sono firmate solo tramite lo schema di firma dell'APK v1 ora devono essere firmate anche utilizzando lo schema di firma dell'APK v2 o una versione successiva. 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 stata firmata con lo schema di firma dell'APK v2 o versioni successive, puoi utilizzare Android Studio o lo strumento apksigner nella riga di comando.

Firebase

Firebase JobDispatcher e GCMNetworkManager

Se la tua app ha come target il livello API 30 o successivo, 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 gli articoli 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 propri file manifest:

<queries>
  <intent>
    <action
       android:name="android.speech.RecognitionService" />
  </intent>
</queries>

Modifiche al callback per OnSharedPreferenceChangeListener

Dettagli modifiche

Cambia nome: CALLBACK_ON_CLEAR_CHANGE

ID modifica: 119147584

Come attivare/disattivare

Mentre verifichi 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 del comportamento della piattaforma nella tua app.

Per le app che hanno come target Android 11 (livello API 30), ogni volta che viene chiamato Editor.clear, viene ora eseguito un callback a OnSharedPreferenceChangeListener.onSharedPreferenceChanged con una chiave null.

Limitazioni dell'interfaccia non SDK

Android 11 include elenchi aggiornati di interfacce non SDK limitate in base alla collaborazione con gli sviluppatori Android e agli 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 metodi o campi 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 testare l'app per scoprirlo. Se la tua app si basa su interfacce non SDK, devi iniziare a pianificare una migrazione alle alternative SDK. Ciononostante, 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 relative alle interfacce non SDK in Android 11. Per scoprire di più sulle interfacce non SDK in generale, consulta Restrizioni sulle interfacce non SDK.