Modifiche al framework di compatibilità (Android 12)

Figura 1. La schermata Modifiche relative alla compatibilità delle app nelle Opzioni sviluppatore elenca le modifiche che puoi attivare/disattivare.

Questa pagina descrive ogni modifica del comportamento che fa parte del framework di compatibilità in Android 12 (livello API 31). Utilizza questo elenco insieme alle opzioni sviluppatore e ai comandi ADB per testare ed eseguire il debug della tua app mentre ti prepari a supportare e scegliere come target Android 12.

Ecco alcune delle cose che puoi fare utilizzando gli strumenti del framework di compatibilità:

  • Testa le modifiche mirate senza modificare effettivamente l'attributo targetSdkVersion dell'app. Puoi utilizzare i pulsanti di attivazione/disattivazione per forzare l'attivazione di modifiche specifiche del comportamento target per valutare l'impatto sulla tua app esistente.
  • Concentra i test solo su modifiche specifiche. Anziché dover gestire tutte le modifiche mirate contemporaneamente, i pulsanti di attivazione/disattivazione ti consentono di disattivare tutte le modifiche mirate, ad eccezione di quelle che vuoi testare.
  • Gestisci i pulsanti di attivazione/disattivazione tramite adb. Puoi utilizzare i comandi adb per attivare e disattivare le modifiche attivabili/disattivabili nell'ambiente di test automatico.
  • Esegui il debug più velocemente utilizzando gli ID modifica standard. Ogni modifica attivabile/disattivabile ha un ID univoco e un nome che puoi utilizzare per eseguire rapidamente il debug della causa principale nell'output del log.

Per informazioni dettagliate sull'utilizzo degli strumenti per ciascuno di questi casi d'uso, consulta Strumenti del framework di compatibilità.

Modifiche del comportamento incluse nel framework di compatibilità

L'elenco in questa sezione descrive ogni modifica al comportamento inclusa nel framework di compatibilità in Android 12.

Puoi filtrare l'elenco delle modifiche in base allo stato predefinito.

Modifiche del comportamento aggiunte al framework di compatibilità in Android 12

ALWAYS_SANDBOX_DISPLAY_APIS

ID modifica: 185004937
Stato predefinito: disattivato per tutte le app.

Se abilitata, applica il sandboxing dell'API Display a un pacchetto indipendentemente dalla modalità finestra. Le API Display forniranno sempre i limiti dell'app.

Per scoprire di più su questa modifica, consulta la sezione relativa ai metodi di visualizzazione deprecati nella pagina delle modifiche del comportamento di Android 12.

AUTOFILL_NON_TEXT_REQUIRES_ON_RECEIVE_CONTENT_LISTENER

ID modifica: 163400105
Stato predefinito: attivato per le app che hanno come target Android 12 (livello API 32) o versioni successive.

A partire da Android 12, la piattaforma può fornire suggerimenti non testuali (come le immagini) utilizzando il framework di compilazione automatica migliorata (consulta i servizi di compilazione automatica). Affinché un'app possa gestire questi suggerimenti, normalmente deve implementare l'API OnReceiveContentListener.

Per semplificare l'adozione di questa API per le app che hanno implementato in precedenza l'API InputConnection.commitContent(InputContentInfo, int, Bundle), riutilizziamo l'API come opzione di riserva se OnReceiveContentListener non è ancora implementata dall'app. Questa opzione di riserva è abilitata solo su Android 12 (livello API 31). Questo ID modifica disattiva il comportamento di riserva, in modo che le app che hanno come target Android 12 (livello API 32) e versioni successive debbano implementare l'API OnReceiveContentListener per accettare suggerimenti non testuali.

BLOCK_FLAG_SLIPPERY

ID modifica: 157929241
Stato predefinito: attivato per tutte le app.

Per le app in esecuzione su Android 12 (livello API 31), controlla se FLAG_SLIPPERY viene utilizzato con qualsiasi finestra nell'app. Ci aspettiamo che questo flag venga utilizzato probabilmente solo dai componenti di sistema, in quanto si tratta di un campo non supportato. In questo caso, verrà limitato.

BLOCK_GPS_STATUS_USAGE

ID modifica: 144027538
Stato predefinito: attivato per le app che hanno come target Android 12 (livello API 31) o versioni successive.

Per le app che hanno come target Android 12 (livello API 31) e versioni successive, tutto l'utilizzo dell'API GpsStatus deve essere sostituito con le API GnssStatus.

BLOCK_IMMUTABLE_PENDING_INTENTS

ID modifica: 171317480
Stato predefinito: attivato per le app che hanno come target Android 12 (livello API 31) o versioni successive.

Per le app che hanno come target Android 12 (livello API 31) e versioni successive, gli oggetti PendingIntent immutabili passati alle API di geolocalizzazione genereranno un IllegalArgumentException.

BLOCK_PENDING_INTENT_SYSTEM_API_USAGE

ID modifica: 169887240
Stato predefinito: attivato per le app che hanno come target Android 12 (livello API 31) o versioni successive.

Per le app destinate ad Android 12 (livello API 31) e versioni successive, le API di sistema LocationRequest non possono essere utilizzate con le richieste di accesso alla posizione PendingIntent.

BLOCK_UNTRUSTED_TOUCHES

