Cambiamenti del comportamento: tutte le app

La piattaforma Android 12 include modifiche al comportamento che potrebbero interessare la tua app. Le seguenti modifiche al comportamento si applicano a tutte le app quando vengono eseguite su Android 12, indipendentemente da targetSdkVersion. Dovresti testare la tua app e poi modificarla in base alle necessità per supportarle correttamente, ove applicabile.

Assicurati di esaminare anche l'elenco delle modifiche al comportamento che interessano solo le app con target Android 12.

Esperienza utente

Effetto di stretching durante lo scorrimento

Sui dispositivi con Android 12 e versioni successive, il comportamento visivo per gli eventi di scorrimento eccessivo cambia.

Su Android 11 e versioni precedenti, un evento di scorrimento eccessivo fa brillare gli elementi visivi. Su Android 12 e versioni successive, gli elementi visivi si allungano e tornano indietro in seguito a un evento di trascinamento e si spostano e tornano indietro in seguito a un evento di lancio.

Per saperne di più, consulta la guida sull'animazione dei gesti di scorrimento.

Schermate iniziali delle app

Se in precedenza hai implementato una schermata iniziale personalizzata in Android 11 o versioni precedenti, dovrai eseguire la migrazione dell'app all'API SplashScreen per assicurarti che venga visualizzata correttamente a partire da Android 12. Se non esegui la migrazione dell'app, l'esperienza di lancio dell'app sarà degradata o involontaria.

Per istruzioni, consulta Eseguire la migrazione dell'implementazione della schermata iniziale esistente ad Android 12.

Inoltre, a partire da Android 12, il sistema applica sempre la nuova schermata iniziale predefinita del sistema Android agli avvii a freddo e agli avvii caldi per tutte le app. Per impostazione predefinita, questa schermata iniziale predefinita del sistema viene creata utilizzando l'elemento icona del programma di avvio dell'app e il valore windowBackground del tema (se è di un solo colore).

Per maggiori dettagli, consulta la guida per gli sviluppatori sulle schermate di benvenuto.

Risoluzione dell'intent web

A partire da Android 12 (livello API 31), un'intent web generica viene risolta in un'attività nella tua app solo se l'app è approvata per il dominio specifico contenuto nell'intent web. Se la tua app non è approvata per il dominio, l'intent web viene risolto nell'app browser predefinita dell'utente.

Le app possono ottenere questa approvazione seguendo una delle seguenti procedure:

Se la tua app richiama intent web, ti consigliamo di aggiungere una richiesta o una finestra di dialogo che chieda all'utente di confermare l'azione.

Miglioramenti alla modalità immersiva per la navigazione tramite gesti

Android 12 consolida il comportamento esistente per consentire agli utenti di eseguire comandi di navigazione con i gesti in modalità immersiva. Inoltre, Android 12 offre un comportamento di compatibilità con le versioni precedenti per la modalità immersa.

Display#getRealSize e getRealMetrics: ritiro e vincoli

I dispositivi Android sono disponibili in molti fattori di forma diversi, ad esempio schermi di grandi dimensioni, tablet e dispositivi pieghevoli. Per visualizzare i contenuti in modo appropriato per ogni dispositivo, l'app deve determinare le dimensioni dello schermo o del display. Nel corso del tempo, Android ha fornito API diverse per recuperare queste informazioni. In Android 11, abbiamo introdotto l'API WindowMetrics e ritirato questi metodi:

In Android 12 continueremo a consigliare l'utilizzo di WindowMetrics e ritireremo questi metodi:

Per attenuare il comportamento delle applicazioni che utilizzano le API Display per recuperare i limiti dell'applicazione, Android 12 limita i valori restituiti dalle API per le app che non sono completamente ridimensionabili. Ciò potrebbe influire sulle app che utilizzano queste informazioni con MediaProjection.

Le app devono utilizzare le API WindowMetrics per eseguire query sui limiti della finestra e Configuration.densityDpi per eseguire query sulla densità corrente.

Per una compatibilità più ampia con le versioni precedenti di Android, puoi utilizzare la libreria Jetpack WindowManager, che include una classe WindowMetrics che supporta Android 4.0 (livello API 14) e versioni successive.

Esempi di utilizzo di WindowMetrics

Innanzitutto, assicurati che le attività della tua app siano completamente ridimensionabili.

