Modifiche al comportamento: app che hanno come target Android 11

Come le release precedenti, Android 11 include modifiche del comportamento che possono colpire 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:

Per saperne di più, consulta la pagina Privacy.

Sicurezza

Tagging dei puntatori dell'heap

Dettagli modifiche

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 i puntatori, incluse quelle che modificano il MSB, ora possono arrestarsi in modo anomalo o presentare altri problemi. Questa modifica è necessaria per supportare l'hardware futuro 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 file manifest allowNativeHeapPointerTagging.

Aggiornamenti alle notifiche popup

Le notifiche popup personalizzate in background sono bloccate

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

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

Modifica ID: 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ò 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 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. 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 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 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 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 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, come la riduzione delle risorse dell'app o altri metodi per ridurre, offuscare e ottimizzare l'app.

Ora è richiesto 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 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 Migrazione da Firebase JobDispatcher a WorkManager e 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 di callback per OnSharedPreferenceChangeListener

Dettagli modifiche

Cambia nome: CALLBACK_ON_CLEAR_CHANGE

ID modifica: 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 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 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 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, 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 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.