ID modifica: 158002302
Stato predefinito: attivato per tutte le app.

Per preservare la sicurezza del sistema e una buona esperienza utente, Android 12 impedisce alle app di utilizzare gli eventi touch in cui un overlay blocca l'app in modo non sicuro.

Per scoprire di più su questa modifica, consulta Gli eventi touch non attendibili sono bloccati.

CALL_ACTIVITY_RESULT_BEFORE_RESUME

ID modifica: 78294732
Stato predefinito: attivato per le app che hanno come target Android 12 (livello API 32) o versioni successive.

Per le app che hanno come target Android 12 (livello API 32) e versioni successive, corregge il ciclo di vita del risultato dell'attività per garantire che un'attività riceva il risultato dell'attività appena prima del ripristino.

CAMERA_MIC_INDICATORS_NOT_PRESENT

ID modifica: 162547999
Stato predefinito: disattivato per tutte le app.

Indica che questo dispositivo supporta gli indicatori di fotocamera e microfono. Sarà false se presente, perché il metodo CompatChanges#isChangeEnabled restituisce true se l'ID modifica non è presente.

CANNOT_INSTALL_WITH_BAD_PERMISSION_GROUPS

ID modifica: 146211400
Stato predefinito: attivato per le app che hanno come target Android 12 (livello API 32) o versioni successive.

Per le app che hanno come target Android 12 (livello API 32) e versioni successive, il gestore di pacchetti non installerà un pacchetto se sono presenti gruppi di autorizzazioni non corretti. I gruppi di autorizzazioni devono essere condivisi solo tra app che condividono un certificato. Se un'autorizzazione appartiene a un gruppo, deve essere definito anche il gruppo.

CHANGE_ID_AUTH_STATE_DENIED

ID modifica: 181350407
Stato predefinito: attivato per le app che hanno come target Android 12 (livello API 31) o versioni successive.

Per le app client che hanno come target Android 12 (livello API 31) e versioni successive, viene generata un'eccezione SecurityException quando si trovano nello stato di autorizzazione negata e tentano di inviare un messaggio a una nanoapp.

CHANGE_ID_SAMPLING_RATE_SENSORS_PERMISSION

ID modifica: 136069189
Stato predefinito: attivato per le app che hanno come target Android 12 (livello API 31) o versioni successive.

Per le app che hanno come target Android 12 (livello API 31) e versioni successive, viene generata un'eccezione SecurityException se non dispongono dell'autorizzazione HIGH_SAMPLING_RATE_SENSORS, vengono eseguite in modalità di debug e richiedono frequenze di campionamento superiori a 200 Hz.

DELIVER_HISTORICAL_LOCATIONS

ID modifica: 73144566
Stato predefinito: attivato per le app che hanno come target Android 12 (livello API 31) o versioni successive.

Per le app che hanno come target Android 12 (livello API 31) e versioni successive, i client di geolocalizzazione potrebbero ricevere posizioni storiche (precedenti al momento attuale) in alcune circostanze.

DISPLAY_INFO_NR_ADVANCED_SUPPORTED

ID modifica: 181658987
Stato predefinito: attivato per le app che hanno come target Android 12 (livello API 31) o versioni successive.

Per le app che hanno come target Android 12 (livello API 31) e versioni successive, offre la compatibilità con le versioni precedenti per le modifiche in TelephonyDisplayInfo.

DISPLAY_MODE_RETURNS_PHYSICAL_REFRESH_RATE

ID modifica: 170503758
Stato predefinito: attivato per le app che hanno come target Android 12 (livello API 31) o versioni successive.

Per le app che hanno come target Android 12 (livello API 31) e versioni successive, la piattaforma potrebbe limitare la frequenza fotogrammi di un'app a un divisore della frequenza di aggiornamento, se è più preferibile (ad esempio, se l'app ha chiamato Surface.setFrameRate(float, int)). Le app subiranno callback Choreographer.postFrameCallback(Choreographer.FrameCallback) e backpressure alla frequenza fotogrammi limitata. Le app utilizzano Display.getRefreshRate() e Display.Mode.getRefreshRate() per conoscere la frequenza di aggiornamento del display. Display.getRefreshRate() restituirà sempre la frequenza fotogrammi dell'applicazione e non la frequenza di aggiornamento del display fisico per consentire alle app di eseguire correttamente il frame pacing. Display.Mode.getRefreshRate() restituirà la frequenza fotogrammi dell'app se compilata in una release precedente e, a partire da Android 12 (livello API 31), restituirà la frequenza di aggiornamento del display fisico.

DOWNSCALED

ID modifica: 168419799
Stato predefinito: disattivato per tutte le app.

Questa modifica è il gatekeeper di tutte le modifiche di riduzione dei buffer per app. L'attivazione di questa modifica consente di applicare i seguenti fattori di scalabilità:

Quando questa modifica viene attivata per un pacchetto applicativo, l'app viene ridimensionata forzatamente al fattore di scalabilità più alto attivato. Ad esempio, viene utilizzato l'80% se sono attivati sia l'80% che il 70% (DOWNSCALE_80 e DOWNSCALE_70).

DOWNSCALE_30

ID modifica: 189970040
Stato predefinito: disattivato per tutte le app.

