Modifiche al framework di compatibilità (Android 11)

Questa pagina descrive ogni modifica del comportamento con un impatto sull'app aggiunta al framework di compatibilità in Android 11 (livello API 30). Utilizza questo elenco insieme alle opzioni per gli sviluppatori e ai comandi ADB per testare ed eseguire il debug della tua app mentre ti prepari a scegliere come target Android 11.

AGGIUNGI_CONTENUTI_OBSERVER_FLAGS

ID modifica: 150939131

Stato predefinito: abilitato per le app destinate ad Android 11 (livello API 30) o a versioni successive.

Per le app che hanno come target Android 11, è previsto un nuovo sovraccarico di API pubblica onChange(boolean, Uri, int) che include un argomento flags con un numero intero.

Questo nuovo metodo è un'alternativa a un SDK pubblico per le app che utilizzano il metodo con sovraccarico onChange() non SDK che include un argomento userId con numero intero.

AMMIN_APP_PASSWORD_COMPLEXITY

ID modifica: 123562444

Stato predefinito: abilitato per le app destinate ad Android 11 (livello API 30) o a versioni successive.

Per le app di amministrazione che hanno come target Android 11, genera un errore ogni volta che un'app imposta un requisito di password non pertinente alla qualità della password attualmente assegnata. Ad esempio, se la qualità delle password è impostata su DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED, un'app non sarebbe in grado di impostare una lunghezza minima delle password. In questo caso, prima di provare a impostare la lunghezza minima della password, l'app deve chiamare il metodo setPasswordQuality() e poi il metodo setPasswordMinimumLength().

Inoltre, quando un'app di amministrazione che ha come target Android 11 riduce la qualità delle password, vengono reimpostati i valori predefiniti degli eventuali requisiti esistenti per le password che non si applicano più.

APP_DATA_DIRECTORY_ISOLATION

ID modifica: 143937733

Stato predefinito: abilitato per le app destinate ad Android 11 (livello API 30) o a versioni successive.

Le app destinate ad Android 11 non possono più accedere ai file nelle directory di dati private di qualsiasi app, indipendentemente dalla versione dell'SDK di destinazione dell'altra app.

Per scoprire di più, consulta Accesso alle directory private.

APN_READING_PERMISSION_CHANGE_ID

ID modifica: 124107808

Stato predefinito: abilitato per le app destinate ad Android 11 (livello API 30) o a versioni successive.

Per le app che hanno come target Android 11, l'accesso al database APN ora richiede l'autorizzazione Manifest.permission.WRITE_APN_SETTINGS.

Per scoprire di più su questa modifica, consulta Accesso in lettura limitato al database APN.

BACKGROUND_RATIONALE_CHANGE_ID (ID BACKGROUND_RATIONALE_CHANGE_ID)

ID modifica: 147316723

Stato predefinito: abilitato per le app destinate ad Android 11 (livello API 30) o a versioni successive.

Ora le app devono fornire una motivazione valida ogni volta che richiedono l'accesso alla posizione del dispositivo in background.

Per scoprire di più su questa modifica, consulta la guida su come accedere alla posizione in background in Android 11, che illustra le modifiche relative alla privacy relative alla posizione in Android 11.

RICHIAMATA_ON_CLEAR_CHANGE

ID modifica: 119147584

Stato predefinito: abilitato per le app destinate ad Android 11 (livello API 30) o a versioni successive.

Ogni volta che viene chiamato Editor.clear, viene eseguito un callback a OnSharedPreferenceChangeListener.onSharedPreferenceChanged con un tasto null.

Per scoprire di più su questa modifica, consulta Modifiche relative ai callback per OnSharedPreferenceChangeListener.

CALLBACK_ON_MORE_ERROR_CODE_CHANGE

ID modifica: 130595455

Stato predefinito: abilitato per le app destinate ad Android 11 (livello API 30) o a versioni successive.

I codici di errore sono ora espansi per updateAvailableNetworks(List, Executor, Consumer) e setPreferredOpportunisticDataSubscription(int, boolean, Executor, Consumer).

CALL_BACK_ON_CHANGED_LISTENER_WITH_SWITCHED_OP_CHANGE

ID modifica: 148180766

Stato predefinito: abilitato per le app destinate ad Android 11 (livello API 30) o a versioni successive.

Si tratta di una piccola modifica del comportamento in startWatchingMode(String, String, AppOpsManager.OnOpChangedListener). Prima di questa modifica, il sistema richiamava per l'operazione cambiata. Dopo la modifica, il sistema richiama per l'operazione effettivamente richiesta o per tutte le operazioni scambiate se non è specificata alcuna operazione.

