Modifiche al framework di compatibilità (Android 12)

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

In questa pagina viene descritta 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 target senza modificare effettivamente il valore targetSdkVersion dell'app. Puoi utilizzare i pulsanti di attivazione/disattivazione per forzare l'attivazione di modifiche di comportamenti mirati specifici e valutare l'impatto sull'app esistente.
  • Concentra i test solo su modifiche specifiche. Invece di dover gestire tutte le modifiche mirate contemporaneamente, i pulsanti di attivazione/disattivazione ti consentono di disabilitare tutte le modifiche scelte come target, tranne quelle su cui vuoi eseguire il test.
  • Gestisci i pulsanti di attivazione/disattivazione tramite ADB. Puoi utilizzare i comandi adb per abilitare e disabilitare le modifiche attivabili nel tuo ambiente di test automatico.
  • Esegui il debug più rapidamente utilizzando gli ID delle modifiche standard. Le modifiche attivabili hanno ciascuna un ID e un nome univoci che possono essere utilizzati per eseguire rapidamente il debug della causa principale nell'output del log.

Per informazioni dettagliate sull'utilizzo degli strumenti per ognuno 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 del 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

Modifica ID: 185004937
Stato predefinito: disabilitato per tutte le app.

Se questa opzione è abilitata, applica la sandbox dell'API Display a un pacchetto indipendentemente dalla modalità windowing. Le API Display forniranno sempre i limiti per le app.

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

AUTOFILL_NON_TEXT_REQUIRES_ON_RECEIVE_CONTENT_LISTENER

Modifica ID: 163400105
Stato predefinito: attivo per le app destinate ad Android 12 (livello API 32) o versioni successive.

A partire da Android 12, la piattaforma può fornire suggerimenti non testuali (ad esempio immagini) utilizzando il framework di compilazione automatica aumentata (vedi i servizi di compilazione automatica). Affinché un'app sia in grado di gestire questi suggerimenti, di solito deve implementare l'API OnReceiveContentListener.

Per semplificare l'adozione di questa API per le app che hanno già implementato l'API InputConnection.commitContent(InputContentInfo, int, Bundle), la riutilizziamo come alternativa se OnReceiveContentListener non è ancora stato implementato dall'app. Questo video di riserva è abilitato solo su Android 12 (livello API 31). Questo ID modifica disattiva la riserva, pertanto le app che hanno come target Android 12 (livello API 32) e versioni successive devono implementare l'API OnReceiveContentListener per accettare suggerimenti non testuali.

BLOCK_FLAG_SLIPPERY

Modifica ID: 157929241
Stato predefinito: attiva per tutte le app.

Per le app eseguite su Android 12 (livello API 31), controlla se FLAG_SLIPPERY viene utilizzato con eventuali finestre nell'app. Prevediamo che questo flag sia probabilmente utilizzato solo dai componenti di sistema perché è un campo non supportato. In tal caso, sarà soggetto a limitazioni.

BLOCK_GPS_STATUS_USAGE

Modifica ID: 144027538
Stato predefinito: attivato per le app destinate ad Android 12 (livello API 31) o versioni successive.

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

BLOCK_IMMUTABLE_PENDING_INTENTS

Modifica ID: 171317480
Stato predefinito: attivato per le app destinate ad 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 che vengono passati alle API di posizione genereranno un elemento IllegalArgumentException.

BLOCK_PENDING_INTENT_SYSTEM_API_USAGE

Modifica ID: 169887240
Stato predefinito: attivato per le app destinate ad Android 12 (livello API 31) o versioni successive.

Per le app che hanno come target Android 12 (livello API 31) e versioni successive, non è possibile utilizzare le API di sistema LocationRequest con PendingIntent richieste di posizione.

BLOCK_UNTRUSTED_TOUCHES

Modifica ID: 158002302
Stato predefinito: attiva per tutte le app.

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

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

CALL_ACTIVITY_RESULT_BEFORE_RESUME