Quando è attivata anche l'opzione DOWNSCALED, l'attivazione di questa modifica per un pacchetto forza l'app a presupporre che sia in esecuzione su un display con il 30% della risoluzione verticale e orizzontale del display reale.

DOWNSCALE_35

ID modifica: 189969749
Stato predefinito: disattivato per tutte le app.

Quando è attivata anche l'opzione DOWNSCALED, l'attivazione di questa modifica per un pacchetto forza l'app a presupporre che sia in esecuzione su un display con il 35% della risoluzione verticale e orizzontale del display reale.

DOWNSCALE_40

ID modifica: 189970038
Stato predefinito: disattivato per tutte le app.

Quando è attiva anche l'opzione DOWNSCALED, l'attivazione di questa modifica per un pacchetto forza l'app ad assumere che sia in esecuzione su un display con il 40% della risoluzione verticale e orizzontale del display reale.

DOWNSCALE_45

ID modifica: 189969782
Stato predefinito: disattivato per tutte le app.

Quando è attiva anche l'opzione DOWNSCALED, l'attivazione di questa modifica per un pacchetto forza l'app a presupporre che sia in esecuzione su un display con il 45% della risoluzione verticale e orizzontale del display reale.

DOWNSCALE_50

ID modifica: 176926741
Stato predefinito: disattivato per tutte le app.

Quando è attiva anche l'opzione DOWNSCALED, l'attivazione di questa modifica per un pacchetto forza l'app a presupporre che sia in esecuzione su un display con il 50% della risoluzione verticale e orizzontale del display reale.

DOWNSCALE_55

ID modifica: 189970036
Stato predefinito: disattivato per tutte le app.

Quando è attiva anche l'opzione DOWNSCALED, l'attivazione di questa modifica per un pacchetto forza l'app a presupporre che sia in esecuzione su un display con il 55% della risoluzione verticale e orizzontale del display reale.

DOWNSCALE_60

ID modifica: 176926771
Stato predefinito: disattivato per tutte le app.

Quando è attiva anche l'opzione DOWNSCALED, l'attivazione di questa modifica per un pacchetto forza l'app a presupporre che sia in esecuzione su un display con il 60% della risoluzione verticale e orizzontale del display reale.

DOWNSCALE_65

ID modifica: 189969744
Stato predefinito: disattivato per tutte le app.

Quando è attiva anche l'opzione DOWNSCALED, l'attivazione di questa modifica per un pacchetto forza l'app a presupporre che sia in esecuzione su un display con il 65% della risoluzione verticale e orizzontale del display reale.

DOWNSCALE_70

ID modifica: 176926829
Stato predefinito: disattivato per tutte le app.

Quando è attivato anche DOWNSCALED, l'attivazione di questa modifica per un pacchetto forza l'app ad assumere che sia in esecuzione su un display con il 70% della risoluzione verticale e orizzontale del display reale.

DOWNSCALE_75

ID modifica: 189969779
Stato predefinito: disattivato per tutte le app.

Quando è attivato anche DOWNSCALED, l'attivazione di questa modifica per un pacchetto forza l'app a presupporre che sia in esecuzione su un display con il 75% della risoluzione verticale e orizzontale del display reale.

DOWNSCALE_80

ID modifica: 176926753
Stato predefinito: disattivato per tutte le app.

Quando è attivata anche l'opzione DOWNSCALED, l'attivazione di questa modifica per un pacchetto forza l'app ad assumere che sia in esecuzione su un display con l'80% della risoluzione verticale e orizzontale del display reale.

DOWNSCALE_85

ID modifica: 189969734
Stato predefinito: disattivato per tutte le app.

Quando è attiva anche l'opzione DOWNSCALED, l'attivazione di questa modifica per un pacchetto forza l'app a presupporre che sia in esecuzione su un display con l'85% della risoluzione verticale e orizzontale del display reale.

DOWNSCALE_90

ID modifica: 182811243
Stato predefinito: disattivato per tutte le app.

Quando è attiva anche l'opzione DOWNSCALED, l'attivazione di questa modifica per un pacchetto forza l'app a presupporre che sia in esecuzione su un display con il 90% della risoluzione verticale e orizzontale del display reale.

DO_NOT_DOWNSCALE_TO_1080P_ON_TV

ID modifica: 157629738
Stato predefinito: attivato per le app che hanno come target Android 12 (livello API 31) o versioni successive.

Le app per Android TV che hanno come target Android 12 (livello API 31) e versioni successive devono gestire qualsiasi dimensione della finestra, incluse quelle superiori a 1080p. Le app che hanno come target versioni precedenti di Android non prevedono di ricevere finestre di dimensioni superiori a 1080p, pertanto le loro finestre vengono ridotte a 1080p quando necessario.

DROP_CLOSE_SYSTEM_DIALOGS

ID modifica: 174664120
Stato predefinito: attivato per tutte le app.

Per migliorare il controllo dell'utente durante l'interazione con le app e il sistema, l'azione di intent ACTION_CLOSE_SYSTEM_DIALOGS è stata ritirata a partire da Android 12.

Per scoprire di più su questa modifica, consulta la sezione Le app non possono chiudere le finestre di dialogo di sistema.

ENABLE_CHECKS_FOR_PRIVATE_FILES