CAMERA_MICROPHONE_CAPABILITY_CHANGE_ID

ID modifica: 136219221

Stato predefinito: abilitato per le app destinate ad Android 11 (livello API 30) o a versioni successive.

Per le app che hanno come target Android 11, i servizi in primo piano ricevono funzionalità della fotocamera e del microfono durante l'uso solo quando R.attr.foregroundServiceType viene configurato rispettivamente come ServiceInfo.FOREGROUND_SERVICE_TYPE_CAMERA e ServiceInfo.FOREGROUND_SERVICE_TYPE_MICROPHONE nel file manifest. Nelle versioni precedenti di Android, i servizi in primo piano ricevevano automaticamente le funzionalità della fotocamera e del microfono.

Per scoprire di più su questa modifica, consulta Tipi di servizi in primo piano in Android 11.

CHANGE_BACKGROUND_CUSTOM_TOAST_BLOCK

ID modifica: 128611929

Stato predefinito: abilitato per le app destinate ad Android 11 (livello API 30) o a versioni successive.

Le app non possono più pubblicare toast personalizzati in background. Tuttavia, le app possono comunque pubblicare toast utilizzando il metodo Toast.makeText(Context, CharSequence, int) e le relative varianti mentre sono in background.

Per scoprire di più su questa modifica, consulta Le visualizzazioni dei toast personalizzate sono bloccate.

CHANGE_RESTRICT_SAW_INTENT

ID modifica: 135920175

Stato predefinito: questa modifica non può essere attivata/disattivata. Viene registrato solo dal framework di compatibilità.

Gli intent che utilizzano l'azione android.settings.MANAGE_APP_OVERLAY_PERMISSION e lo schema dell'URI dei dati package non indirizzano più l'utente a una schermata specifica dell'app per la gestione dell'autorizzazione associata. L'utente viene invece indirizzato a una schermata in cui può gestire tutte le app che hanno richiesto l'autorizzazione.

MODIFICA_TESTO_TOASTS_NEL_SISTEMA

ID modifica: 147798919

Stato predefinito: abilitato per le app destinate ad Android 11 (livello API 30) o a versioni successive.

Gli avvisi di testo vengono ora visualizzati da SystemUI anziché in-app. Ciò impedisce alle app di eludere le limitazioni relative alla pubblicazione di avvisi personalizzati in background.

DEFAULT_SCOPED_STORAGE

ID modifica: 149924527

Stato predefinito: abilitato per tutte le app.

Per impostazione predefinita, tutte le app che hanno come target Android 11 utilizzano lo spazio di archiviazione basato su ambito e non possono più disattivare l'archiviazione con ambito.

Tuttavia, puoi testare la tua app senza archiviazione basata sull'ambito, indipendentemente dalla versione dell'SDK target e dai valori dei flag manifest, disattivando questa modifica.

Per scoprire di più sulle modifiche all'archiviazione con ambito in Android 11, consulta la sezione Archiviazione con ambito nella pagina relativa alle modifiche allo spazio di archiviazione di Android in Android 11.

EMPTY_INTENT_ACTION_CATEGORY

ID modifica: 151163173

Stato predefinito: abilitato per le app destinate ad Android 11 (livello API 30) o a versioni successive.

Per le app che hanno come target Android 11, il sistema ora genera un errore se action o category di un filtro per intent è una stringa vuota. Un bug nella piattaforma precedente ad Android 11 consentiva il passaggio di questa richiesta senza generare un errore. Tieni presente che non sono inclusi i casi in cui l'attributo è nullo o mancante, dato che genera sempre un errore.

QUERY_FILTER_APPLICATION

ID modifica: 135549675

Stato predefinito: abilitato per le app destinate ad Android 11 (livello API 30) o a versioni successive.

Ora le app devono dichiarare i pacchetti e gli intent che intendono utilizzare prima di poter ottenere dettagli sulle altre app su un dispositivo. Per queste dichiarazioni è necessario utilizzare il tag <queries> nel file manifest dell'app.

Per scoprire di più su come eseguire query e interagire con altre app installate in Android 11, consulta la pagina sulla privacy relativa alla visibilità dei pacchetti.

FORCE_ENABLE_SCOPED_STORAGE

ID modifica: valore: 132649864

Stato predefinito: disattivato per tutte le app.

Per impostazione predefinita, tutte le app che hanno come target Android 11 utilizzano lo spazio di archiviazione basato su ambito e non possono più disattivare l'archiviazione con ambito.