Modifica ID: 78294732
Stato predefinito: attivato per le app destinate ad 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 appena prima della ripresa.

CAMERA_MIC_INDICATORS_NOT_PRESENT

Modifica ID: 162547999
Stato predefinito: disabilitato per tutte le app.

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

CANNOT_INSTALL_WITH_BAD_PERMISSION_GROUPS

Modifica ID: 146211400
Stato predefinito: attivato per le app destinate ad 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 con formato non corretto. I gruppi di autorizzazioni devono essere condivisi solo tra app che condividono un certificato. Se un'autorizzazione appartiene a un gruppo, è necessario definire anche quel gruppo.

CHANGE_ID_AUTH_STATE_DENIED

Modifica ID: 181350407
Stato predefinito: attivato per le app destinate ad 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 generato un SecurityException quando si trovano nello stato di autorizzazione negata e tentano di inviare un messaggio a una nanoapp.

CHANGE_ID_SAMPLING_RATE_SENSORS_PERMISSION

Modifica ID: 136069189
Stato predefinito: attivato per le app destinate ad Android 12 (livello API 31) o versioni successive.

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

DELIVER_HISTORICAL_LOCATIONS

Modifica ID: 73144566
Stato predefinito: attivato per le app destinate ad Android 12 (livello API 31) o versioni successive.

Per le app che hanno come target Android 12 (livello API 31) e versioni successive, in alcune circostanze i client di posizione potrebbero ricevere posizioni storiche (antecedenti a questa data).

DISPLAY_INFO_NR_ADVANCED_SUPPORTED

Modifica ID: 181658987
Stato predefinito: attivato per le app destinate ad 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

Modifica ID: 170503758
Stato predefinito: attivo per le app destinate ad 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 è stata chiamata a Surface.setFrameRate(float, int)). Le app subiranno callback Choreographer.postFrameCallback(Choreographer.FrameCallback) e contropressione alla frequenza fotogrammi limitata. Le app utilizzano Display.getRefreshRate() e Display.Mode.getRefreshRate() per determinare la frequenza di aggiornamento del display. Display.getRefreshRate() restituirà sempre la frequenza frame dell'applicazione e non la frequenza di aggiornamento del display fisico per consentire alle app di eseguire correttamente il pacing dei frame. Display.Mode.getRefreshRate() restituirà la frequenza frame dell'app se compilata con una release precedente e, a partire da Android 12 (livello API 31), restituirà la frequenza di aggiornamento del display fisico.

DOWNSCALED

Modifica ID: 168419799
Stato predefinito: disabilitato per tutte le app.

Questa modifica determina tutte le modifiche relative al downscaling del buffer per app. Se abiliti questa modifica, è possibile applicare i seguenti fattori di scalabilità:

Quando questa modifica viene abilitata per un pacchetto dell'app, quest'ultima viene ridimensionata forzatamente al fattore di scalabilità abilitato più alto. Ad esempio, l'80% viene utilizzato se sono abilitate entrambe le opzioni 80% e 70% (DOWNSCALE_80 e DOWNSCALE_70).

DOWNSCALE_30

Modifica ID: 189970040
Stato predefinito: disabilitato per tutte le app.

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

DOWNSCALE_35

Modifica ID: 189969749
Stato predefinito: disabilitato per tutte le app.

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

DOWNSCALE_40

Modifica ID: 189970038
Stato predefinito: disabilitato per tutte le app.

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

DOWNSCALE_45

Modifica ID: 189969782
Stato predefinito: disabilitato per tutte le app.

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

DOWNSCALE_50

Modifica ID: 176926741
Stato predefinito: disabilitato per tutte le app.

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

DOWNSCALE_55

Modifica ID: 189970036
Stato predefinito: disabilitato per tutte le app.

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

DOWNSCALE_60

Modifica ID: 176926771
Stato predefinito: disabilitato per tutte le app.

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

DOWNSCALE_65

