Cambiamenti del comportamento: tutte le app

La piattaforma Android 15 include modifiche al comportamento che potrebbero influire sulla tua app. Le seguenti modifiche al comportamento si applicano a tutte le app quando vengono eseguite su Android 15, indipendentemente da targetSdkVersion. Devi testare l'app e poi modificarla come necessario per supportarle correttamente, ove applicabile.

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

Funzionalità di base

Android 15 modifica o espande varie funzionalità di base del sistema Android.

Modifiche allo stato di arresto del pacchetto

Lo stato del pacchetto FLAG_STOPPED (che gli utenti possono usare le build AOSP premendo a lungo l'icona di un'app e selezionando "Forza interruzione") è sempre stato quello di mantenere le app in questo stato finché l'utente non rimuove esplicitamente l'app da questo stato avviando direttamente l'app o interagendo indirettamente con l'app (tramite il foglio di condivisione o un widget, selezionandola come sfondo animato e così via). In Android 15, stiamo aggiornando il comportamento del sistema in modo che sia in linea con il comportamento previsto. Le app devono essere rimosse dallo stato arrestato solo tramite un'azione dell'utente diretta o indiretta.

Per supportare il comportamento previsto, oltre alle limitazioni esistenti, il sistema annulla anche tutti gli intent in sospeso quando l'app entra nello stato di arresto su un dispositivo con Android 15. Quando le azioni dell'utente rimuovono l'app dallo stato interrotto, la trasmissione di ACTION_BOOT_COMPLETED viene inviata all'app offrendo l'opportunità di registrare nuovamente gli intent in sospeso.

Puoi chiamare il nuovo metodo ApplicationStartInfo.wasForceStopped() per verificare se lo stato dell'app è stato interrotto.

Supporto per le dimensioni di pagina di 16 KB

In passato, Android supportava solo le dimensioni delle pagine in memoria da 4 kB, che sono le prestazioni della memoria di sistema ottimizzate per la quantità media di memoria totale In genere i dispositivi Android hanno avuto. A partire da Android 15, AOSP supporta dispositivi configurati per l'utilizzo di dimensioni pagina di 16 kB (16 kB) dispositivi). Se la tua app utilizza librerie NDK, direttamente o indirettamente tramite un SDK, dovrai ricreare l'app funzionano su questi dispositivi da 16 kB.

I produttori di dispositivi continuano a realizzare dispositivi con memoria fisica (RAM), molti di questi dispositivi adotteranno 16 kB (e alla fine aumentano) le dimensioni delle pagine per ottimizzare le prestazioni del dispositivo. Aggiunta in corso... per dispositivi con dimensione pagina di 16 kB consente di eseguire l'app su questi dispositivi e consente alla tua app di trarre vantaggio dalle prestazioni associate miglioramenti. Senza la ricompilazione, le app potrebbero non funzionare sui dispositivi da 16 kB quando vengono messe in produzione nelle release future di Android.

