Modifiche del comportamento: tutte le app

La piattaforma Android 15 include modifiche del comportamento che potrebbero interessare la tua app. Le seguenti modifiche del comportamento si applicano a tutte le app quando vengono eseguite su Android 15: indipendentemente da targetSdkVersion. Devi testare l'app e poi modificare ove possibile.

Assicurati di esaminare anche l'elenco delle modifiche del comportamento che interessano solo le app che hanno come target Android 15.

Funzionalità di base

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

Modifiche allo stato del pacchetto interrotto

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 dimensioni pagina da 16 kB

Historically, Android has only supported 4 KB memory page sizes, which has optimized system memory performance for the average amount of total memory that Android devices have typically had. Beginning with Android 15, AOSP supports devices that are configured to use a page size of 16 KB (16 KB devices). If your app uses any NDK libraries, either directly or indirectly through an SDK, then you will need to rebuild your app for it to work on these 16 KB devices.

As device manufacturers continue to build devices with larger amounts of physical memory (RAM), many of these devices will adopt 16 KB (and eventually greater) page sizes to optimize the device's performance. Adding support for 16 KB page size devices enables your app to run on these devices and helps your app benefit from the associated performance improvements. Without recompiling, apps might not work on 16 KB devices when they are productionized in future Android releases.

To help you add support for your app, we've provided guidance on how to check if your app is impacted, how to rebuild your app (if applicable), and how to test your app in a 16 KB environment using emulators (including Android 15 system images for the Android Emulator).

Vantaggi e aumenti del rendimento

I dispositivi configurati con dimensioni pagina di 16 kB utilizzano in media una quantità di memoria leggermente maggiore, ma ottengono anche diversi miglioramenti delle prestazioni sia per il sistema sia per le app:

  • Tempi di avvio delle app inferiori quando il sistema è sotto pressione: in media, il 3,16% è in meno, con miglioramenti più significativi (fino al 30%) per alcune app che abbiamo testato
  • Consumo energetico ridotto durante il lancio dell'app: in media una riduzione del 4,56%
  • Lancio più rapido delle fotocamere: in media avvii a caldo più rapidi del 4,48% e avvii a freddo in media del 6,60%
  • Miglioramento del tempo di avvio del sistema: miglioramento dell'1,5% (circa 0,8 secondi) in media

Questi miglioramenti si basano sui nostri test iniziali e i risultati sui dispositivi effettivi saranno probabilmente diversi. Forniremo ulteriori analisi dei potenziali guadagni per le app man mano che procediamo con i nostri test.

Controlla se la tua app è interessata

Se la tua app utilizza qualsiasi codice nativo, devi ricreare l'app supportando i dispositivi da 16 kB. Se non hai la certezza che la tua app utilizzi codice nativo, puoi utilizzare lo strumento di analisi APK per identificare la presenza di codice nativo.

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

Modifiche richieste per consentire ad alcune app di supportare lo spazio privato

Private space is a new feature in Android 15 that lets users create a separate space on their device where they can keep sensitive apps away from prying eyes, under an additional layer of authentication. Because apps in the private space have restricted visibility, some types of apps need to take additional steps to be able to see and interact with apps in a user's private space.

All apps

Because apps in the private space are kept in a separate user profile, similar to work profiles, apps shouldn't assume that any installed copies of their app that aren't in the main profile are in the work profile. If your app has logic related to work profile apps that make this assumption, you'll need to adjust this logic.

Medical apps

When a user locks the private space, all apps in the private space are stopped, and those apps can't perform foreground or background activities, including showing notifications. This behavior might critically impact the use and function of medical apps installed in the private space.

The private space setup experience warns users that the private space is not suitable for apps that need to perform critical foreground or background activities, such as showing notifications from medical apps. However, apps can't determine whether or not they're being used in the private space, so they can't show a warning to the user for this case.

For these reasons, if you develop a medical app, review how this feature might impact your app and take appropriate actions—such as informing your users not to install your app in the private space—to avoid disrupting critical app capabilities.

Launcher apps

If you develop a launcher app, you must do the following before apps in the private space will be visible:

  1. Your app must be assigned as the default launcher app for the device—that is, possessing the ROLE_HOME role.
  2. Your app must declare the ACCESS_HIDDEN_PROFILES normal permission in your app's manifest file.

Launcher apps that declare the ACCESS_HIDDEN_PROFILES permission must handle the following private space use cases:

  1. Your app must have a separate launcher container for apps installed in the private space. Use the getLauncherUserInfo() method to determine which type of user profile is being handled.
  2. The user must be able to hide and show the private space container.
  3. The user must be able to lock and unlock the private space container. Use the requestQuietModeEnabled() method to lock (by passing true) or unlock (by passing false) the private space.
  4. While locked, no apps in the private space container should be visible or discoverable through mechanisms such as search. Your app should register a receiver for the ACTION_PROFILE_AVAILABLE and ACTION_PROFILE_UNAVAILABLE broadcasts and update the UI in your app when the locked or unlocked state of the private space container changes. Both of these broadcasts include EXTRA_USER, which your app can use to refer to the private profile user.

    You can also use the isQuietModeEnabled() method to check whether the private space profile is locked or not.

App store apps

The private space includes an "Install Apps" button that launches an implicit intent to install apps into the user's private space. In order for your app to receive this implicit intent, declare an <intent-filter> in your app's manifest file with a <category> of 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 .

La versione minima dell'SDK target è stata aumentata 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

Fotocamera e contenuti multimediali

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

Ora la riproduzione audio diretta e non attiva invalida le tracce audio dirette aperte in precedenza o non autorizza le tracce audio quando vengono raggiunti i limiti delle 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 UI di sistema

Android 15 include alcune modifiche volte a creare un un'esperienza utente intuitiva.

Animazioni predittive per la parte posteriore attivate per le app che sono state attivate

Beginning in Android 15, the developer option for predictive back animations has been removed. System animations such as back-to-home, cross-task, and cross-activity now appear for apps that have opted in to the predictive back gesture either entirely or at an activity level. If your app is affected, take the following actions:

  • Ensure that your app has been properly migrated to use the predictive back gesture.
  • Ensure that your fragment transitions work with predictive back navigation.
  • Migrate away from animation and framework transitions and use animator and androidx transitions instead.
  • Migrate away from back stacks that FragmentManager doesn't know about. Use back stacks managed by FragmentManager or by the Navigation component instead.

Widget disattivati quando l'utente interrompe un'app in modo forzato

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.

Deprecazioni

Con ogni release, API Android specifiche potrebbero diventare obsolete o dover sottoposti a refactoring per offrire una migliore esperienza agli sviluppatori o supportare nuove piattaforme le funzionalità di machine learning. In questi casi, le API obsolete verranno ufficialmente ritirate e indirizzare gli sviluppatori ad API alternative da usare.

Il ritiro indica che abbiamo terminato il supporto ufficiale per le API, che però continuano a rimanere disponibili per gli sviluppatori. Per scoprire di più sui ritiri in questa versione di Android, consulta la pagina relativa ai ritiri.