ID modifica: 172100307
Stato predefinito: attivata per le app che hanno come target Android 12 (livello API 31) o versioni successive.

Le app che hanno come target Android 12 (livello API 31) e versioni successive non possono inserire o aggiornare file privati utilizzando il provider di contenuti multimediali.

ENABLE_DEFERRED_SCAN

ID modifica: 180326732
Stato predefinito: attivato per le app che hanno come target Android 12 (livello API 31) o versioni successive.

Attiva questa opzione per posticipare la scansione attivata nell'ambito di MediaProvider#update().

ENABLE_GET_CALL_STATE_PERMISSION_PROTECTION

ID modifica: 157233955
Stato predefinito: attivato per le app che hanno come target Android 12 (livello API 31) o versioni successive.

Per le app che hanno come target Android 12 (livello API 31) e versioni successive, attiva la protezione READ_PHONE_STATE sulle API che eseguono query e notificano lo stato delle chiamate, ad esempio TelecomManager#getCallState, TelephonyManager.getCallStateForSubscription() e TelephonyCallback.CallStateListener.

ENABLE_GET_PHONE_ACCOUNT_PERMISSION_PROTECTION

ID modifica: 183407956
Stato predefinito: attivato per le app che hanno come target Android 12 (livello API 31) o versioni successive.

Per le app che hanno come target Android 12 (livello API 31) e versioni successive, attiva le protezioni READ_PHONE_NUMBERS o READ_PRIVILEGED_PHONE_STATE su getPhoneAccount(PhoneAccountHandle).

ENABLE_INCLUDE_ALL_VOLUMES

ID modifica: 182734110
Stato predefinito: attivato per le app che hanno come target Android 12 (livello API 31) o versioni successive.

Attiva questa opzione per includere le righe del database dei file di un volume smontato di recente in MediaProvider#query.

ENABLE_RAW_MANAGE_EXTERNAL_STORAGE_ACCESS

ID modifica: 178209446
Stato predefinito: attivato per le app che hanno come target Android 12 (livello API 31) o versioni successive.

Attiva questa opzione per consentire alle app con l'autorizzazione Manifest.permission.MANAGE_EXTERNAL_STORAGE di richiedere l'accesso allo spazio di archiviazione esterno non elaborato.

ENFORCE_MINIMUM_WINDOW_ON_INEXACT_ALARMS

ID modifica: 185199076
Stato predefinito: attivato per le app che hanno come target Android 12 (livello API 31) o versioni successive.

Per le app destinate ad Android 12 (livello API 31) e versioni successive, tutte le sveglie imprecise devono avere una dimensione minima della finestra, che dovrebbe essere nell'ordine di alcuni minuti. In pratica, tutte le sveglie che richiedono finestre più piccole sono uguali alle sveglie esatte e devono utilizzare le API corrispondenti fornite, ad esempio setExact(int, long, PendingIntent). La finestra degli allarmi non esatti con finestre più brevi specificate verrà allungata dal sistema.

ENFORCE_NATIVE_SHARED_LIBRARY_DEPENDENCIES

ID modifica: 142191088
Stato predefinito: attivato per le app che hanno come target Android 12 (livello API 31) o versioni successive.

Le app che hanno come target Android 12 (livello API 31) e versioni successive devono dichiarare le dipendenze dalle librerie native condivise pubbliche definite dal produttore del dispositivo utilizzando il tag uses-native-library nel relativo AndroidManifest.xml. Se una delle dipendenze non può essere soddisfatta, ad esempio se una delle dipendenze non esiste, il gestore di pacchetti non installerà l'app. La dipendenza può essere specificata come facoltativa utilizzando l'attributo android:required nel tag. In questo caso, il mancato soddisfacimento della dipendenza non interromperà l'installazione.

Una volta installata, un'app viene fornita solo con le librerie condivise native specificate nel manifest dell'app. La chiamata di dlopen su una libreria condivisa nativa che non viene visualizzata nel file manifest dell'app non andrà a buon fine anche se esiste effettivamente sul dispositivo.

ENFORCE_STRICT_QUERY_BUILDER

ID modifica: 143231523
Stato predefinito: disattivato per tutte le app.

Se abilitato, SQLiteQueryBuilder verifica tutte le selezioni delle query CalendarProvider2 rispetto ad argomenti dannosi.

FGS_BG_START_RESTRICTION_CHANGE_ID

ID modifica: 170668199
Stato predefinito: attivato per le app che hanno come target Android 12 (livello API 31) o versioni successive.

Per le app che hanno come target Android 12 (livello API 31) e versioni successive, limita i casi in cui le app possono avviare servizi in primo piano mentre sono in esecuzione in background.

FGS_START_EXCEPTION_CHANGE_ID

ID modifica: 174041399
Stato predefinito: attivato per le app che hanno come target Android 12 (livello API 31) o versioni successive.

Per le app che hanno come target Android 12 (livello API 31) e versioni successive, consente al sistema di generare un'eccezione IllegalStateException se un'app tenta di avviare un servizio in primo piano mentre è in esecuzione in background.

FINISH_INPUT_NO_FALLBACK_CONNECTION

ID modifica: 156215187
Stato predefinito: disattivato per tutte le app.