Un'attività deve basarsi su WindowMetrics da un contesto dell'attività per qualsiasi lavoro correlato all'interfaccia utente, in particolare WindowManager.getCurrentWindowMetrics() o WindowMetricsCalculator.computeCurrentWindowMetrics() di Jetpack.

Se la tua app crea un MediaProjection, i limiti devono avere le dimensioni corrette poiché la proiezione acquisisce la partizione del display in cui è in esecuzione l'app del proiettore.

Se l'app è completamente ridimensionabile, il contesto dell'attività restituisce i limiti corretti come segue:

Kotlin

val projectionMetrics: WindowMetrics = activityContext
      .getSystemService(WindowManager::class.java).maximumWindowMetrics

Java

WindowMetrics projectionMetrics = activityContext
      .getSystemService(WindowManager.class).getMaximumWindowMetrics();

Se l'app non è completamente ridimensionabile, deve eseguire una query da un'istanza WindowContext e recuperare il WindowMetrics dei limiti dell'attività utilizzando WindowManager.getMaximumWindowMetrics() o il metodo Jetpack WindowMetricsCalculator.computeMaximumWindowMetrics().

Kotlin

val windowContext = context.createWindowContext(mContext.display!!,
      WindowManager.LayoutParams.TYPE_APPLICATION, null)
val projectionMetrics = windowContext.getSystemService(WindowManager::class.java)
      .maximumWindowMetrics

Java

Context windowContext = context.createWindowContext(mContext.getDisplay(),
      WindowManager.LayoutParams.TYPE_APPLICATION, null);
WindowMetrics projectionMetrics = windowContext.getSystemService(WindowManager.class)
      .getMaximumWindowMetrics();

Tutte le app in modalità multi-finestra

In Android 12 la modalità multi-finestra è un comportamento standard.

Su schermi di grandi dimensioni (sw >= 600 dp), la piattaforma supporta tutte le app in modalità multi-finestra, indipendentemente dalla configurazione dell'app. Se resizeableActivity="false", l'app viene messa in modalità di compatibilità quando necessario per adattarsi alle dimensioni del display.

Su schermi di piccole dimensioni (larghezza dello schermo < 600 dp), il sistema controlla minWidth e minHeight di un'attività per determinare se può essere eseguita in modalità multi-finestra. Se resizeableActivity="false", viene impedita l'esecuzione dell'app in modalità multi-finestra indipendentemente da larghezza e altezza minime.

Per ulteriori informazioni, consulta Supporto multifinestra.

Anteprima della fotocamera su schermi di grandi dimensioni

In genere, le app Fotocamera presuppongono una relazione fissa tra l'orientamento del dispositivo e il formato dell'anteprima della fotocamera. Tuttavia, i fattori di forma con schermi di grandi dimensioni, come i dispositivi pieghevoli, e le modalità di visualizzazione come il multi-finestra e il multi-display mettono in discussione questa affermazione.

Su Android 12, le app della fotocamera che richiedono un orientamento specifico dello schermo e non sono ridimensionabili (resizeableActivity="false") attivano automaticamente la modalità Ritratto in primo piano, che garantisce l'orientamento e il formato corretto dell'anteprima della fotocamera. Sui dispositivi pieghevoli e su altri dispositivi con un livello di astrazione hardware della fotocamera (HAL), viene applicata una rotazione aggiuntiva all'uscita della fotocamera per compensare l'orientamento del sensore della fotocamera e l'uscita della fotocamera viene ritagliata in modo che corrisponda alle proporzioni dell'anteprima della fotocamera dell'app. Il ritaglio e la rotazione aggiuntiva garantiscono la corretta presentazione dell'anteprima della fotocamera indipendentemente dall'orientamento e dallo stato aperto o chiuso del dispositivo.

Ritardo dell'esperienza utente per le notifiche dei servizi in primo piano

Per offrire un'esperienza semplificata per i servizi in primo piano di breve durata, i dispositivi con Android 12 o versioni successive possono ritardare la visualizzazione delle notifiche dei servizi in primo piano di 10 secondi, con poche eccezioni. Questa variazione offre alle attività di breve durata la possibilità di essere completate prima che le relative notifiche appaiano.

Prestazioni

Bucket di app in standby con limitazioni