Modifica ID: 189969744
Stato predefinito: disabilitato per tutte le app.

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

DOWNSCALE_70

Modifica ID: 176926829
Stato predefinito: disattivata per tutte le app.

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

DOWNSCALE_75

Modifica ID: 189969779
Stato predefinito: disabilitato per tutte le app.

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

DOWNSCALE_80

Modifica ID: 176926753
Stato predefinito: disabilitato per tutte le app.

Quando è abilitato anche DOWNSCALED, l'attivazione di questa modifica per un pacchetto obbliga l'app a presumere che sia in esecuzione su un display con l'80% della risoluzione verticale e orizzontale del display reale.

DOWNSCALE_85

Modifica ID: 189969734
Stato predefinito: disabilitata per tutte le app.

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

DOWNSCALE_90

Modifica ID: 182811243
Stato predefinito: disabilitato per tutte le app.

Quando è abilitato anche DOWNSCALED, l'attivazione di questa modifica per un pacchetto obbliga l'app a presumere 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

Modifica ID: 157629738
Stato predefinito: attivo per le app destinate ad 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 dovrebbero gestire qualsiasi dimensione di finestra, incluse quelle di dimensioni superiori a 1080p. Le app destinate a versioni precedenti di Android non prevedono di ricevere Windows con risoluzione superiore a 1080p, quindi le app di Windows vengono ridimensionate a 1080p quando necessario.

DROP_CLOSE_SYSTEM_DIALOGS

Modifica ID: 174664120
Stato predefinito: attiva per tutte le app.

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

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

ENABLE_CHECKS_FOR_PRIVATE_FILES

Modifica ID: 172100307
Stato predefinito: attivato per le app destinate ad 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 fornitore di contenuti multimediali.

ENABLE_DEFERRED_SCAN

Modifica ID: 180326732
Stato predefinito: attivato per le app destinate ad Android 12 (livello API 31) o versioni successive.

Attiva questa opzione per posticipare la scansione attivata come parte di MediaProvider#update().

ENABLE_GET_CALL_STATE_PERMISSION_PROTECTION

Modifica ID: 157233955
Stato predefinito: attivato per le app destinate ad 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 di READ_PHONE_STATE per l'esecuzione di query sulle API e la notifica dello stato delle chiamate, ad esempio TelecomManager#getCallState, TelephonyManager.getCallStateForSubscription() e TelephonyCallback.CallStateListener.

ENABLE_GET_PHONE_ACCOUNT_PERMISSION_PROTECTION

Modifica ID: 183407956
Stato predefinito: attivo per le app destinate ad 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

Modifica ID: 182734110
Stato predefinito: attivato per le app destinate ad Android 12 (livello API 31) o versioni successive.

Abilita questa opzione per includere righe di file di database da un volume smontato di recente in MediaProvider#query.

ENABLE_RAW_MANAGE_EXTERNAL_STORAGE_ACCESS

Modifica ID: 178209446
Stato predefinito: attivato per le app destinate ad Android 12 (livello API 31) o versioni successive.

Abilita questa opzione per consentire alle app che dispongono dell'autorizzazione Manifest.permission.MANAGE_EXTERNAL_STORAGE di richiedere l'accesso allo spazio di archiviazione esterno non elaborato.

ENFORCE_MINIMUM_WINDOW_ON_INEXACT_ALARMS

Modifica ID: 185199076
Stato predefinito: attivato per le app destinate ad 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 allarmi inesatti devono avere una dimensione minima della finestra, che dovrebbe essere nell'ordine di qualche minuto. In pratica, tutti gli allarmi che richiedono finestre più piccole sono gli stessi di quelli esatti e devono utilizzare le API corrispondenti fornite, ad esempio setExact(int, long, PendingIntent). Per un allarme inesatto con finestre più brevi specificate, le finestre verranno allungate dal sistema.

ENFORCE_NATIVE_SHARED_LIBRARY_DEPENDENCIES

