La piattaforma Android 14 include modifiche del comportamento che potrebbero influire sulla tua app.
Le seguenti modifiche del comportamento si applicano a tutte le app quando vengono eseguite su Android 14,
indipendentemente da
targetSdkVersion
. Devi
testare la tua app e poi modificarla in base alle esigenze per supportare correttamente questi elementi, ove
applicabile.
Assicurati di esaminare anche l'elenco delle modifiche al comportamento che interessano solo le app che hanno come target Android 14.
Funzionalità di base
La programmazione di sveglie esatte viene negata per impostazione predefinita
精确的闹钟适用于用户指定的通知,或是在确切时间需要执行的操作。从 Android 14 开始,系统不再向以 Android 13 及更高版本为目标平台的大多数新安装应用预先授予 SCHEDULE_EXACT_ALARM
权限,该权限默认处于拒绝状态。
详细了解安排精确闹钟的权限变化。
Le trasmissioni registrate in base al contesto vengono messe in coda mentre le app vengono memorizzate nella cache
Su Android 14, il sistema può mettere in coda le trasmissioni registrate in base al contesto mentre l'app è in stato nella cache. È un processo simile all'accodamento comportamento introdotto da Android 12 (livello API 31) per binder asincrono transazioni. Le trasmissioni dichiarate dai file manifest non vengono messe in coda e le app vengono rimosse dallo stato memorizzato nella cache per l'invio della trasmissione.
Quando l'app lascia lo stato memorizzato nella cache, ad esempio torna in primo piano, invia eventuali trasmissioni in coda. Più istanze di determinate trasmissioni potrebbero essere unite in un'unica trasmissione. In base ad altri fattori, come il sistema l'integrità, le app potrebbero essere rimosse dallo stato memorizzato nella cache e qualsiasi gli annunci vengono consegnati.
Le app possono terminare solo i propri processi in background
从 Android 14 开始,当您的应用调用 killBackgroundProcesses()
时,该 API 只能终止您自己应用的后台进程。
如果您传入另一个应用的软件包名称,此方法对该应用的后台进程没有影响,并且 Logcat 中会显示以下消息:
Invalid packageName: com.example.anotherapp
您的应用不应使用 killBackgroundProcesses()
API,也不得以其他方式尝试影响其他应用的进程生命周期,即使在旧版操作系统上也是如此。Android 旨在让缓存应用在后台运行,并在系统需要内存时自动终止它们。如果您的应用会不必要地终止其他应用,则由于之后需要完全重启这些应用,因此可能会降低系统性能并增加耗电量,这比恢复现有缓存应用所消耗的资源要多得多。
L'MTU è impostata su 517 per il primo client GATT che richiede un'MTU
A partire da Android 14, lo stack Bluetooth di Android rispetta più rigorosamente la versione 5.2 della Bluetooth Core Specification e richiede un MTU BLE ATT di 517 byte quando il primo client GATT richiede un MTU utilizzando l'API BluetoothGatt#requestMtu(int)
e ignora tutte le richieste MTU successive su quella connessione ACL.
Per gestire questa modifica e rendere la tua app più solida, valuta le seguenti opzioni:
- La periferica deve rispondere alla richiesta MTU del dispositivo Android con un valore ragionevole che possa essere supportato dalla periferica. Il valore finale negoziato sarà un valore minimo del valore richiesto da Android e del valore fornito dal dispositivo remoto (ad esempio
min(517, remoteMtu)
).- L'implementazione di questa correzione potrebbe richiedere un aggiornamento del firmware della periferica
- In alternativa, limita le scritture delle caratteristiche GATT in base al valore minimo tra il valore supportato noto della periferica e la variazione dell'MTU ricevuta.
- Ti ricordiamo che devi ridurre di 5 byte le dimensioni supportate per le intestazioni
- Ad esempio:
arrayMaxLength = min(SUPPORTED_MTU, GATT_MAX_ATTR_LEN(517)) - 5
Nuovo motivo per cui un'app può essere inserita nel bucket di standby con limitazioni
Android 14 引入了一种可将应用放入受限待机模式存储分区的新原因。由于 onStartJob
、onStopJob
或 onBind
方法超时,应用的作业多次触发 ANR 错误。(如需了解对 onStartJob
和 onStopJob
的更改,请参阅 JobScheduler 强化了回调和网络行为。)
如需跟踪应用是否已进入受限待机分桶,我们建议您在作业执行时使用 API UsageStatsManager.getAppStandbyBucket()
进行日志记录,或在应用启动时使用 UsageStatsManager.queryEventsForSelf()
进行日志记录。
mlock limitato a 64 KB
In Android 14 (livello API 34) e versioni successive, la piattaforma riduce la memoria massima
che può essere bloccata utilizzando mlock()
a 64 KB per processo. Nelle versioni precedenti, il limite era di 64 MB per processo. Questa limitazione
favorisce una migliore gestione della memoria tra le app e il sistema. Per garantire maggiore consistenza tra i dispositivi, Android 14 aggiunge un nuovo test CTS per il nuovo limite di mlock()
sui dispositivi compatibili.
Il sistema applica l'utilizzo delle risorse delle app memorizzate nella cache
从设计上讲,当应用的进程移至后台且没有任何其他应用进程组件在运行时,应用进程将处于缓存状态。此类应用进程可能会因系统内存压力而终止。在此状态下,Activity
实例在调用并返回 onStop()
方法后执行的任何工作均不可靠,强烈建议不要这样做。
Android 14 对此设计引入了一致性和强制执行要求。在应用进程进入缓存状态后不久,系统会禁止后台工作,直到进程组件重新进入生命周期的活跃状态。
使用框架支持的典型生命周期 API(例如服务、JobScheduler
和 Jetpack WorkManager)的应用应该不受这些变化的影响。
Esperienza utente
Modifiche all'esperienza degli utenti con le notifiche non ignorabili
Se la tua app mostra agli utenti notifiche in primo piano non ignorabili, Android 14 ha modificato il comportamento per consentire agli utenti di ignorare tali notifiche.
Questa modifica si applica alle app che impediscono agli utenti di chiudere i contenuti in primo piano
le notifiche impostando da Notification.FLAG_ONGOING_EVENT
a
Notification.Builder#setOngoing(true)
oppure
NotificationCompat.Builder#setOngoing(true)
Il comportamento di
FLAG_ONGOING_EVENT
è cambiato per consentire all'utente di chiudere effettivamente queste notifiche.
Questi tipi di notifiche non possono essere chiuse nelle seguenti condizioni:
- Quando lo smartphone è bloccato
- Se l'utente seleziona un'azione di notifica Cancella tutto (che è utile per le chiusure accidentali)
Inoltre, questo nuovo comportamento non si applica alle notifiche nei seguenti casi d'uso:
- Notifiche di
CallStyle
- Controller dei criteri dei dispositivi (DPC) e pacchetti di supporto per le aziende
- Notifiche per i contenuti multimediali
- Il pacchetto Selettore di ricerca predefinito
Le informazioni sulla sicurezza dei dati sono più visibili
为了加强用户隐私保护,Android 14 增加了系统显示您在 Play 管理中心表单中声明的信息的位置数量。目前,用户可以在 Google Play 中的应用详情的数据安全部分查看此信息。
我们建议您查看应用的位置数据分享政策,并花一点时间对应用的 Google Play“数据安全”部分进行任何适用的更新。
如需了解详情,请参阅有关如何在 Android 14 上以更显眼的方式显示数据安全信息的指南。
Accessibilità
Ridimensionamento non lineare dei caratteri fino al 200%
A partire da Android 14, il sistema supporta la scalabilità dei caratteri fino al 200%, offrendo agli utenti ipovedenti opzioni di accessibilità aggiuntive in linea con le linee guida per l'accessibilità dei contenuti web (WCAG).
Se utilizzi già unità di pixel scalabili (sp) per definire le dimensioni del testo, questa variazione probabilmente non avrà un impatto elevato sulla tua app. Tuttavia, devi eseguire test dell'interfaccia utente con le dimensioni dei caratteri massime attivate (200%) per verificare che la tua app possa supportare dimensioni dei caratteri più grandi senza influire sulla usabilità.
Sicurezza
Livello API target minimo installabile
A partire da Android 14, le app con un
targetSdkVersion
minore di 23
non può essere installato. Richiedere alle app di soddisfare questi livelli API target minimi
di sicurezza migliorano la sicurezza e la privacy degli utenti.
Il malware spesso prende di mira livelli API meno recenti per aggirare la sicurezza e la privacy
che sono state introdotte nelle versioni più recenti 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 14 rende più difficile per il malware evitare la sicurezza
e miglioramenti della privacy.
Il tentativo di installare un'app che ha come target un livello API inferiore comporterà un
di installazione non riuscita, con il seguente messaggio visualizzato in Logcat:
INSTALL_FAILED_DEPRECATED_SDK_VERSION: App package must target at least SDK version 23, but found 7
Sui dispositivi su cui viene eseguito l'upgrade ad Android 14, tutte le app con un targetSdkVersion
inferiore
rimarranno installate.
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
I nomi dei pacchetti dei proprietari dei media potrebbero essere oscurati
媒体库支持查询 OWNER_PACKAGE_NAME
列,该列表示存储特定媒体文件的应用。从 Android 14 开始,除非满足以下条件之一,否则系统会隐去此值:
- 存储媒体文件的应用有一个软件包名称始终对其他应用可见。
查询媒体库的应用会请求
QUERY_ALL_PACKAGES
权限。
详细了解 Android 如何出于隐私保护目的而过滤软件包可见性。