Android 11 (livello API 30) ha introdotto il bucket con limitazioni come bucket App Standby. A partire da Android 12, questo bucket è attivo per impostazione predefinita. Il bucket con limitazioni ha la priorità più bassa (e le limitazioni più elevate) tra tutti i bucket. I bucket in ordine di priorità, dalla più alta alla più bassa, sono:

  1. Attiva: l'app è attualmente in uso o è stata utilizzata di recente.
  2. Set di lavoro: l'app è in uso regolare.
  3. Frequente: l'app viene utilizzata spesso, ma non ogni giorno.
  4. Raro: l'app non viene utilizzata di frequente.
  5. Con restrizioni: l'app consuma molte risorse di sistema o potrebbe mostrare un comportamento indesiderato.

Il sistema prende in considerazione il comportamento della tua app, oltre ai modelli di utilizzo, per decidere se inserirla nel bucket con limitazioni.

È meno probabile che la tua app venga inserita nel bucket con limitazioni se utilizza le risorse di sistema in modo più responsabile. Inoltre, il sistema inserisce la tua app in un bucket meno restrittivo se l'utente interagisce direttamente con la tua app.

Verificare se l'app è nel bucket con limitazioni

Per verificare se il sistema ha inserito la tua app nel bucket con limitazioni, chiama getAppStandbyBucket(). Se il valore restituito di questo metodo è STANDBY_BUCKET_RESTRICTED, la tua app appartiene al bucket con limitazioni.

Testare il comportamento del bucket con limitazioni

Per testare il comportamento dell'app quando il sistema la inserisce nel bucket con limitazioni, puoi spostarla manualmente in quel bucket. Per farlo, esegui il seguente comando in una finestra del terminale:

adb shell am set-standby-bucket PACKAGE_NAME restricted

Sicurezza e privacy

Posizione approssimativa

La finestra di dialogo contiene due insiemi di opzioni, una sopra l&#39;altra.
Figura 1. Finestra di dialogo delle autorizzazioni di sistema che consente all'utente di concedere informazioni sulla posizione approssimativa.

Sui dispositivi con Android 12 o versioni successive, gli utenti possono richiedere che la tua app abbia accesso solo alle informazioni sulla posizione approssimativa.

Se la tua app richiede l'ACCESS_FINE_LOCATION autorizzazione di runtime, devi richiedere anche l'ACCESS_COARSE_LOCATION autorizzazione per gestire il caso in cui l'utente concede l'accesso alla posizione approssimativa alla tua app. Devi includere entrambe le autorizzazioni in un'unica richiesta di runtime.

La finestra di dialogo delle autorizzazioni di sistema include le seguenti opzioni per l'utente, come mostrato nella figura 1:

  • Esatta: fornisce l'accesso a informazioni sulla posizione esatta.
  • Approssimativa: fornisce l'accesso solo a informazioni sulla posizione approssimative.

Attivazione/disattivazione di microfono e fotocamera

I dispositivi supportati con Android 12 o versioni successive consentono agli utenti di attivare e disattivare l'accesso alla fotocamera e al microfono per tutte le app sul dispositivo premendo un'unica opzione di attivazione/disattivazione. Gli utenti possono accedere alle opzioni di attivazione/disattivazione dalle Impostazioni rapide, come mostrato nella Figura 1, o dalla schermata Privacy nelle impostazioni di sistema.

Scopri di più su questi pulsanti di attivazione/disattivazione e su come verificare che la tua app segua le best practice relative alle autorizzazioni CAMERA e RECORD_AUDIO.

Indicatori microfono e fotocamera

Sui dispositivi con Android 12 o versioni successive, quando un'app accede al microfono o alla fotocamera, nella barra di stato viene visualizzata un'icona.

Scopri di più su questi indicatori e su come verificare che la tua app segua le best practice relative alle autorizzazioni CAMERA e RECORD_AUDIO.

I riquadri delle Impostazioni rapide sono etichettati come &quot;Accesso alla fotocamera&quot; e
          &quot;Accesso al microfono&quot;
Figura 2. I pulsanti di attivazione/disattivazione del microfono e della fotocamera nelle Impostazioni rapide.
Un rettangolo arrotondato nell&#39;angolo in alto a destra, che include un&#39;icona della videocamera e un&#39;icona del microfono
Figura 3. Indicatori di microfono e fotocamera che mostrano l'accesso ai dati recente.

Visibilità del pacchetto di autorizzazioni

Sui dispositivi con Android 12 o versioni successive, le app che hanno come target Android 11 (livello API 30) o versioni successive e che chiamano uno dei seguenti metodi ricevono un insieme filtrato di risultati, in base alla visibilità del pacchetto dell'app in altre app:

Implementazione di BouncyCastle rimossa

Android 12 rimuove molte implementazioni di BouncyCastle di algoritmi criptografici precedentemente ritirati, inclusi tutti gli algoritmi AES. Il sistema utilizza invece le implementazioni di Conscrypt di questi algoritmi.

Questa modifica interessa la tua app se una delle seguenti condizioni è vera:

  • La tua app utilizza dimensioni delle chiavi di 512 bit. Conscrypt non supporta questa dimensione della chiave. Se necessario, aggiorna la logica di crittografia dell'app per utilizzare dimensioni di chiavi diverse.
  • La tua app utilizza dimensioni delle chiavi non valide con KeyGenerator. L'implementazione di KeyGenerator di Conscrypt esegue una convalida aggiuntiva sui parametri chiave rispetto a BouncyCastle. Ad esempio, Conscrypt non consente alla tua app di generare una chiave AES a 64 bit perché AES supporta solo chiavi a 128, 192 e 256 bit.

    BouncyCastle consente di generare chiavi di dimensioni non valide, ma in seguito non riesce se queste chiavi vengono utilizzate con un Cipher. Conscrypt non va a buon fine in precedenza.

  • Inizializzi le crittografie Galois/Counter Mode (GCM) utilizzando una dimensione diversa da 12 byte. L'implementazione di GcmParameterSpec di Conscrypt richiede un initialization di 12 byte, come consigliato dal NIST.

Notifiche di accesso agli appunti

Su Android 12 e versioni successive, quando un'app chiama getPrimaryClip() per accedere ai dati dei clip da un'altra app per la prima volta, un messaggio popup informa l'utente di questo accesso alla clipboard.

Il testo all'interno del messaggio popup ha il seguente formato: APP pasted from your clipboard.

Informazioni sul testo nella descrizione del clip

Su Android 12 e versioni successive, getPrimaryClipDescription() può rilevare i seguenti dettagli:

Le app non possono chiudere le finestre di dialogo di sistema

Per migliorare il controllo dell'utente quando interagisce con le app e il sistema, l'azione di intent ACTION_CLOSE_SYSTEM_DIALOGS è stata ritirata a partire da Android 12. Ad eccezione di alcuni casi speciali, quando la tua app tenta di richiamare un'intent che contiene questa azione, il sistema esegue una delle seguenti operazioni in base alla versione dell'SDK di destinazione della tua app:

  • Se la tua app ha come target Android 12 o versioni successive, si verifica un SecurityException.
  • Se la tua app ha come target Android 11 (livello API 30) o versioni precedenti, l'intent non viene eseguito e nel Logcat viene visualizzato il seguente messaggio:

    E ActivityTaskManager Permission Denial: \
    android.intent.action.CLOSE_SYSTEM_DIALOGS broadcast from \
    com.package.name requires android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS, \
    dropping broadcast.
    

Eccezioni

Nei seguenti casi, un'app può comunque chiudere le finestre di dialogo di sistema su Android 12 o versioni successive:

  • L'app sta eseguendo un test di instrumentation.
  • La tua app ha come target Android 11 o versioni precedenti e mostra una finestra sopra il cassetto delle notifiche.

  • L'app è destinata ad Android 11 o versioni precedenti. Inoltre, l'utente ha interagito con una notifica, eventualmente utilizzando i pulsanti di azione della notifica, e la tua app sta elaborando un servizio o un ricevitore di annunci broadcast in risposta a questa azione dell'utente.

  • La tua app ha come target Android 11 o versioni precedenti e dispone di un servizio di accessibilità attivo. Se la tua app ha come target Android 12 e vuole chiudere la barra delle notifiche, utilizza l'azione di accessibilità GLOBAL_ACTION_DISMISS_NOTIFICATION_SHADE.

Gli eventi touch non attendibili sono bloccati

Per preservare la sicurezza del sistema e un'esperienza utente positiva, Android 12 impedisce alle app di consumare eventi di tocco quando un overlay oscura l'app in modo non sicuro. In altre parole, il sistema blocca i tocchi che passano attraverso determinate finestre, con alcune eccezioni.

App interessate