Modifica ID: 142191088
Stato predefinito: attivo per le app destinate ad 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 per le librerie condivise native pubbliche definite dal produttore del dispositivo utilizzando il tag uses-native-library nel relativo AndroidManifest.xml. Se una qualsiasi delle dipendenze non può essere soddisfatta (ad esempio se una delle dipendenze non esiste), il gestore di pacchetti non installa l'app. La dipendenza può essere specificata come facoltativa utilizzando l'attributo android:required nel tag. In questo caso, se non viene soddisfatta la dipendenza, l'installazione non verrà arrestata.

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

ENFORCE_STRICT_QUERY_BUILDER

Modifica ID: 143231523
Stato predefinito: disabilitato per tutte le app.

Se abilitata, la SQLiteQueryBuilder verifica tutte le selezioni di query CalendarProvider2 sulla base di argomenti dannosi.

FGS_BG_START_RESTRICTION_CHANGE_ID

Modifica ID: 170668199
Stato predefinito: attivato per le app destinate ad Android 12 (livello API 31) o versioni successive.

Per le app che hanno come target Android 12 (livello API 31) e versioni successive, limita il momento in cui le app possono avviare i servizi in primo piano durante l'esecuzione in background.

FGS_START_EXCEPTION_CHANGE_ID

Modifica ID: 174041399
Stato predefinito: attivo per le app destinate ad 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'istruzione IllegalStateException se un'app tenta di avviare un servizio in primo piano mentre viene eseguita in background.

FINISH_INPUT_NO_FALLBACK_CONNECTION

Modifica ID: 156215187
Stato predefinito: disabilitato per tutte le app.

Per le app che hanno come target Android 12 (livello API 31) e versioni successive, completa la procedura InputConnection quando il dispositivo diventa non-interactive.

Se attivata dal valore input method corrente, la connessione di input corrente sarà finished ogni volta che i dispositivi diventano non interattivi.

Se non viene attivata, la connessione di ingresso corrente verrà disattivata automaticamente quando i dispositivi non saranno interattivi e verrà inviata una coppia onFinishInput() e onStartInput() quando il dispositivo tornerà a essere interattivo.

FORCE_DISABLE_HEVC_SUPPORT

Modifica ID: 174227820
Stato predefinito: disabilitato per tutte le app.

Forza la disattivazione di un'app in modo che non supporti la funzionalità dei contenuti multimediali HEVC. Le app devono dichiarare le funzionalità multimediali supportate nel file manifest, ma questo flag può essere utilizzato per forzare un'app a non supportare HEVC, forzando di conseguenza la transcodifica durante l'accesso ai contenuti multimediali codificati in HEVC. L'impostazione di questo flag sostituisce eventuali valori predefiniti a livello di sistema operativo per le app. È disabilitata per impostazione predefinita, il che significa che le impostazioni predefinite del sistema operativo hanno la precedenza. Se sia questo flag sia FORCE_ENABLE_HEVC_SUPPORT sono abilitati, il sistema operativo ignora entrambi i flag.

FORCE_ENABLE_HEVC_SUPPORT

Modifica ID: 174228127
Stato predefinito: disabilitato per tutte le app.

Forza l'abilitazione di un'app per supportare la funzionalità multimediale HEVC Le app devono dichiarare le funzionalità multimediali supportate nel file manifest, ma questo flag può essere utilizzato per forzare un'app a supportare HEVC, evitando così la transcodifica quando si accede ai contenuti multimediali codificati in HEVC. L'impostazione di questo flag sostituisce qualsiasi impostazione predefinita a livello di sistema operativo per le app. È disabilitata per impostazione predefinita, il che significa che le impostazioni predefinite del sistema operativo hanno la precedenza. Se sia questo flag sia FORCE_DISABLE_HEVC_SUPPORT sono abilitati, il sistema operativo ignora entrambi i flag.

FORCE_NON_RESIZE_APP

Modifica ID: 181136395
Stato predefinito: disabilitato per tutte le app.