Per le app che hanno come target Android 12 (livello API 31) e versioni successive, termina l'attività InputConnection quando il dispositivo diventa non-interactive.

Se l'opzione è attivata dall'app input method corrente, la connessione di input corrente verrà finished ogni volta che i dispositivi diventano non interattivi.

Se non è attiva, la connessione di input corrente verrà disattivata silenziosamente quando i dispositivi diventano non interattivi e verrà inviata una coppia onFinishInput() e onStartInput() quando il dispositivo torna interattivo.

FORCE_DISABLE_HEVC_SUPPORT

ID modifica: 174227820
Stato predefinito: disattivato per tutte le app.

Disattiva forzatamente il supporto della funzionalità multimediale HEVC da parte di un'app. Le app devono dichiarare le funzionalità multimediali supportate nel loro manifest, ma questo flag può essere utilizzato per forzare un'app a non supportare HEVC, forzando quindi la transcodifica durante l'accesso ai contenuti multimediali codificati in HEVC. L'impostazione di questo flag esegue l'override di qualsiasi impostazione predefinita a livello di sistema operativo per le app. È disattivato per impostazione predefinita, il che significa che le impostazioni predefinite del sistema operativo hanno la precedenza. Se vengono attivati sia questo flag sia FORCE_ENABLE_HEVC_SUPPORT, il sistema operativo ignora entrambi i flag.

FORCE_ENABLE_HEVC_SUPPORT

ID modifica: 174228127
Stato predefinito: disattivato per tutte le app.

Forza l'attivazione di un'app per supportare le funzionalità multimediali HEVC. Le app devono dichiarare le funzionalità multimediali supportate nel proprio manifest, ma questo flag può essere utilizzato per forzare un'app a supportare HEVC, evitando così la transcodifica durante l'accesso ai contenuti multimediali codificati in HEVC. L'impostazione di questo flag sostituisce qualsiasi impostazione predefinita a livello di sistema operativo per le app. È disattivato per impostazione predefinita, il che significa che le impostazioni predefinite del sistema operativo avranno la precedenza. Se vengono attivati sia questo flag sia FORCE_DISABLE_HEVC_SUPPORT, il sistema operativo li ignora entrambi.

FORCE_NON_RESIZE_APP

ID modifica: 181136395
Stato predefinito: disattivato per tutte le app.

Forza la non ridimensionabilità dei pacchetti a cui viene applicato.

FORCE_RESIZE_APP

ID modifica: 174042936
Stato predefinito: disattivato per tutte le app.

Forza il ridimensionamento dei pacchetti a cui viene applicato. Consentiamo il ridimensionamento solo in modalità di visualizzazione a finestre a schermo intero, ma non forziamo l'app in modalità multi-finestra ridimensionabile.

HIDE_PROP_ICUBINARY_DATA_PATH

ID modifica: 171979766
Stato predefinito: attivato per le app che hanno come target Android 12 (livello API 31) o versioni successive.

Per le app che hanno come target Android 12 (livello API 31) e versioni successive, rimuove l'accesso alla proprietà android.icu.impl.ICUBinary.dataPath.

IGNORE_ALLOW_BACKUP_IN_D2D

ID modifica: 183147249
Stato predefinito: attivato per le app che hanno come target Android 12 (livello API 31) o versioni successive.

Per le app che hanno come target Android 12 (livello API 31) e versioni successive, android:allowBackup viene ignorato per le app durante le migrazioni da dispositivo a dispositivo (D2D).

IGNORE_FULL_BACKUP_CONTENT_IN_D2D

ID modifica: 180523564
Stato predefinito: attivato per le app che hanno come target Android 12 (livello API 31) o versioni successive.

Per le app che hanno come target Android 12 (livello API 31) e versioni successive, le regole di inclusione ed esclusione specificate utilizzando android:fullBackupContent vengono ignorate durante i trasferimenti da dispositivo a dispositivo (D2D).

IME_AUTOFILL_DEFAULT_SUPPORTED_LOCALES_IS_EMPTY

ID modifica: 169273070
Stato predefinito: attivato per le app che hanno come target Android 12 (livello API 31) o versioni successive.

Per le app che hanno come target Android 12 (livello API 31) e versioni successive, getSupportedLocales() ora restituisce un elenco di impostazioni internazionali vuoto se non è impostato, anziché le impostazioni internazionali di sistema predefinite.

IS_BACKUP_SERVICE_ACTIVE_ENFORCE_PERMISSION_IN_SERVICE

ID modifica: 158482162
Stato predefinito: abilitato per le app che hanno come target Android 12 (livello API 31) o versioni successive.

Per le app che hanno come target Android 12 (livello API 31) e versioni successive, l'autorizzazione BACKUP necessaria per isBackupServiceActive() viene applicata sul lato servizio anziché sul lato client in BackupManager.

KEYSTORE_OPERATION_CREATION_MAY_FAIL

ID modifica: 169897160
Stato predefinito: disattivato per tutte le app.

Se questa opzione è attiva, la creazione dell'operazione del keystore potrebbe non riuscire in base alla nuova strategia di pruning. Keystore funzionava partendo dal presupposto che la creazione di operazioni crittografiche avesse sempre esito positivo. Tuttavia, il backend KeyMint ha solo un numero limitato di slot per le operazioni.

