La piattaforma Android 14 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 14,
indipendentemente da
targetSdkVersion. Devi testare la tua app e poi modificarla in base alle necessità per supportare correttamente questi comportamenti, 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
Per impostazione predefinita, la pianificazione delle sveglie esatte viene negata
Exact alarms are meant for user-intentioned notifications, or for actions that
need to happen at a precise time. Starting in Android 14, the
SCHEDULE_EXACT_ALARM
permission is no longer being pre-granted to most newly installed apps
targeting Android 13 and higher—the permission is denied by default.
Learn more about the changes to the permission for scheduling exact alarms.
Le trasmissioni registrate nel contesto vengono messe in coda mentre le app sono memorizzate nella cache
On Android 14, the system can place context-registered broadcasts in a queue while the app is in the cached state. This is similar to the queuing behavior that Android 12 (API level 31) introduced for async binder transactions. Manifest-declared broadcasts aren't queued, and apps are removed from the cached state for broadcast delivery.
When the app leaves the cached state, such as returning to the foreground, the system delivers any queued broadcasts. Multiple instances of certain broadcasts might be merged into one broadcast. Depending on other factors, such as system health, apps might be removed from the cached state, and any previously queued broadcasts are delivered.
Le app possono terminare solo i propri processi in background
Starting in Android 14, when your app calls killBackgroundProcesses(),
the API can kill only the background processes of your own app.
If you pass in the package name of another app, this method has no effect on that app's background processes, and the following message appears in Logcat:
Invalid packageName: com.example.anotherapp
Your app shouldn't use the killBackgroundProcesses() API or otherwise attempt
to influence the process lifecycle of other apps, even on older OS versions.
Android is designed to keep cached apps in the background and kill them
automatically when the system needs memory. If your app kills other apps
unnecessarily, it can reduce system performance and increase battery consumption
by requiring full restarts of those apps later, which takes significantly more
resources than resuming an existing cached app.
L'MTU è impostato su 517 per il primo client GATT che richiede un MTU
Starting from Android 14, the Android Bluetooth stack more strictly adheres to
Version 5.2 of the Bluetooth Core Specification and requests
the BLE ATT MTU to 517 bytes when the first GATT client requests an MTU using
the BluetoothGatt#requestMtu(int) API, and disregards all subsequent MTU
requests on that ACL connection.
To address this change and make your app more robust, consider the following options:
- Your peripheral device should respond to the Android device's MTU request
with a reasonable value that can be accommodated by the peripheral. The
final negotiated value will be a minimum of the Android requested value and
the remote provided value (for example,
min(517, remoteMtu))- Implementing this fix could require a firmware update for peripheral
- Alternatively, limit your GATT characteristic writes based on the minimum
between the known supported value of your peripheral and the received MTU
change
- A reminder that you should reduce 5 bytes from the supported size for the headers
- For example:
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 introduce un nuovo motivo per cui un'app può essere inserita nel bucket di standby con limitazioni.
I job dell'app attivano più volte errori ANR a causa di timeout dei metodi onStartJob,
onStopJob o onBind.
(Per le modifiche a onStartJob e onStopJob, consulta JobScheduler rafforza il comportamento di callback e rete.)
Per monitorare se l'app è entrata o meno nel bucket di standby limitato, consigliamo di eseguire il logging con l'API UsageStatsManager.getAppStandbyBucket() all'esecuzione del job o con UsageStatsManager.queryEventsForSelf() all'avvio dell'app.
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
Per impostazione predefinita, il processo di un'app è in uno stato memorizzato nella cache quando viene spostato in background e non sono in esecuzione altri componenti del processo dell'app. Un processo di app di questo tipo
è soggetto a essere interrotto a causa della pressione sulla memoria di sistema. Qualsiasi lavoro eseguito dalle istanze Activity dopo l'esecuzione e il ritorno del metodo onStop(), mentre è in questo stato, non è affidabile e sconsigliato vivamente.
Android 14 introduce coerenza e applicazione a questo design. Poco dopo che un processo dell'app entra in uno stato memorizzato nella cache, il lavoro in background non è consentito finché un componente del processo non rientra in uno stato attivo del ciclo di vita.
Le app che utilizzano API di ciclo di vita supportate dal framework, come services, JobScheduler e Jetpack WorkManager, non dovrebbero essere interessate da queste modifiche.
Esperienza utente
Modifiche al modo in cui gli utenti interagiscono con le notifiche non ignorabili
If your app shows non-dismissable foreground notifications to users, Android 14 has changed the behavior to allow users to dismiss such notifications.
This change applies to apps that prevent users from dismissing foreground
notifications by setting Notification.FLAG_ONGOING_EVENT through
Notification.Builder#setOngoing(true) or
NotificationCompat.Builder#setOngoing(true). The behavior of
FLAG_ONGOING_EVENT has changed to make such notifications actually
dismissable by the user.
These kinds of notifications are still non-dismissable in the following conditions:
- When the phone is locked
- If the user selects a Clear all notification action (which helps with accidental dismissals)
Also, this new behavior doesn't apply to notifications in the following use cases:
CallStylenotifications- Device policy controller (DPC) and supporting packages for enterprise
- Media notifications
- The default Search Selector package
Le informazioni sulla sicurezza dei dati sono più visibili
Per migliorare la privacy degli utenti, Android 14 aumenta il numero di punti in cui il sistema mostra le informazioni che hai dichiarato nel modulo di Play Console. Al momento, gli utenti possono visualizzare queste informazioni nella sezione Sicurezza dei dati della scheda della tua app su Google Play.
Ti invitiamo a esaminare le norme relative alla condivisione dei dati sulla posizione della tua app e a apportare eventuali aggiornamenti alla sezione Sicurezza dei dati di Google Play della tua app.
Scopri di più nella guida su come le informazioni sulla sicurezza dei dati sono più visibili su Android 14.
Accessibilità
Ridimensionamento non lineare dei caratteri fino al 200%
A partire da Android 14, il sistema supporta il dimensionamento dei caratteri fino al 200%, offrendo agli utenti opzioni di accessibilità aggiuntive.
Se utilizzi già unità di pixel scalabili (sp) per definire le dimensioni del testo, questa modifica probabilmente non avrà un impatto elevato sulla tua app. Tuttavia, devi eseguire test dell'interfaccia utente con le dimensioni del carattere massime abilitate (200%) per assicurarti che la tua app possa supportare dimensioni del carattere più grandi senza influire sull'usabilità.
Sicurezza
Livello API target installabile minimo
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
Il media store supporta le query per la colonna OWNER_PACKAGE_NAME, che indica l'app che ha archiviato un determinato file multimediale. A partire da Android
14, questo valore viene oscurato, a meno che non sia vera almeno una delle seguenti condizioni:
- L'app che ha archiviato il file multimediale ha un nome pacchetto sempre visibile alle altre app.
L'app che esegue query sul media store richiede l'autorizzazione
QUERY_ALL_PACKAGES.
Scopri di più su come Android filtra la visibilità dei pacchetti per motivi di privacy.