Obbliga i pacchetti a cui viene applicato come non ridimensionabili.

FORCE_RESIZE_APP

Modifica ID: 174042936
Stato predefinito: disabilitata per tutte le app.

Forza il ridimensionamento dei pacchetti a cui viene applicato. È consentito il ridimensionamento solo in modalità di windowing a schermo intero, ma non forzando l'app in modalità multi-windowing ridimensionabile.

HIDE_PROP_ICUBINARY_DATA_PATH

Modifica ID: 171979766
Stato predefinito: attivato per le app destinate ad Android 12 (livello API 31) o versioni successive.

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

IGNORE_ALLOW_BACKUP_IN_D2D

Modifica ID: 183147249
Stato predefinito: attivato per le app destinate ad Android 12 (livello API 31) o versioni successive.

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

IGNORE_FULL_BACKUP_CONTENT_IN_D2D

Modifica ID: 180523564
Stato predefinito: attivato per le app destinate ad 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

Modifica ID: 169273070
Stato predefinito: attivato per le app destinate ad 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, anziché le impostazioni internazionali predefinite di sistema.

IS_BACKUP_SERVICE_ACTIVE_ENFORCE_PERMISSION_IN_SERVICE

Modifica ID: 158482162
Stato predefinito: attivato per le app destinate ad 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 lato servizio anziché lato client in BackupManager.

KEYSTORE_OPERATION_CREATION_MAY_FAIL

Modifica ID: 169897160
Stato predefinito: disabilitato per tutte le app.

Se questa opzione è abilitata, la creazione di operazioni dell'archivio chiavi potrebbe non riuscire in base alla nuova strategia di eliminazione. L'archivio chiavi funzionava partendo dal presupposto che la creazione di operazioni crittografiche va sempre a buon fine. Tuttavia, il backend di KeyMint ha solo un numero limitato di slot delle operazioni.

Per mantenere l'aspetto di slot di operazioni "infinite", il daemon Keystore elimina le operazioni utilizzate meno di recente se non fosse disponibile uno slot per le operazioni. Di conseguenza, le operazioni buone potrebbero essere terminate prematuramente. Questo ha consentito ad AndroidKeystore di diventare denial of service (DoS) e livelock involontario. Ad esempio, se più app si sono attivate contemporaneamente a causa di ottimizzazioni della gestione dell'alimentazione e hanno tentato di eseguire operazioni di crittografia, iniziano a terminare le operazioni delle altre senza alcun progresso.

Per uscire dai livelock e scoraggiare i tentativi di DoS, abbiamo cambiato la strategia di eliminazione in modo da preferire i client che utilizzano per breve tempo pochi slot delle 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 comunque alcune operazioni relative alla crittografia del file system che possono eliminare anche queste operazioni, ma si tratta di casi estremamente rari. Come effetto collaterale di questa nuova operazione di eliminazione della strategia, la creazione ora può non riuscire se il client ha una potenza di eliminazione inferiore rispetto a 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'opposto della potenza di potatura (chiamante) o della resistenza di potatura (operazione esistente). Affinché il chiamante possa eliminare un'operazione, deve trovare un'operazione con un malus superiore alla propria. Per maggiori dettagli sulla strategia di eliminazione, consulta l'implementazione di operation.rs. Su Android 11 (livello API 30) e versioni precedenti, KeyStore2 eseguirà il polling del daemon Keystore per ottenere uno slot operativo senza costi. Per le app che hanno come target Android 11 (livello API 30) e versioni precedenti, l'inizializzazione degli oggetti con crittografia e firma avrà sempre esito positivo, ma potrebbe essere necessario più tempo per ottenere un'operazione. Tutte le versioni di Android traggono vantaggio da una pianificazione più equa degli slot delle operazioni e da una migliore possibilità di concludere un'operazione.

LOCK_DOWN_CLOSE_SYSTEM_DIALOGS