Per mantenere l'aspetto di slot di operazioni "infiniti", il daemon Keystore eliminava le operazioni utilizzate meno di recente se non era disponibile alcuno slot di operazioni. Di conseguenza, le operazioni corrette potrebbero essere terminate prematuramente. Ciò ha esposto AndroidKeystore ad attacchi Denial of Service (DoS) e a livelock involontari. Ad esempio, se più app si attivano contemporaneamente a causa delle ottimizzazioni della gestione dell'alimentazione e tentano di eseguire operazioni di crittografia, iniziano a terminare le operazioni l'una dell'altra senza fare progressi.

Per uscire dai livelock e scoraggiare i tentativi di DoS, abbiamo modificato la strategia di pruning in modo che preferisca i client che utilizzano brevemente pochi slot di operazioni. Di conseguenza, le singole operazioni che non rimangono inattive per più di 5 secondi si concluderanno quasi sempre senza essere ostacolate dalla strategia di eliminazione. Esistono ancora alcune operazioni relative alla crittografia del file system che possono eliminare anche queste operazioni, ma questi casi sono estremamente rari. Come effetto collaterale di questa nuova strategia di pruning, la creazione di operazioni ora può non riuscire se il client ha una potenza di pruning inferiore a quella di tutte le operazioni esistenti.

Strategia di eliminazione: per trovare un candidato adatto, calcoliamo il malus per il chiamante e per ogni operazione esistente. Il malus è l'inverso della potenza di pruning (chiamante) o della resistenza al pruning (operazione esistente). Affinché il chiamante possa eliminare un'operazione, deve trovare un'operazione con un malus superiore al proprio. Per maggiori dettagli sulla strategia di pruning, consulta l'implementazione di operation.rs. Su Android 11 (livello API 30) e versioni precedenti, KeyStore2 eseguirà il polling del daemon Keystore per uno slot di operazione senza costi. Per le app che hanno come target Android 11 (livello API 30) e versioni precedenti, l'inizializzazione degli oggetti di crittografia e firma sembrerà sempre riuscita, ma potrebbe essere necessario più tempo per ottenere un'operazione. Tutte le versioni di Android beneficiano di una pianificazione più equa degli slot delle operazioni e di una maggiore probabilità di concludere un'operazione con successo.

LOCK_DOWN_CLOSE_SYSTEM_DIALOGS

ID modifica: 174664365
Stato predefinito: attivato per le app che hanno come target Android 12 (livello API 31) o versioni successive.

Per le app che hanno come target Android 12 (livello API 31) e versioni successive, l'intent Intent.ACTION_CLOSE_SYSTEM_DIALOGS non può essere inviato a meno che l'app non disponga anche dell'autorizzazione android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS. Tieni presente che questa è la versione più restrittiva di #DROP_CLOSE_SYSTEM_DIALOGS che prevede che l'app smetta di inviare l'intent Intent.ACTION_CLOSE_SYSTEM_DIALOGS una volta che l'app inizia a scegliere come target Android 12 (livello API 31) o versioni successive.

LOCK_DOWN_COLLAPSE_STATUS_BAR

ID modifica: 173031413
Stato predefinito: attivato per le app che hanno come target Android 12 (livello API 31) o versioni successive.

Per le app che hanno come target Android 12 (livello API 31) e versioni successive, l'autorizzazione Manifest.permission.STATUS_BAR è obbligatoria per comprimere i pannelli della barra di stato per motivi di sicurezza. Questa vulnerabilità veniva sfruttata dal malware per impedire all'utente di accedere alle notifiche critiche.

LOW_POWER_EXCEPTIONS

ID modifica: 168936375
Stato predefinito: attivato per le app che hanno come target Android 12 (livello API 31) o versioni successive.

Per le app che hanno come target Android 12 (livello API 31) e versioni successive, tutti gli oggetti LocationRequest contrassegnati come a basso consumo generano eccezioni se il chiamante non dispone dell'autorizzazione LOCATION_HARDWARE, anziché ignorare silenziosamente la parte a basso consumo della richiesta.

MISSING_EXPORTED_FLAG

ID modifica: 150232615
Stato predefinito: attivato per le app che hanno come target Android 12 (livello API 31) o versioni successive.

Per le app destinate ad Android 12 (livello API 31) e versioni successive, è necessario specificare un valore esplicito per l'attributo android:exported ogni volta che viene definito un filtro per intent.

Per scoprire di più su questa modifica, consulta Esportazione più sicura dei componenti.

NATIVE_HEAP_POINTER_TAGGING_APP_ZYGOTE

ID modifica: 207557677
Stato predefinito: attivato per le app che hanno come target Android 12 (livello API 32) o versioni successive.

Per le app che hanno come target Android 12 (livello API 32) e versioni successive, le allocazioni heap native nel processo AppZygote e nei relativi discendenti utilizzano un tag diverso da zero nel byte più significativo.

Per scoprire di più su questa modifica, consulta Tagged Pointers.

NATIVE_HEAP_ZERO_INIT

ID modifica: 178038272
Stato predefinito: disattivato per tutte le app.

Attiva l'inizializzazione automatica a zero delle allocazioni della memoria heap nativa.

NATIVE_MEMTAG_ASYNC

