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 la tua app e poi modificarla
in base alle necessità per supportarli correttamente, ove applicabile.
Assicurati di esaminare anche l'elenco delle modifiche al 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 di interruzione del pacchetto
L'intenzione dello stato del pacchetto FLAG_STOPPED
(che gli utenti possono attivare nelle build AOSP premendo a lungo l'icona di un'app e selezionando "Forza interruzione") è sempre stata quella di mantenere le app in questo stato finché l'utente non le rimuove esplicitamente da questo stato avviandole direttamente o interagendo indirettamente con l'app (tramite la scheda di condivisione o un widget, selezionando l'app come sfondo animato e così via). In Android 15, abbiamo aggiornato il comportamento del sistema in modo che sia in linea con questo comportamento previsto. Le app devono essere rimosse
dallo stato di interruzione solo tramite un'azione diretta o indiretta dell'utente.
Per supportare il comportamento previsto, oltre alle limitazioni esistenti, il sistema annulla anche tutti gli intent in attesa quando l'app entra nello stato di fermata su un dispositivo con Android 15. Quando le azioni dell'utente rimuovono l'app dallo stato di fermata, il broadcast ACTION_BOOT_COMPLETED
viene inviato all'app, offrendo la possibilità di registrare nuovamente gli intent in attesa.
Puoi chiamare il nuovo metodo
ApplicationStartInfo.wasForceStopped()
per verificare se l'app è stata messa in stato di arresto.
Supporto delle dimensioni delle pagine di 16 kB
Storicamente, Android ha supportato solo dimensioni delle pagine di memoria di 4 KB, il che ha ottimizzato le prestazioni della memoria di sistema per la quantità media di memoria totale che i dispositivi Android hanno in genere avuto. A partire da Android 15, AOSP supporta i dispositivi configurati per utilizzare una dimensione pagina di 16 KB (dispositivi da 16 KB). Se la tua app utilizza librerie NDK, direttamente o indirettamente tramite un SDK, dovrai ricompilare l'app per farla funzionare su questi dispositivi da 16 KB.
Man mano che i produttori di dispositivi continuano a creare dispositivi con quantità maggiori di memoria fisica (RAM), molti di questi dispositivi adotteranno dimensioni delle pagine di 16 KB (e alla fine maggiori) per ottimizzare le prestazioni del dispositivo. L'aggiunta del supporto per i dispositivi con dimensioni di pagina di 16 kB consente alla tua app di essere eseguita su questi dispositivi e di sfruttare i miglioramenti delle prestazioni associati. Senza ricompilazione, le app non funzioneranno sui dispositivi da 16 KB nelle versioni future di Android.
Per aiutarti ad aggiungere il supporto per la tua app, abbiamo fornito indicazioni su come verificare se la tua app è interessata, su come ricompilare l'app (se applicabile) e su come testarla in un ambiente da 16 kB utilizzando emulatori (incluse le immagini di sistema Android 15 per Android Emulator).
Vantaggi e miglioramenti delle prestazioni
配置为使用 16 KB 页面大小的设备平均会使用略多一些的内存,但系统和应用的性能也会得到各种提升:
- 缩短了系统内存压力时的应用启动时间:平均降低了 3.16%;对于我们测试的某些应用而言,改进幅度更大(最高可达 30%)
- 应用启动期间的功耗降低:平均降低了 4.56%
- 相机启动更快:热启动速度平均提高了 4.48%,冷启动速度平均提高了 6.60%
- 缩短了系统启动时间:平均缩短了 8%(约 950 毫秒)
这些改进基于我们的初始测试,实际设备上的结果可能会有所不同。随着测试的继续进行,我们将进一步分析应用的潜在收益。
Controllare se la tua app è interessata
如果您的应用使用了任何原生代码,则应重新构建应用,使其支持 16 KB 设备。如果您不确定自己的应用是否使用了原生代码,可以使用 APK 分析器来确定是否存在任何原生代码,然后检查您找到的任何共享库的 ELF 段对齐情况。Android Studio 还提供了一些功能,可帮助您自动检测对齐问题。
如果您的应用仅使用以 Java 或 Kotlin 编程语言编写的代码(包括所有库或 SDK),则该应用已支持 16 KB 设备。不过,我们建议您在 16 KB 环境中测试应用,以验证应用行为是否出现意外的回归。
Modifiche necessarie per alcune app per supportare lo spazio privato
私密空间是 Android 15 中推出的一项新功能,可让用户在设备上创建一个单独的空间,在额外的身份验证层保护下,防止敏感应用遭到窥探。由于私密空间中的应用具有受限的公开范围,因此某些类型的应用需要执行额外的步骤,才能查看和与用户私密空间中的应用互动。
所有应用
由于私密空间中的应用会保存在单独的用户资料中(类似于工作资料),因此应用不应假定其任何未位于主资料中的已安装副本都位于工作资料中。如果您的应用包含与工作资料应用相关的逻辑,并且做出了上述假设,则需要调整此逻辑。
医疗应用
当用户锁定私密空间时,私密空间中的所有应用都会停止运行,并且这些应用无法执行前台或后台活动,包括显示通知。此行为可能会严重影响安装在私密空间中的医疗应用的使用和功能。
私密空间设置体验会向用户发出警告,告知私密空间不适合需要执行关键前台或后台活动的应用,例如显示医疗应用发送的通知。不过,应用无法确定自己是否在私密空间中使用,因此无法在这种情况下向用户显示警告。
因此,如果您开发的是医疗应用,请检查此功能可能会对您的应用产生哪些影响,并采取适当的措施(例如告知用户不要在私密空间中安装您的应用),以免中断关键的应用功能。
启动器应用
如果您开发的是启动器应用,则必须执行以下操作,才能看到私密空间中的应用:
- 您的应用必须被指定为设备的默认启动器应用,即具有
ROLE_HOME
角色。 - 您的应用必须在应用的清单文件中声明
ACCESS_HIDDEN_PROFILES
普通权限。
声明 ACCESS_HIDDEN_PROFILES
权限的启动器应用必须处理以下私密空间用例:
- 您的应用必须为安装在私密空间中的应用提供单独的启动器容器。使用
getLauncherUserInfo()
方法确定要处理的用户个人资料类型。 - 用户必须能够隐藏和显示私密空间容器。
- 用户必须能够锁定和解锁私密空间容器。使用
requestQuietModeEnabled()
方法锁定(通过传递true
)或解锁(通过传递false
)私密空间。 在锁定状态下,私密空间容器中的任何应用都应不可见,也无法通过搜索等机制被发现。您的应用应为
ACTION_PROFILE_AVAILABLE
和ACTION_PROFILE_UNAVAILABLE
广播注册接收器,并在私密空间容器的锁定或解锁状态发生变化时更新应用中的界面。这两种状态的广播都包含EXTRA_USER
,您的应用可以使用该常量来引用不公开个人资料的用户。您还可以使用
isQuietModeEnabled()
方法检查私密空间个人资料是否已锁定。
应用商店应用
私密空间包含一个“安装应用”按钮,用于启动隐式 intent 以将应用安装到用户的私密空间。为了让应用能够接收此隐式 intent,请在应用的清单文件中声明一个 <intent-filter>
,并将 <category>
设为 CATEGORY_APP_MARKET
。
Carattere emoji basato su PNG rimosso
Il file del carattere emoji precedente (NotoColorEmojiLegacy.ttf
) basato su PNG è stato
rimosso, lasciando solo il file basato su vettori. A partire da Android 13 (livello API 33), il file del carattere emoji utilizzato dal renderer emoji di sistema è passato da un file basato su PNG a un file basato su vettori. Il sistema ha mantenuto il file dei caratteri legacy in Android 13 e 14 per motivi di compatibilità, in modo che le app con i propri visualizzatori dei caratteri potessero continuare a utilizzarlo fino a quando non fosse stato possibile eseguire l'upgrade.
Per verificare se la tua app è interessata, cerca nel codice riferimenti al
NotoColorEmojiLegacy.ttf
file.
Puoi scegliere di adattare la tua app in diversi modi:
- Utilizza le API di piattaforma per il rendering del testo. Puoi eseguire il rendering del testo in un
Canvas
basato su bitmap e utilizzarlo per ottenere un'immagine non elaborata, se necessario. - Aggiungi il supporto dei caratteri COLRv1 alla tua app. La libreria open source FreeType supporta COLRv1 nella versione 2.13.0 e superiori.
- Come ultima risorsa, puoi includere il file del carattere emoji precedente
(
NotoColorEmoji.ttf
) nel tuo APK, anche se in questo caso la tua app non avrà gli aggiornamenti emoji più recenti. Per maggiori informazioni, consulta la pagina del progetto GitHub di Noto Emoji.
Aumento della 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 introduces robust measures to combat one-time passcode (OTP) fraud and to protect the user's sensitive content, focusing on hardening the Notification Listener Service and screenshare protections. Key enhancements include redacting OTPs from notifications accessible to untrusted apps, hiding notifications during screenshare, and securing app activities when OTPs are posted. These changes aim to keep the user's sensitive content safe from unauthorized actors.
Developers need to be aware of the following to ensure their apps are compatible with the changes in Android 15:
OTP Redaction
Android will stop untrusted apps that implement a
NotificationListenerService
from reading unredacted content
from notifications where an OTP has been detected. Trusted apps such as
companion device manager associations are exempt from these restrictions.
Screenshare Protection
- Notification content is hidden during screen sharing sessions to preserve
the user's privacy. If the app implements
setPublicVersion()
, Android shows the public version of the notification which serves as a replacement notification in insecure contexts. Otherwise, the notification content is redacted without any further context. - Sensitive content like password input is hidden from remote viewers to prevent revealing the user's sensitive information.
- Activities from apps that post notifications during screenshare where an OTP has been detected will be hidden. App content is hidden from the remote viewer when launched.
- Beyond Android's automatic identification of sensitive fields, developers
can manually mark parts of their app as sensitive using
setContentSensitivity
, which is hidden from remote viewers during screenshare. - Developers can choose to toggle the Disable screen share protections option under Developer Options to be exempted from the screenshare protections for demo or testing purposes. The default system screen recorder is exempted from these changes, since the recordings remain on-device.
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 l'offload invalidano le tracce audio dirette o offload aperte in precedenza quando vengono raggiunti i limiti delle risorse
Prima di Android 15, se un'app richiedeva la riproduzione audio diretta o di offload mentre un'altra app stava riproducendo audio e i limiti di risorse erano stati raggiunti, l'app non riusciva ad aprire un nuovo AudioTrack
.
A partire da Android 15, quando un'app richiede la riproduzione diretta o con offload e vengono raggiunti i limiti di risorse, il sistema invalida tutti gli oggetti AudioTrack
attualmente aperti che impediscono di soddisfare la nuova richiesta di traccia.
Le tracce audio dirette e di offload vengono in genere aperte per la riproduzione di formati audio compressi. Casi d'uso comuni per la riproduzione di audio diretto includono lo streaming di audio codificato tramite HDMI su una TV. Le tracce di offload vengono in genere utilizzate per riprodurre 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'esperienza utente più coerente e intuitiva.
Animazioni predittive per Indietro attivate per le app che hanno eseguito l'opt-in
A partire da Android 15, l'opzione sviluppatore per le animazioni di ritorno predittive è stata rimossa. Le animazioni di sistema, come il ritorno alla schermata Home, il passaggio da un'attività all'altra e il ritorno da un'attività all'altra, ora vengono visualizzate per le app che hanno attivato il gesto di ritorno predittivo, in toto o a livello di attività. Se la tua app è interessata, svolgi le seguenti azioni:
- Assicurati che la migrazione della tua app sia stata eseguita correttamente per utilizzare il gesto di ritorno predetto.
- Assicurati che le transizioni dei frammenti funzionino con la navigazione a ritroso predittiva.
- Esegui la migrazione dalle transizioni di animazione e framework e utilizza invece le transizioni di animator e androidx.
- Esegui la migrazione da stack precedenti non noti a
FragmentManager
. Utilizza i frame di ritorno gestiti daFragmentManager
o dal componente Navigation.
Widget disattivati quando l'utente arresta forzatamente un'app
Se un utente forza l'interruzione di 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ò interagire con loro. Questo perché, a partire da Android 15, il sistema annulla tutti gli intent in attesa di un'app quando questa viene interrotta forzatamente.
Il sistema riattiva questi widget alla successiva apertura dell'app da parte dell'utente.
Per ulteriori informazioni, consulta Modifiche allo stato di arresto del pacchetto.
Il chip della barra di stato della proiezione dei contenuti multimediali avvisa gli utenti della condivisione dello schermo, della trasmissione e della registrazione
Gli exploit di proiezione dello schermo espongono i dati utente privati, come le informazioni finanziarie, perché gli utenti non si rendono conto che lo schermo del loro dispositivo viene condiviso.
Per le app in esecuzione su dispositivi con Android 15 QPR1 o versioni successive, un chip della barra di stato grande e in evidenza avvisa gli utenti di eventuali proiezioni dello schermo in corso. Gli utenti possono toccare il chip per impedire la condivisione, la trasmissione o la registrazione della schermata. Inoltre, la proiezione dello schermo si interrompe automaticamente quando lo schermo del dispositivo è bloccato.

Check if your app is impacted
By default, your app includes the status bar chip and automatically suspends screen projection when the lock screen activates.
To learn more about how to test your app for these use cases, see Status bar chip and auto stop.
Limitazioni di accesso alla rete in background
In Android 15, apps that start a network request outside of a valid process
lifecycle receive an exception. Typically, an
UnknownHostException
or other socket-related
IOException
. Network requests that happen outside of a valid lifecycle are
usually due to apps unknowingly continuing a network request even after the app
is no longer active.
To mitigate this exception, ensure your network requests are lifecycle aware and cancelled upon leaving a valid process lifecycle by using lifecycle aware components. If it is important that the network request should happen even when the user leaves the application, consider scheduling the network request using WorkManager or continue a user visible task using Foreground Service.
Ritiri
Con ogni release, API Android specifiche potrebbero diventare obsolete o dover essere refattorizzate per offrire una migliore esperienza per gli sviluppatori o supportare nuove funzionalità della piattaforma. In questi casi, ritiriamo ufficialmente le API obsolete e indirizziamo gli sviluppatori a API alternative da utilizzare.
Il ritiro significa che abbiamo interrotto il supporto ufficiale per le API, ma queste continueranno a rimanere disponibili per gli sviluppatori. Per scoprire di più sui ritiri importanti in questa release di Android, consulta la pagina dei ritiri.