Modifiche al comportamento: app che hanno come target Android 11

Come le release precedenti, Android 11 include modifiche al comportamento che potrebbero influire sulla tua app. Le seguenti modifiche al 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 per supportare correttamente questi comportamenti, ove applicabile.

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 le seguenti:

Per saperne di più, consulta la pagina Privacy.

Sicurezza

Tagging dei puntatori heap

Dettagli modifiche

Nome modifica: NATIVE_HEAP_POINTER_TAGGING

ID modifica: 135754954

Come attivare/disattivare

Durante il test della 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 sull'attivazione/disattivazione delle modifiche, consulta Testare ed eseguire il debug delle modifiche al 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 puntatori in modo errato, incluse quelle che modificano l'MSB, ora possono arrestarsi in modo anomalo o riscontrare altri problemi. Questa modifica è necessaria per supportare l'hardware futuro con l'estensione di tagging della memoria ARM (MTE) abilitata. Per saperne di più, consulta Puntatori con tag.

Per disattivare questa funzionalità, consulta la allowNativeHeapPointerTagging documentazione del manifest.

Aggiornamenti ai toast

I 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 questi toast vengono inviati in background da un'app che ha come target Android 11 o versioni successive. Tieni presente che i toast di testo sono ancora consentiti; si tratta di toast creati utilizzando Toast.makeText() che non chiamano setView().

Se la tua app tenta comunque di pubblicare un toast contenente una visualizzazione 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 dei toast

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

Modifiche all'API dei toast di testo

Le app che hanno come target Android 11 o versioni successive riscontrano i seguenti effetti collaterali per i toast di testo:

Connettività

Accesso in lettura limitato al database APN

Dettagli modifiche

Nome modifica: APN_READING_PERMISSION_CHANGE_ID

ID modifica: 124107808

Come attivare/disattivare

Durante il test della 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 sull'attivazione/disattivazione delle modifiche, consulta Testare ed eseguire il debug delle modifiche al comportamento della piattaforma nella tua app.

Le app che hanno come target Android 11 ora richiedono l' Manifest.permission.WRITE_APN_SETTINGS autorizzazione privilegiata per leggere o accedere al database APN del provider di Telephony. 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à dei pacchetti, le app che hanno come target Android 11 e interagiscono con un motore di sintesi vocale (TTS) devono aggiungere il seguente <queries> elemento ai file manifest:

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

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

Dettagli modifiche

Nome modifica: REQUEST_ACCESSIBILITY_BUTTON_CHANGE

ID modifica: 136293963

Come attivare/disattivare

Durante il test della 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 sull'attivazione/disattivazione delle modifiche, consulta Testare ed eseguire il debug delle modifiche al comportamento della piattaforma nella tua app.

A partire da Android 11, il tuo servizio di accessibilità non può dichiarare in fase di runtime di avere un'associazione con il pulsante Accessibilità del sistema. Se aggiungi AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON alla flags proprietà di un AccessibilityServiceInfo oggetto, il framework non passa gli eventi di callback del pulsante Accessibilità al tuo servizio.

Per ricevere gli eventi di callback di accessibilità nel tuo servizio di accessibilità, utilizza il tuo file di metadati del servizio di accessibilità per dichiarare l'associazione del servizio con il pulsante Accessibilità. Includi il valore flagRequestAccessibilityButton in your definition of the accessibilityFlags attribute. Una posizione comune per il file di metadati del servizio di accessibilità è res/raw/accessibilityservice.xml.

Fotocamera

Le azioni di intent multimediali richiedono la fotocamera predefinita del sistema

A partire da Android 11, solo le app della fotocamera di sistema preinstallate possono rispondere alle seguenti azioni di intent:

Se sono disponibili più app della fotocamera di sistema preinstallate, il sistema presenta una finestra di dialogo in cui l'utente può selezionare un'app. Se vuoi che la tua app utilizzi un' app della fotocamera di terze parti specifica per acquisire immagini o video per suo conto, puoi rendere espliciti questi intent impostando un nome pacchetto o un componente per l' intent.

Pacchettizzazione e installazione delle app

File di risorse compressi

Dettagli modifiche

Nome modifica: RESOURCES_ARSC_COMPRESSED

ID modifica: 132742131

Come attivare/disattivare

Durante il test della 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 sull'attivazione/disattivazione delle modifiche, consulta Testare ed 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 compresso resources.arsc o se questo file non è allineato a un limite di 4 byte. Il sistema non può eseguire il mapping della memoria di questo file se è presente una di queste condizioni. Le tabelle delle risorse di cui non è possibile eseguire il mapping della memoria devono essere lette in un buffer nella RAM, con conseguente pressione di memoria non necessaria sul sistema e un aumento notevole dell'utilizzo della RAM sul dispositivo.

Se in precedenza utilizzavi un file compresso resources.arsc, prova invece strategie alternative , ad esempio la riduzione delle risorse dell'app o altri metodi per ridurre, offuscare e ottimizzare l'app.

Ora è obbligatorio lo schema di firma dell'APK v2

Le app che hanno come target Android 11 (livello API 30) e che al momento sono 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 le app firmate solo con lo schema di firma dell'APK v1 sui dispositivi che eseguono 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 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 che eseguono 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à dei pacchetti, le app che hanno come target Android 11 e 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 ai callback per OnSharedPreferenceChangeListener

Dettagli modifiche

Nome modifica: CALLBACK_ON_CLEAR_CHANGE

ID modifica: 119147584

Come attivare/disattivare

Durante il test della 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 sull'attivazione/disattivazione delle modifiche, consulta Testare ed 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 Editor.clear viene chiamato, viene 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 basate sulla collaborazione con gli sviluppatori Android e sui test interni più recenti. Ove 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 influire immediatamente su di te. 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 elevato rischio di interruzione dell'app.

Se non sai con certezza se la tua app utilizza interfacce non SDK, puoi testare la tua app per scoprirlo. Se la tua app si basa su interfacce non SDK, devi iniziare a pianificare una migrazione alle 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à della tua app, devi richiedere una nuova API pubblica.

Per saperne di più sulle modifiche apportate a questa release di Android, consulta Aggiornamenti alle limitazioni relative alle interfacce non SDK in Android 11. Per saperne di più sulle interfacce non SDK in generale, consulta Limitazioni relative alle interfacce non SDK.