ID modifica: 135772972
Stato predefinito: disattivato per tutte le app.

Abilita il controllo asincrono (ASYNC) dei tag di memoria in questo processo. Questo flag influisce solo sull'hardware che supporta l'estensione di tagging della memoria (MTE) ARM.

NATIVE_MEMTAG_SYNC

ID modifica: 177438394
Stato predefinito: disattivato per tutte le app.

Attiva il controllo sincrono (SYNC) dei tag di memoria in questo processo. Questo flag influisce solo sull'hardware che supporta l'estensione di tagging della memoria (MTE) ARM. Se sono attivate sia NATIVE_MEMTAG_ASYNC sia questa opzione, quest'ultima ha la precedenza e MTE viene attivata in modalità SYNC.

NEVER_SANDBOX_DISPLAY_APIS

ID modifica: 184838306
Stato predefinito: disattivato per tutte le app.

Se attivato, impedisce l'applicazione del sandboxing dell'API Display a un'attività letterbox o SCM. Le API Display continueranno a fornire i limiti di DisplayArea.

Per scoprire di più su questa modifica, consulta la sezione relativa ai metodi di visualizzazione deprecati nella pagina delle modifiche del comportamento di Android 12.

NOTIFICATION_CANCELLATION_REASONS

ID modifica: 175319604
Stato predefinito: attivato per le app che hanno come target Android 12 (livello API 31) o versioni successive.

Consente ai listener di notifiche di comprendere i nuovi motivi di annullamento più specifici.

NOTIFICATION_TRAMPOLINE_BLOCK

ID modifica: 167676448
Stato predefinito: attivato per le app che hanno come target Android 12 (livello API 31) o versioni successive.

Per migliorare le prestazioni dell'app e l'UX, le app che hanno come target Android 12 non possono utilizzare servizi o broadcast receiver come trampolini di notifica.

Per scoprire di più su questa modifica, consulta Non è possibile creare trampolini di notifica da servizi o broadcast receiver.

NULL_TELEPHONY_THROW_NO_CB

ID modifica: 182185642
Stato predefinito: attivato per le app che hanno come target Android 12 (livello API 31) o versioni successive.

Utilizzato per verificare se la versione dell'SDK target per il processo corrente è Android 12 (livello API 31) o versioni successive.

Si applica ai seguenti metodi:

OVERRIDE_MIN_ASPECT_RATIO

ID modifica: 174042980
Stato predefinito: disattivato per tutte le app.

Questa modifica è il gatekeeper di tutte le modifiche che impongono un determinato formato minimo. L'attivazione di questa modifica consente di applicare le seguenti proporzioni minime:

Quando questa modifica viene attivata per un pacchetto applicativo, le proporzioni minime indicate nel file manifest dell'app vengono sostituite con le proporzioni massime attivate, a meno che il valore del file manifest dell'app non sia superiore.

OVERRIDE_MIN_ASPECT_RATIO_LARGE

ID modifica: 180326787
Stato predefinito: disattivato per tutte le app.

Quando è abilitato anche OVERRIDE_MIN_ASPECT_RATIO, l'attivazione di questa modifica per un pacchetto imposta le proporzioni minime dell'attività su un valore elevato, come definito da OVERRIDE_MIN_ASPECT_RATIO_LARGE_VALUE.

OVERRIDE_MIN_ASPECT_RATIO_MEDIUM

ID modifica: 180326845
Stato predefinito: disattivato per tutte le app.

Quando è abilitato anche OVERRIDE_MIN_ASPECT_RATIO, l'attivazione di questa modifica per un pacchetto imposta il formato minimo dell'attività su un valore medio, come definito da OVERRIDE_MIN_ASPECT_RATIO_MEDIUM_VALUE.

PENDING_INTENT_EXPLICIT_MUTABILITY_REQUIRED

ID modifica: 160794467
Stato predefinito: attivato per le app che hanno come target Android 12 (livello API 31) o versioni successive.

Per le app destinate ad Android 12 (livello API 31) e versioni successive, devi specificare la mutabilità di ogni oggetto PendingIntent creato dalla tua app. Questo requisito aggiuntivo migliora la sicurezza della tua app.

Per scoprire di più su questa modifica, consulta I pending intent devono dichiarare la mutabilità.

PREVENT_SETTING_PASSWORD_QUALITY_ON_PARENT

ID modifica: 165573442
Stato predefinito: attivato per le app che hanno come target Android 12 (livello API 31) o versioni successive.

Le app di amministrazione che hanno come target Android 12 (livello API 31) e versioni successive non possono utilizzare DevicePolicyManager.setPasswordQuality(ComponentName, int) per impostare la qualità della password nell'istanza DevicePolicyManager ottenuta chiamando DevicePolicyManager.getParentProfileInstance(ComponentName). Devono invece utilizzare DevicePolicyManager.setRequiredPasswordComplexity(int) per impostare requisiti per le password generici a livello di dispositivo.

RATE_LIMIT_TOASTS

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

Attiva la limitazione di frequenza per il numero di chiamate Toast.show() per evitare di sovraccaricare l'utente con troppi toast in un periodo di tempo limitato. Qualsiasi tentativo di mostrare più toast di quelli consentiti in un determinato periodo di tempo comporta l'eliminazione del toast.