Per aiutarti ad aggiungere il supporto della tua app, abbiamo fornito indicazioni su come controllare se la tua app è interessata, come ricreare l'app (se applicabile) e come testare l'app in In un ambiente da 16 kB con emulatori (tra cui Android 15 immagini di sistema per l'emulatore Android).

Vantaggi e aumenti del rendimento

I dispositivi configurati con dimensioni di pagina di 16 KB in media utilizzano un po' più di memoria, ma ottengono anche vari miglioramenti delle prestazioni sia per il sistema sia per le app:

  • Tempi di avvio delle app più ridotti quando il sistema è sotto pressione di memoria: in media il 3,16% meno, con miglioramenti più significativi (fino al 30%) per alcune app che abbiamo testato
  • Assorbimento di corrente ridotto durante l'avvio dell'app: riduzione media del 4,56%
  • Avvio più rapido della fotocamera: in media gli avvii a caldo più veloci del 4,48% e degli avvii a freddo del 6,60% più velocemente
  • Tempo di avvio del sistema migliorato: miglioramento medio dell'8% (circa 950 millisecondi)

Questi miglioramenti si basano sui nostri test iniziali e i risultati sui dispositivi effettivi potrebbero essere diversi. Forniremo ulteriori analisi dei potenziali guadagni per le app man mano che continuiamo i test.

Controlla se la tua app è interessata

Se la tua app utilizza codice nativo, devi ricostruirla con il supporto per i dispositivi da 16 KB. Se non sai con certezza se la tua app utilizza codice nativo, puoi utilizzare APK Analyzer per identificare se è presente codice nativo e poi controllare l'allineamento dei segmenti ELF per eventuali librerie condivise che trovi.

Se la tua app utilizza solo codice scritto nel linguaggio di programmazione Java o in Kotlin, incluse tutte le librerie o gli SDK, supporta già i dispositivi da 16 KB. Tuttavia, ti consigliamo di testare l'app in un ambiente di 16 KB per verificare che non ci siano regressioni impreviste nel comportamento dell'app.

Modifiche necessarie per il supporto dello spazio privato da parte di alcune app

Spazio privato è una nuova funzionalità di Android 15 che consente agli utenti creare uno spazio separato sul proprio dispositivo in cui tenere lontane le app sensibili da occhi indiscreti, con un ulteriore livello di autenticazione. Poiché le app in lo spazio privato ha una visibilità limitata, alcuni tipi di app devono passaggi aggiuntivi per poter vedere e interagire con le app nella privacy di un utente spazio.

Tutte le app

Poiché le app nello spazio privato sono conservate in un profilo utente separato, ai profili di lavoro, le app non devono presupporre che eventuali le copie della propria app che non sono presenti nel profilo principale sono nel profilo di lavoro. Se la tua app ha una logica relativa alle app del profilo di lavoro che fa questa supposizione, dovrai modificarla.

App di medicina

Quando un utente blocca lo spazio privato, tutte le app al suo interno vengono interrotte. che non possano eseguire attività in primo piano o in background, ad esempio: visualizzazione delle notifiche. Questo comportamento può avere un impatto critico sull'uso delle app mediche installate nello spazio privato.

L'esperienza di configurazione dello spazio privato avvisa gli utenti che lo spazio privato non è adatto per le app che devono eseguire attività in primo piano o in background critiche, ad esempio la visualizzazione di notifiche di app mediche. Tuttavia, le app non possono determinare se vengono utilizzate o meno nello spazio privato, quindi non possono mostrare un avviso all'utente in questo caso.

Per questi motivi, se sviluppi un'app medica, controlla in che modo questa funzionalità potrebbe influire sulla tua app e adotta le misure appropriate, ad esempio informando gli utenti di non installarla nello spazio privato, per evitare di interrompere le funzionalità critiche dell'app.

App Avvio app

Se sviluppi un'app Avvio app, devi eseguire le seguenti operazioni prima che le app nello spazio privato siano visibili:

  1. L'app deve essere assegnata come app Avvio app predefinita per il dispositivo, avere il ruolo di ROLE_HOME.
  2. La tua app deve dichiarare il ACCESS_HIDDEN_PROFILES normale nel file manifest dell'app.

Le app di Avvio app che dichiarano l'autorizzazione ACCESS_HIDDEN_PROFILES devono gestire i seguenti casi d'uso dello spazio privato:

  1. L'app deve avere un contenitore Avvio app separato per le app installate nell' in uno spazio privato. Utilizza il metodo getLauncherUserInfo() per determinare il tipo di profilo utente gestito.
  2. L'utente deve essere in grado di nascondere e mostrare il container dello spazio privato.
  3. L'utente deve essere in grado di bloccare e sbloccare il container dello spazio privato. Utilizza il metodo requestQuietModeEnabled() per bloccare (passando true) o sbloccare (passando false) lo spazio privato.
  4. Quando è bloccato, nessuna app nel contenitore dello spazio privato deve essere visibile o rilevabile tramite meccanismi come la ricerca. L'app deve registrare un transceiver per le trasmissioni ACTION_PROFILE_AVAILABLE e ACTION_PROFILE_UNAVAILABLE e aggiornare l'interfaccia utente nell'app quando cambia lo stato bloccato o sbloccato del contenitore dello spazio privato. Entrambe le trasmissioni includono EXTRA_USER, che la tua app può utilizzare per fare riferimento all' utente del profilo privato.

    Puoi anche utilizzare il metodo isQuietModeEnabled() per controlla se il profilo dello spazio privato è bloccato o meno.

App dello store

Lo spazio privato include un pulsante "Installa app" che avvia un'intent implicita per installare app nello spazio privato dell'utente. Affinché la tua app possa ricevere questo intent implicito, dichiara un <intent-filter> nel file manifest dell'app con un <category> di CATEGORY_APP_MARKET.

Carattere emoji basato su PNG rimosso

Il file legacy basato su PNG per le emoji (NotoColorEmojiLegacy.ttf) è stato rimosso, lasciando solo il file basato su vettori. A partire da Android 13 (API livello 33), il file del carattere delle emoji utilizzato dal renderer di emoji di sistema è cambiato da un PNG in un file basato su vettori. Il sistema ha mantenuto il file dei caratteri legacy in Android 13 e 14 per motivi di compatibilità. le app con i propri renderer dei caratteri potrebbero continuare a utilizzare il file dei caratteri precedente fino a quando non sono in grado di eseguire l'upgrade.

Per verificare se la tua app è interessata, cerca nel codice dell'app riferimenti alla NotoColorEmojiLegacy.ttf.

Puoi scegliere di adattare la tua app in diversi modi:

  • Utilizza le API della piattaforma per il rendering del testo. Puoi eseguire il rendering del testo in una Canvas e usalo per ottenere un'immagine raw, se necessario.
  • Aggiungi il supporto dei caratteri COLRv1 alla tua app. La libreria open source FreeType supporta COLRv1 nella versione 2.13.0 e in alto.
  • Come ultima risorsa, puoi raggruppare il file dei caratteri delle emoji precedenti (NotoColorEmoji.ttf) nell'APK, anche se in questo caso nella tua app mancheranno gli ultimi aggiornamenti delle emoji. Per Per ulteriori informazioni, consulta il progetto GitHub di Noto Emoji .

È stata aumentata la versione minima dell'SDK target da 23 a 24

Android 15 si basa su le modifiche apportate in Android 14 ed estende questa ulteriormente la sicurezza. In Android 15, le app con un Impossibile installare targetSdkVersion inferiore a 24. La richiesta di app che soddisfino i livelli API moderni contribuisce a garantire una maggiore sicurezza e privacy.

Il malware spesso punta a livelli API più bassi per aggirare la sicurezza e la privacy che sono state introdotte nelle versioni successive di Android. Ad esempio: alcune app malware utilizzano un valore targetSdkVersion pari a 22 per evitare di essere soggette di autorizzazione di runtime introdotto nel 2015 da Android 6.0 Marshmallow (API livello 23). Questa modifica ad Android 15 rende più difficile evitare la sicurezza del malware e miglioramenti della privacy. Il tentativo di installare un'app che ha come target un livello API inferiore comporta un errore di installazione e in Logcat viene visualizzato un messaggio simile al seguente:

INSTALL_FAILED_DEPRECATED_SDK_VERSION: App package must target at least SDK version 24, but found 7

Sui dispositivi su cui viene eseguito l'upgrade ad Android 15, tutte le app con un targetSdkVersion inferiore ne rimangono installate più di 24.

Se devi testare un'app che ha come target un livello API precedente, utilizza il seguente comando ADB:

adb install --bypass-low-target-sdk-block FILENAME.apk

Sicurezza e privacy

Android 15 introduce misure efficaci per combattere le frodi con passcode una tantum (OTP) e per proteggere i contenuti sensibili dell'utente, concentrandosi sull'aumento della sicurezza del servizio di ascolto delle notifiche e delle protezioni per la condivisione schermo. I miglioramenti principali includono l'oscuramento delle OTP dalle notifiche accessibili ad app non attendibili, la disattivazione delle notifiche durante la condivisione schermo e la protezione delle attività delle app quando vengono pubblicate le OTP. Queste modifiche hanno lo scopo di proteggere i contenuti sensibili dell'utente da soggetti non autorizzati.

Gli sviluppatori devono tenere presente quanto segue per assicurarsi che le loro app siano compatibili con le modifiche di Android 15:

Oscuramento OTP

Android impedirà alle app non attendibili che implementano un NotificationListenerService di leggere i contenuti non oscurati delle notifiche in cui è stata rilevata una OTP. Le app attendibili, come le associazioni di gestori dei dispositivi complementari, sono esenti da queste limitazioni.

Protezione Condivisione schermo

  • I contenuti delle notifiche vengono nascosti durante le sessioni di condivisione dello schermo per preservare la privacy dell'utente. Se l'app implementa setPublicVersion(), Android mostra la versione pubblica della notifica che funge da notifica sostitutiva in contesti non sicuri. In caso contrario, i contenuti della notifica vengono oscurati senza alcun ulteriore contesto.
  • I contenuti sensibili, come l'inserimento della password, vengono nascosti agli spettatori remoti per impedire la divulgazione delle informazioni sensibili dell'utente.
  • Le attività delle app che pubblicano notifiche durante la condivisione schermo in cui è stato rilevato un codice OTP verranno nascoste. I contenuti dell'app vengono nascosti all'utente remoto quando l'app viene lanciata.
  • Oltre all'identificazione automatica dei campi sensibili da parte di Android, gli sviluppatori possono contrassegnare manualmente parti della propria app come sensibili utilizzando setContentSensitivity, che viene nascosta agli spettatori remoti durante la condivisione schermo.
  • Gli sviluppatori possono scegliere di attivare/disattivare l'opzione Disattiva protezioni condivisione schermo nelle Opzioni sviluppatore per essere esentati dalle protezioni della condivisione schermo a scopo di dimostrazione o test. Lo screen recorder di sistema predefinito è esente da queste modifiche, poiché le registrazioni rimangono sul dispositivo.

Fotocamera e contenuti multimediali

Android 15 apporta le seguenti modifiche al comportamento della fotocamera e dei contenuti multimediali per tutte le app.

La riproduzione audio diretta e di offload rende non valide le tracce audio dirette o di offload aperte in precedenza quando vengono raggiunti i limiti di risorse

Prima di Android 15, se un'app richiedeva direttamente o scaricava la riproduzione audio mentre un'altra app stava riproducendo contenuti audio e venivano raggiunti i limiti delle risorse, l'app non apriva un nuovo AudioTrack.

A partire da Android 15, quando un'app richiede la riproduzione diretta o l'offload e vengono raggiunti i limiti delle risorse, il sistema annulla la validità di tutti gli oggetti AudioTrack attualmente aperti, che impediscono di soddisfare la nuova richiesta di canale.

(In genere, le tracce audio dirette e quelle sottocaricate vengono aperte per la riproduzione di formati audio compressi). I casi d'uso comuni per la riproduzione di audio diretto includono lo streaming di audio codificato tramite HDMI su una TV. L'offload delle tracce viene in genere utilizzato per riprodurre l'audio compresso su un dispositivo mobile con accelerazione DSP hardware.

Esperienza utente e interfaccia utente di sistema

Android 15 include alcune modifiche volte a creare un'esperienza utente più coerente e intuitiva.

Animazioni Indietro predittive attivate per le app che hanno attivato la funzionalità

A partire da Android 15, l'opzione per sviluppatori relativa alle animazioni d'indietro predittive è stata rimossa. Le animazioni di sistema, come ritorno a casa, cross-task e attività incrociata, ora vengono visualizzate per le app per cui è stato attivato il gesto Indietro predittivo completamente o a livello di attività. Se la tua app è interessata, esegui le seguenti operazioni:

  • Assicurati che la migrazione dell'app sia stata eseguita correttamente per utilizzare il backgesture predittivo.
  • Assicurati che le transizioni di frammento funzionino con la navigazione a ritroso predittiva.
  • Elimina le transizioni di animazione e framework e usa invece le transizioni di animator e Androidx.
  • Esegui la migrazione da stack secondari di cui FragmentManager non è a conoscenza. Utilizza invece stack back gestiti da FragmentManager o dal componente di navigazione.

Widget disattivati quando l'utente forza l'interruzione di un'app

Se un utente interrompe forzatamente un'app su un dispositivo con Android 15, il sistema disattiva temporaneamente tutti i widget dell'app. I widget non sono selezionabili e l'utente non può interagirvi. Questo perché, a partire da Android 15, il sistema annulla tutti gli intent in attesa di un'app quando l'app viene arrestata forzatamente.

Il sistema riattiva i widget la volta successiva che l'utente avvia l'app.

Per maggiori informazioni, consulta Modifiche allo stato di interruzione del pacchetto.

Il chip della barra di stato della proiezione multimediale avvisa gli utenti della condivisione schermo, della trasmissione e della registrazione

Screen projection exploits expose private user data such as financial information because users don't realize their device screen is being shared. Android has until now shown screen cast and screen record icons on the status bar, but the icons are small and often overlooked. Also, stopping screen sharing or recording is cumbersome because controls are in Quick Settings.

Android 15 introduces a new status bar chip that is large and prominent, which should alert users to any in-progress screen projection. Users can tap the chip to stop their screen from being shared, cast, or recorded.

To provide an intuitive user experience, screen projection now automatically stops when the device screen is locked.

Benefits and performance gains

The new media projection status bar chip enhances the user experience as follows:

  • Alerts users to in-progress screen sharing, casting, or recording
  • Enable users to terminate screen projection by tapping the chip

Automatic suspension of screen projection when the device screen is locked ensures user privacy.

Check if your app is impacted

By default, your app includes the new status bar chip and automatically suspends screen projection when the lock screen activates. Test your app by implementing the onStop() method of the MediaProjection.Callback. Verify that your app responds appropriately when the screen projection stops as a result of the user tapping the status bar chip or when the lock screen activates.

Ritiro

Con ogni release, API Android specifiche potrebbero diventare obsolete o dover essere ristrutturate per offrire un'esperienza migliore per gli sviluppatori o supportare nuove funzionalità della piattaforma. In questi casi, ritiriamo ufficialmente le API obsolete e indirizzamo gli sviluppatori ad API alternative da utilizzare.

Con il ritiro, il supporto ufficiale delle API è terminato, ma queste continueranno a essere disponibili per gli sviluppatori. Per scoprire di più sui ritiri significativi in questa release di Android, consulta la pagina relativa ai ritiri.