Tuttavia, se la tua app ha ancora come target Android 10 (livello API 29) o versioni precedenti, puoi testarla con lo spazio di archiviazione limitato, indipendentemente dalla versione dell'SDK target dell'app e dai valori del flag manifest, attivando questa modifica.

Per scoprire di più sulle modifiche all'archiviazione con ambito in Android 11, consulta la sezione Archiviazione con ambito nella pagina relativa alle modifiche allo spazio di archiviazione di Android in Android 11.

GET_DATA_CONNECTION_STATE_R_VERSION

ID modifica: 148535736

Stato predefinito: abilitato per le app destinate ad Android 11 (livello API 30) o a versioni successive.

Per controllare la versione dell'SDK per PreciseDataConnectionState#getDataConnectionState.

GET_DATA_STATE_R_VERSION

ID modifica: 148534348

Stato predefinito: abilitato per le app destinate ad Android 11 (livello API 30) o a versioni successive.

Per controllare la versione dell'SDK per getDataState().

GET_PROVIDER_SECURITY_EXCEPTIONS

ID modifica: 150935354

Stato predefinito: abilitato per le app destinate ad Android 11 (livello API 30) o a versioni successive.

Per le app che hanno come target Android 11 (livello API 30) o versioni successive, getProvider(String) non genera più eccezioni di sicurezza.

GET_TARGET_SDK_VERSION_CODE_CHANGE

ID modifica: 145147528

Stato predefinito: abilitato per le app destinate ad Android 10 (livello API 29) o a versioni successive.

Per controllare la versione dell'SDK per il metodo SmsManager.sendResolverResult().

ASAN_GWP

ID modifica: 135634846

Stato predefinito: disattivato per tutte le app.

Consente di attivare il rilevamento di bug della memoria nativa campionata nelle app.

Per saperne di più su questa modifica, consulta la guida di GWP-ASan.

HIDE_MAXTARGETSDK_P_Hidden_APIS

ID modifica: 149997251

Stato predefinito: abilitato per le app destinate ad Android 10 (livello API 29) o a versioni successive.

Per le app che hanno come target Android 10 (livello API 29) o versioni successive, rimuove l'accesso a tutte le interfacce non SDK che fanno parte dell'elenco max-target-p (greylist-max-p) per Android 10 (livello API 29).

HIDE_MAXTARGETSDK_Q_Hidden_APIS

ID modifica: 149994052

Stato predefinito: abilitato per le app destinate ad Android 11 (livello API 30) o a versioni successive.

Per le app che hanno come target Android 11 (livello API 30) o versioni successive, rimuove l'accesso a tutte le interfacce non SDK che fanno parte dell'elenco max-target-q (greylist-max-q) per Android 11 (livello API 30).

Per scoprire di più su questa modifica, consulta la pagina relativa alle interfacce non SDK che ora sono bloccate in Android 11.

LISTEN_CODE_CHANGE

ID modifica: 147600208

Stato predefinito: abilitato per le app destinate ad Android 10 (livello API 29) o a versioni successive.

Per controllare la versione dell'SDK per TelephonyManager.listen(PhoneStateListener, int).

APP_TAG_mancante

ID modifica: 150776642

Stato predefinito: abilitato per le app destinate ad Android 11 (livello API 30) o a versioni successive.

Per le app che hanno come target Android 11, ora viene visualizzato un errore quando nel file manifest di un'app manca un tag application o instrumentation.

NATIVE_HEAP_POINTER_TAGGING

ID modifica: 135754954

Stato predefinito: abilitato per le app destinate ad Android 11 (livello API 30) o a versioni successive.

Per le app che hanno come target Android 11, le allocazioni dell'heap native ora hanno un tag diverso da zero nel byte più significativo.

Per scoprire di più, consulta la sezione Tagging del puntatore heap.

PHONE_STATE_LISTENER_LIMIT_CHANGE_ID

ID modifica: 150880553

Stato predefinito: abilitato per tutte le app.

Per le app che hanno come target Android 11, è ora previsto un limite al numero di oggetti PhoneStateListener che qualsiasi processo può registrare tramite TelephonyManager.listen(PhoneStateListener, int). Il limite predefinito è 50, che può essere modificato dagli aggiornamenti della configurazione remota del dispositivo. Questo limite viene applicato utilizzando un elemento IllegalStateException generato da TelephonyManager.listen(PhoneStateListener, int) quando il processo in questione tenta di registrare troppi listener.

PREEVENT_META_REFLECTION_BLACKLIST_ACCESS