REQUIRE_EXACT_ALARM_PERMISSION

ID modifica: 171306433
Stato predefinito: attivato per le app che hanno come target Android 12 (livello API 31) o versioni successive.

Per le app destinate ad Android 12 (livello API 31) e versioni successive, le app devono disporre dell'autorizzazione Manifest.permission.SCHEDULE_EXACT_ALARM per utilizzare qualsiasi API per l'impostazione di sveglie esatte, ad esempio setExactAndAllowWhileIdle(int, long, PendingIntent) e setAlarmClock(AlarmClockInfo, PendingIntent).

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_ACTIVE_DATA_SUB_ID

ID modifica: 182478738
Stato predefinito: attivato per le app che hanno come target Android 12 (livello API 31) o versioni successive.

Per le app che hanno come target Android 12 (livello API 31) e versioni successive, le app devono disporre dell'autorizzazione Manifest.permission.READ_PHONE_STATE per chiamare TelephonyCallback.ActiveDataSubscriptionIdListener.

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_CELL_INFO

ID modifica: 184323934
Stato predefinito: attivato per le app che hanno come target Android 12 (livello API 31) o versioni successive.

Per le app che hanno come target Android 12 (livello API 31) e versioni successive, le app devono disporre dell'autorizzazione Manifest.permission.READ_PHONE_STATE per chiamare TelephonyCallback.CellInfoListener.

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_DISPLAY_INFO

ID modifica: 183164979
Stato predefinito: attivato per le app che hanno come target Android 12 (livello API 31) o versioni successive.

Per le app che hanno come target Android 12 (livello API 31) e versioni successive, le app devono disporre dell'autorizzazione Manifest.permission.READ_PHONE_STATE per chiamare TelephonyCallback.DisplayInfoListener.

RESTRICT_ADB_BACKUP

ID modifica: 171032338
Stato predefinito: attivato per le app che hanno come target Android 12 (livello API 31) o versioni successive.

Per le app che hanno come target Android 12 (livello API 31) e versioni successive, adb backup viene attivato automaticamente per le app eseguite come abilitate al debug (android:debuggable impostato su true) e non è disponibile per altre app.

RESTRICT_DOMAINS

ID modifica: 175408749
Stato predefinito: attivato per le app che hanno come target Android 12 (livello API 31) o versioni successive.

Per le app che hanno come target Android 12 (livello API 31) e versioni successive, è necessaria la versione aggiornata dell'API di verifica degli app link. Questo requisito significa che un'app deve dichiarare i domini all'interno di un filtro per intent che include tutti i seguenti elementi:

  • android:autoVerify="true"
  • Intent.ACTION_VIEW
  • Intent.CATEGORY_BROWSABLE
  • Intet.CATEGORY_DEFAULT
  • Solo IntentFilter.SCHEME_HTTP e/o IntentFilter.SCHEME_HTTPS, senza altri schemi

Nelle versioni precedenti di Android, Intent.CATEGORY_BROWSABLE non era un requisito, erano consentiti altri schemi e l'impostazione di autoVerify su true in qualsiasi filtro per intent fingeva implicitamente che tutti i filtri per intent fossero impostati su autoVerify="true".

SECURITY_EXCEPTION_ON_INVALID_ATTRIBUTION_TAG_CHANGE

ID modifica: 151105954
Stato predefinito: attivato per le app che hanno come target Android 12 (livello API 31) o versioni successive.

Per le app che hanno come target Android 12 (livello API 31) e versioni successive, impone che tutti i attributionTags inviati a noteOp(String, int, String), noteProxyOp(String, String) e startOp(String, int, String) siano definiti nel manifest del pacchetto specificato come parametro dei metodi.

Per attivare questa modifica, sia il pacchetto che chiama noteOp(String, int, String) sia il pacchetto specificato come parametro del metodo devono avere questa modifica attivata.

SELINUX_LATEST_CHANGES

ID modifica: 143539591
Stato predefinito: abilitato per le app che hanno come target Android 12 (livello API 31) o versioni successive.

Per le app che hanno come target Android 12 (livello API 31) e versioni successive, attiva le ultime modifiche di SELinux. La disattivazione di questa modifica per un'app che ha come target Android 12 (livello API 31) o versioni successive non ha alcun effetto. Non ha alcun effetto sulle app che utilizzano un ID utente condiviso.

SETTINGS_API_V2

ID modifica: 178111421
Stato predefinito: attivato per tutte le app.

La nuova API per le preferenze utente per la verifica dei domini contrassegnati con autoVerify=true nei filtri per intent AndroidManifest.xml non è ancora implementata nell'anteprima della piattaforma corrente. Per il momento, è possibile visualizzare l'anteprima delle modifiche alle preferenze utente attivando questo ChangeId e utilizzando il comando adb shell pm set-app-links-user-selection e comandi simili.

USE_SHORT_FGS_USAGE_INTERACTION_TIME

ID modifica: 183972877
Stato predefinito: attivato per le app che hanno come target Android 12 (livello API 31) o versioni successive.

Per le app che hanno come target Android 12 (livello API 31) e versioni successive, determina se utilizzare un timeout più breve prima di elevare il bucket di standby a ACTIVE quando le app avviano un servizio in primo piano.