Modifica ID: 174664365
Stato predefinito: attivato per le app destinate ad Android 12 (livello API 31) o versioni successive.

Per le app che hanno come target Android 12 (livello API 31) e versioni successive, 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 avviata l'app e ha come target Android 12 (livello API 31) o versioni successive.

LOCK_DOWN_COLLAPSE_STATUS_BAR

Modifica ID: 173031413
Stato predefinito: attivo per le app destinate ad Android 12 (livello API 31) o versioni successive.

Per le app che hanno come target Android 12 (livello API 31) e versioni successive, per motivi di sicurezza è necessaria l'autorizzazione Manifest.permission.STATUS_BAR per comprimere i riquadri della barra di stato. Questo era sfruttato da malware per impedire all'utente di accedere a notifiche critiche.

LOW_POWER_EXCEPTIONS

Modifica ID: 168936375
Stato predefinito: attivato per le app destinate ad 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 bassa potenza generano eccezioni se il chiamante non dispone dell'autorizzazione LOCATION_HARDWARE, anziché eliminare automaticamente la parte a basso consumo della richiesta.

MISSING_EXPORTED_FLAG

Modifica ID: 150232615
Stato predefinito: attivo per le app destinate ad Android 12 (livello API 31) o versioni successive.

Per le app che hanno come target 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

Modifica ID: 207557677
Stato predefinito: attivo per le app destinate ad 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 di heap nativi nel processo AppZygote e i relativi discendenti utilizzano un tag diverso da zero nel byte più significativo.

Per scoprire di più su questa modifica, consulta la sezione Punteggi codificati.

NATIVE_HEAP_ZERO_INIT

Modifica ID: 178038272
Stato predefinito: disabilitata per tutte le app.

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

NATIVE_MEMTAG_ASYNC

Modifica ID: 135772972
Stato predefinito: disabilitato per tutte le app.

Attiva il controllo dei tag di memoria asincrono (ASYNC) in questo processo. Questo flag riguarda solo l'hardware che supporta l'estensione MTE (Memory Tagging Extension) ARM.

NATIVE_MEMTAG_SYNC

Modifica ID: 177438394
Stato predefinito: disabilitato per tutte le app.

Consente il controllo dei tag di memoria sincrona (SYNC) in questo processo. Questo flag riguarda solo l'hardware che supporta l'estensione MTE (Memory Tagging Extension) ARM. Se NATIVE_MEMTAG_ASYNC e questa opzione sono abilitati, questa opzione ha la precedenza e l'MTE è abilitato in modalità SYNC.

NEVER_SANDBOX_DISPLAY_APIS

Modifica ID: 184838306
Stato predefinito: disabilitato per tutte le app.

Se questa opzione è abilitata, impedisce che la sandbox dell'API Display venga applicata a un'attività letterbox o SCM. Le API Display continueranno a fornire i limiti DisplayArea.

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

NOTIFICATION_CANCELLATION_REASONS

Modifica ID: 175319604
Stato predefinito: attivato per le app destinate ad 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

Modifica ID: 167676448
Stato predefinito: attivato per le app destinate ad Android 12 (livello API 31) o versioni successive.

Per migliorare le prestazioni e l'esperienza utente, le app destinate ad Android 12 non possono usare servizi o broadcast receiver come trampolini per le notifiche.

Per ulteriori informazioni su questa modifica, consulta l'argomento Non è possibile creare trampolini per le notifiche da servizi o broadcast receiver.

NULL_TELEPHONY_THROW_NO_CB

Modifica ID: 182185642
Stato predefinito: attivo per le app destinate ad Android 12 (livello API 31) o versioni successive.

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

Si applica ai seguenti metodi:

OVERRIDE_MIN_ASPECT_RATIO

Modifica ID: 174042980
Stato predefinito: disabilitata per tutte le app.

Questa modifica determina tutte le modifiche che forzano determinate proporzioni minime. L'attivazione di questa modifica consente l'applicazione delle seguenti proporzioni minime:

Quando questa modifica viene abilitata per un pacchetto dell'app, il formato minimo specificato nel file manifest dell'app viene sostituito al formato abilitato più grande, a meno che il valore del file manifest dell'app non sia superiore.

OVERRIDE_MIN_ASPECT_RATIO_LARGE

Modifica ID: 180326787
Stato predefinito: disabilitato 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

Modifica ID: 180326845
Stato predefinito: disabilitato 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 medio come definito da OVERRIDE_MIN_ASPECT_RATIO_MEDIUM_VALUE.

PENDING_INTENT_EXPLICIT_MUTABILITY_REQUIRED

Modifica ID: 160794467
Stato predefinito: attivo per le app destinate ad Android 12 (livello API 31) o versioni successive.

Per le app che hanno come target Android 12 (livello API 31) e versioni successive, devi specificare la mutabilità di ogni oggetto PendingIntent creato dall'app. Questo requisito aggiuntivo migliora la sicurezza della tua app.

Per scoprire di più su questa modifica, consulta l'articolo Gli intent in attesa devono dichiarare la mutabilità.

PREVENT_SETTING_PASSWORD_QUALITY_ON_PARENT

Modifica ID: 165573442
Stato predefinito: attivato per le app destinate ad Android 12 (livello API 31) o versioni successive.

Le app amministrative 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 sull'istanza DevicePolicyManager ottenuta chiamando DevicePolicyManager.getParentProfileInstance(ComponentName). Dovrà invece usare DevicePolicyManager.setRequiredPasswordComplexity(int) per impostare requisiti per le password granulari a livello di dispositivo.

RATE_LIMIT_TOASTS

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

Consente di limitare la frequenza del 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 quanto consentito in un determinato periodo di tempo comporta l'eliminazione del toast.

REQUIRE_EXACT_ALARM_PERMISSION

Modifica ID: 171306433
Stato predefinito: attivato per le app destinate ad 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.SCHEDULE_EXACT_ALARM per poter usare 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

Modifica ID: 182478738
Stato predefinito: attivato per le app destinate ad 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

Modifica ID: 184323934
Stato predefinito: attivato per le app destinate ad 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

Modifica ID: 183164979
Stato predefinito: attivato per le app destinate ad 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

Modifica ID: 171032338
Stato predefinito: attivato per le app destinate ad 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 di cui è possibile eseguire il debug (android:debuggable impostato su true) e non è disponibile per altre app.

RESTRICT_DOMAINS

Modifica ID: 175408749
Stato predefinito: attivato per le app destinate ad Android 12 (livello API 31) o versioni successive.

Per le app che hanno come target Android 12 (livello API 31) e versioni successive, è richiesta la forma aggiornata dell'API App Links Verification. Questo requisito significa che un'app deve dichiarare i domini all'interno di un filtro per intent che includa quanto segue:

  • 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 un filtro per intent avrebbe implicitamente utilizzato i filtri per intent impostati su autoVerify="true".

SECURITY_EXCEPTION_ON_INVALID_ATTRIBUTION_TAG_CHANGE

Modifica ID: 151105954
Stato predefinito: attivo per le app destinate ad 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 valori 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 abilitare questa modifica, è necessario che questa modifica sia abilitata sia per il pacchetto che chiama noteOp(String, int, String) sia per il pacchetto specificato come parametro del metodo.

SELINUX_LATEST_CHANGES

Modifica ID: 143539591
Stato predefinito: attivato per le app destinate ad 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 è autonoma e non ha alcun effetto per le app che utilizzano un ID utente condiviso.

SETTINGS_API_V2

Modifica ID: 178111421
Stato predefinito: attiva per tutte le app.

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

USE_SHORT_FGS_USAGE_INTERACTION_TIME

Modifica ID: 183972877
Stato predefinito: attivato per le app destinate ad 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 in standby a ACTIVE quando le app avviano un servizio in primo piano.