Questa modifica interessa le app che scelgono di consentire il passaggio dei tocchi attraverso le proprie finestre, ad esempio utilizzando il FLAG_NOT_TOUCHABLE flag. Ecco alcuni esempi, senza alcuna limitazione:

  • Sovrapposizioni che richiedono l'autorizzazione SYSTEM_ALERT_WINDOW, come le finestre che utilizzano TYPE_APPLICATION_OVERLAY, e utilizzano il flag FLAG_NOT_TOUCHABLE.
  • Finestre di attività che utilizzano il flag FLAG_NOT_TOUCHABLE.

Eccezioni

Nei seguenti casi, i tocchi "pass-through" sono consentiti:

  • Interazioni all'interno dell'app.L'app mostra l'overlay, che viene visualizzato solo quando l'utente interagisce con l'app.
  • Finestre attendibili. Queste finestre includono, a titolo esemplificativo:

  • Finestre invisibili. La visualizzazione principale della finestra è GONE o INVISIBLE.

  • Finestre completamente trasparenti. La proprietà alpha è pari a 0,0 per la finestra.

  • Finestre di avviso del sistema sufficientemente traslucide. Il sistema considera un insieme di finestre di avviso di sistema sufficientemente traslucide quando l'opacità combinata è minore o uguale all'opacità di oscuramento massima del sistema per i tocchi. In Android 12, questa opacità massima è 0,8 per impostazione predefinita.

Rilevare quando viene bloccato un tocco non attendibile

Se un'azione tocco viene bloccata dal sistema, Logcat registra il seguente messaggio:

Untrusted touch due to occlusion by PACKAGE_NAME

Testa la modifica

I tocchi non attendibili sono bloccati per impostazione predefinita sui dispositivi con Android 12 o versioni successive. Per consentire i tocchi non attendibili, esegui il seguente comando ADB in una finestra del terminale:

# A specific app
adb shell am compat disable BLOCK_UNTRUSTED_TOUCHES com.example.app

# All apps
# If you'd still like to see a Logcat message warning when a touch would be
# blocked, use 1 instead of 0.
adb shell settings put global block_untrusted_touches 0

Per ripristinare il comportamento predefinito (i tocchi non attendibili sono bloccati), esegui il seguente comando:

# A specific app
adb shell am compat reset BLOCK_UNTRUSTED_TOUCHES com.example.app

# All apps
adb shell settings put global block_untrusted_touches 2

Ciclo di vita dell'attività

Le attività del programma di avvio principale non vengono più completate con la pressione del tasto Indietro

Android 12 modifica la gestione predefinita del tasto Indietro del sistema sulle attività del programma di avvio che si trovano alla radice delle relative attività. Nelle versioni precedenti, il sistema completava queste attività con la pressione del tasto Indietro. In Android 12, il sistema ora sposta l'attività e la relativa attività in background anziché terminare l'attività. Il nuovo comportamento corrisponde a quello attuale quando esci da un'app utilizzando il pulsante Home o il gesto.

Per la maggior parte delle app, questa modifica significa che gli utenti che utilizzano il pulsante Indietro per uscire dalla tua app possono riprendere più rapidamente l'app da uno stato attivo, invece di dover riavviare completamente l'app da uno stato inattivo.

Ti consigliamo di testare le tue app con questa modifica. Se al momento la tua app sostituisce onBackPressed() per gestire la navigazione indietro e completareActivity, aggiorna l'implementazione in modo da chiamare super.onBackPressed() anziché completare. La chiamata di super.onBackPressed() sposta l'attività e la relativa attività in background, se opportuno, e offre agli utenti un'esperienza di navigazione più coerente tra le app.

Tieni inoltre presente che, in generale, consigliamo di utilizzare le API AndroidX Activity per fornire la navigazione a ritroso personalizzata anziché eseguire l'override di onBackPressed(). Le API AndroidX Activity fanno automaticamente riferimento al comportamento di sistema appropriato se non sono presenti componenti che intercettano la pressione del tasto Indietro del sistema.

Grafici e immagini

Miglioramento del passaggio alla frequenza di aggiornamento

In Android 12, le modifiche alla frequenza di aggiornamento tramite setFrameRate() possono verificarsi indipendentemente dal fatto che il display supporti o meno una transizione senza interruzioni alla nuova frequenza di aggiornamento. Una transizione senza interruzioni è una transizione che non presenta interruzioni visive, ad esempio una schermata nera per uno o due secondi. In precedenza, se il display non supportava una transizione senza interruzioni, in genere continuava a utilizzare la stessa frequenza di aggiornamento dopo la chiamata di setFrameRate(). Puoi determinare in advance se la transizione al nuovo aggiornamento sarà probabilmente senza problemi chiamando getAlternativeRefreshRates(). In genere, il callback onDisplayChanged() viene chiamato al termine del passaggio della frequenza di aggiornamento, ma per alcuni display collegati esternamente viene chiamato durante una transizione non continua.