ID modifica: 142365358

Stato predefinito: abilitato per le app destinate ad Android 11 (livello API 30) o a versioni successive.

Le app che hanno come target Android 11 non possono più utilizzare un ulteriore livello di riflesso per accedere a interfacce non SDK limitate.

PROCESS_CAPABILITY_CHANGE_ID

ID modifica: 136274596

Stato predefinito: abilitato per le app destinate ad Android 11 (livello API 30) o a versioni successive.

Per le app che hanno come target Android 11, il flag Context.BIND_INCLUDE_CAPABILITIES ora può essere utilizzato per trasferire le funzionalità in uso dal processo del client a un servizio associato.

REMOVE_ANDROID_TEST_BASE

ID modifica: 133396946

Stato predefinito: abilitato per le app destinate ad Android 11 (livello API 30) o a versioni successive.

Per le app destinate ad Android 11, la libreria android.test.base è stata rimossa se l'app non dipende da android.test.runner (poiché dipende dai corsi della libreria android.test.base).

REQUEST_ACCESSIBILITY_BUTTON_CHANGE

ID modifica: 136293963

Stato predefinito: abilitato per le app destinate ad Android 11 (livello API 30) o a versioni successive.

Per i servizi di accessibilità che hanno come target Android 11, il flag FLAG_REQUEST_ACCESSIBILITY_BUTTON deve ora essere specificato nel file di metadati dei servizi di accessibilità. In caso contrario, il flag viene ignorato.

Per scoprire di più su questa modifica, consulta Dichiarare l'utilizzo del pulsante Accessibilità nel file di metadati.

RESOURCES_ARSC_COMPRESSED

ID modifica: 132742131

Stato predefinito: abilitato per le app destinate ad Android 11 (livello API 30) o a versioni successive.

Le app che hanno come target Android 11 (livello API 30) non possono essere installate se contengono un file resources.arsc compresso o se questo file non è allineato su un limite di 4 byte.

Per scoprire di più su questa modifica, consulta File di risorse compressi.

RESTRICT_STORAGE_ACCESS_FRAMEWORK

ID modifica: 141600225

Stato predefinito: abilitato per le app destinate ad Android 11 (livello API 30) o a versioni successive.

Se la tua app ha come target Android 11 e utilizza Storage Access Framework (SAF), non potrai più accedere a determinate directory utilizzando le azioni intent ACTION_OPEN_DOCUMENT e ACTION_OPEN_DOCUMENT_TREE. Per scoprire di più su queste modifiche, consulta la sezione Limitazioni di accesso ai documenti nella pagina che illustra gli aggiornamenti della privacy relativi allo spazio di archiviazione in Android 11.

SELINUX_ULTIMI_MODIFICHE

ID modifica: 143539591

Stato predefinito: abilitato per le app destinate ad Android 11 (livello API 30) o a versioni successive.

Questa modifica consente all'app di accedere al dominio untrusted_app_R-targetSDk SELinux. Questa è una delle modifiche fondamentali nel framework di compatibilità che consente alle app di attivare/disattivare altre modifiche controllate da targetSdkVersion senza modificare il valore targetSDKVersion dell'app. Per questo motivo, non devi disattivare questa modifica per un'app destinata ad Android 11, altrimenti l'app non funzionerà.

Questa modifica non ha effetto per le app che utilizzano un ID utente condiviso.

ECCEZIONI_DI_SICUREZZA_TRIGA

ID modifica: 147340954

Stato predefinito: abilitato per le app destinate ad Android 11 (livello API 30) o a versioni successive.

Prima di Android 11, un elemento SecurityException veniva generato solo dalle API setEnabled per un errore di autorizzazione. In Android 11 questo non è più vero e un SecurityException può essere generato per diversi motivi, nessuno dei quali è esposto al chiamante.

Per mantenere il comportamento esistente dell'API, se si verifica un errore di autorizzazione legacy o di applicazione di un attore per un'app che non ha come target Android 11, l'eccezione viene forzata in un elemento IllegalStateException esistente nell'origine precedente ad Android 11.

USE_SET_LOCATION_ATTIVATA

ID modifica: 117835097

Stato predefinito: abilitato per le app destinate ad Android 11 (livello API 30) o a versioni successive.

Le app di amministrazione che hanno come target Android 11 non possono più utilizzare DevicePolicyManager.setSecureSetting(ComponentName, String, String) per modificare l'impostazione deprecata Settings.Secure.LOCATION_MODE. Dovrebbero usare DevicePolicyManager.setLocationEnabled(ComponentName, boolean).