Ecco un esempio di come implementare questa funzionalità:

Kotlin

// Determine whether the transition will be seamless.
// Non-seamless transitions may cause a 1-2 second black screen.
val refreshRates = this.display?.mode?.alternativeRefreshRates
val willBeSeamless = Arrays.asList<FloatArray>(refreshRates).contains(newRefreshRate)

// Set the frame rate even if the transition will not be seamless.
surface.setFrameRate(newRefreshRate, FRAME_RATE_COMPATIBILITY_FIXED_SOURCE, CHANGE_FRAME_RATE_ALWAYS)

Java

// Determine whether the transition will be seamless.
// Non-seamless transitions may cause a 1-2 second black screen.
Display display = context.getDisplay(); // API 30+
Display.Mode mode = display.getMode();
float[] refreshRates = mode.getAlternativeRefreshRates();
boolean willBeSeamless = Arrays.asList(refreshRates).contains(newRefreshRate);

// Set the frame rate even if the transition will not be seamless.
surface.setFrameRate(newRefreshRate, FRAME_RATE_COMPATIBILITY_FIXED_SOURCE, CHANGE_FRAME_RATE_ALWAYS);

Connettività

Aggiornamenti Passpoint

In Android 12 vengono aggiunte le seguenti API:

  • isPasspointTermsAndConditionsSupported(): Termini e condizioni è una funzionalità di Passpoint che consente ai deployment di rete di sostituire i portali captive non sicuri, che utilizzano reti aperte, con una rete Passpoint sicura. Quando è necessario accettare i termini e le condizioni, viene visualizzata una notifica all'utente. Le app che suggeriscono reti Passpoint soggette a termini e condizioni devono prima chiamare questa API per assicurarsi che il dispositivo supporti la funzionalità. Se il dispositivo non supporta la funzionalità, non potrà connettersi a questa rete e dovrà essere suggerita una rete alternativa o precedente.
  • isDecoratedIdentitySupported(): quando si autenticano le reti con una decorazione del prefisso, il prefisso di identità decorato consente agli operatori di rete di aggiornare l'identificatore di accesso alla rete (NAI) per eseguire il routing esplicito tramite più proxy all'interno di una rete AAA (consulta RFC 7542 per approfondire questo argomento).

    Android 12 implementa questa funzionalità per essere conforme alla specifica WBA per le estensioni PPS-MO. Le app che suggeriscono reti Passpoint che richiedono un'identità decorata devono prima chiamare questa API per assicurarsi che il dispositivo supporti la funzionalità. Se il dispositivo non supporta la funzionalità, l'identità non verrà decorata e l'autenticazione alla rete potrebbe non riuscire.

Per creare un suggerimento Passpoint, le app devono utilizzare le classi PasspointConfiguration, Credential e HomeSp. Queste classi descrivono il profilo Passpoint, definito nella specifica Wi-Fi Alliance Passpoint.

Per ulteriori informazioni, consulta l'API Wi-Fi Suggestion per la connettività a internet.

Restrizioni aggiornate relative alle interfacce non SDK

Android 12 include elenchi aggiornati di interfacce non SDK con limitazioni in base alla collaborazione con gli sviluppatori Android e ai test interni più recenti. Ove possibile, ci assicuriamo che siano disponibili alternative pubbliche prima di applicare limitazioni alle interfacce non SDK.

Se la tua app non ha come target Android 12, alcune di queste modifiche potrebbero non interessarti immediatamente. Tuttavia, anche se al momento puoi utilizzare alcune interfacce non SDK (a seconda del livello API target della tua app), l'utilizzo di qualsiasi metodo o campo non SDK comporta sempre un rischio elevato di interrompere la tua app.

Se non sai con certezza se la tua app utilizza interfacce non SDK, puoi testarla per scoprirlo. Se la tua app si basa su interfacce non SDK, devi iniziare a pianificare la migrazione a alternative SDK. Tuttavia, siamo consapevoli che alcune app hanno casi d'uso validi per l'utilizzo di interfacce non SDK. Se non riesci a trovare un'alternativa all'utilizzo di un'interfaccia non SDK per una funzionalità nella tua app, devi richiedere una nuova API pubblica.

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