Google ha pubblicato il rilascio della piattaforma mobile open source Android 14. I codici sorgente associati con questa nuova versione sono disponibili nel repository Git del progetto (branch android-14.0.0_r1). Gli aggiornamenti del firmware sono stati preparati per i dispositivi della serie Pixel. Successivamente, sono previsti aggiornamenti del firmware per smartphone prodotti da Samsung Galaxy, iQOO, Nothing, OnePlus, Oppo, Realme, Sharp, Sony, Tecno, vivo e Xiaomi. Inoltre, sono state create build universali GSI (Generic System Images), compatibili con diversi dispositivi basati su architetture ARM64 e x86_64.
Novità principali:
- Nel core della piattaforma è stato incluso lo storage Health Connect, precedentemente fornito come pacchetto separato tramite Google Play. Health Connect offre una gestione centralizzata dei dati provenienti da fitness tracker e altri dispositivi relativi alla salute dell’utente, consentendo l’accesso condiviso ai dati sanitari tra diverse applicazioni. L'accesso alle impostazioni di Health Connect sarà ora disponibile tramite il configuratore nativo della piattaforma; ad esempio, attraverso le impostazioni della privacy sarà possibile gestire quali app possono accedere a specifici dati sulla salute. Inoltre, in Health Connect è stata aggiunta la possibilità di salvare informazioni sui percorsi effettuati durante un allenamento (l'utente definisce un intervallo temporale per cui verrà mantenuto un elenco dei punti di riferimento). Il percorso può essere visualizzato su una mappa e, se desiderato, inviato per elaborazione ad altre applicazioni, previa conferma esplicita dell'operazione da parte dell'utente.

- Sono stati ampliati gli strumenti per la conferma dell'accesso alle informazioni sulla posizione. Nella finestra di dialogo con la richiesta di conferma per l'accesso alla posizione è stata aggiunta una nuova sezione con informazioni su quando l'applicazione sta trasferendo dati sulla posizione (accesso negato, consenti solo una volta e consenti ad ogni esecuzione dell'applicazione) e dettagli su dove ottenere ulteriori informazioni sull'accesso ai dati trasmessi.

- È stata implementata una notifica periodica (una volta al mese) che avvisa delle variazioni apportate dalle applicazioni che hanno accesso alla posizione, riguardo ai metodi di trasferimento dei dati a terzi (ad esempio, viene visualizzato quando un'app inizia a utilizzare i dati sulla posizione per mostrare pubblicità).

- Nell'utilizzo delle app è stata implementata un'indicazione più evidente con una freccia inversa, per facilitare la comprensione della possibilità di utilizzare il gesto sullo schermo per tornare indietro.

- Nel meccanismo Sharesheet, utilizzato per inviare dati (ad esempio, immagini o link) al di fuori dell'app o ad un altro utente, è stata introdotta la possibilità di aggiungere azioni personalizzate. Ad esempio, si può definire una propria lista di gestori ChooserAction, che mostrano le app e gli utenti ai quali è possibile inviare. Inoltre, è stato ampliato il numero di segnali utilizzati per classificare gli obiettivi per l'invio diretto dei dati.

- È stata fornita la possibilità di concedere parzialmente i diritti di accesso solo a foto e video selezionati dall'utente (READ_MEDIA_VISUAL_USER_SELECTED; i file a cui viene fornito accesso vengono scelti dall'utente attraverso l'interfaccia Photo picker durante il dialogo di richiesta dei diritti). Dopo che l'applicazione è stata trasferita in background o che il programma è stato chiuso, i diritti concessi dall'utente vengono automaticamente revocati. Nella finestra di dialogo di conferma dei diritti di accesso delle applicazioni ai file multimediali, è stata introdotta la possibilità di concedere accesso solo a foto o video selezionati.

- Nel configuratore è stata aggiunta una sezione per la sovrascrittura delle impostazioni delle preferenze regionali, come le unità di misura della temperatura, il primo giorno della settimana e il sistema di numerazione. Ad esempio, un europeo che vive negli Stati Uniti può impostare l'uso del grado Celsius per la visualizzazione della temperatura invece del grado Fahrenheit e considerare il lunedì come inizio della settimana invece della domenica.

- Sono state ampliate le opzioni di ingrandimento dei caratteri; il livello massimo di ingrandimento è stato aumentato dal 130% al 200%. Inoltre, per evitare che il testo ingrandito sembri eccessivamente grande, ora viene applicata automaticamente una modifica non lineare del livello di ingrandimento (il testo già grande non viene ingrandito tanto quanto quello piccolo), il che consentirà di ottenere una leggibilità ottimale per le persone con scarsa vista, senza il rischio di distorsioni nel layout dell'interfaccia.

- Il supporto per la registrazione di video con alto intervallo dinamico (HDR), introdotto nel precedente aggiornamento, è stato esteso con la possibilità di ricevere informazioni aggiuntive dalla fotocamera, consentendo di salvare le immagini in formato "Ultra HDR", in cui per la codifica del colore vengono utilizzati 10 bit per canale. Il formato Ultra HDR è completamente compatibile con JPEG, il che consente alle applicazioni di lavorare con immagini HDR senza modifiche e, se necessario, di visualizzarle utilizzando un intervallo di luminosità normale. L'output in modalità HDR viene garantito automaticamente dalla piattaforma in caso di attivazione del supporto HDR nel manifesto dell'applicazione o durante la chiamata di Window.setColorMode. Per il rendering separato di Ultra HDR tramite OpenGL o Vulkan, può essere utilizzata la classe Gainmap.

- I tipi di applicazioni che possono mostrare notifiche a schermo intero quando lo schermo è bloccato sono limitati. Tali notifiche sono progettate per attirare l'attenzione su informazioni che richiedono una risposta immediata, come la ricezione di una chiamata in arrivo o l'attivazione di una sveglia, pertanto i diritti per visualizzare tali notifiche saranno ora limitati alle applicazioni che gestiscono chiamate e avvisi.
- Migliorato il controllo delle animazioni che segnalano il passaggio tra diversi schermi (schede) nell'applicazione durante il gesto di scorrimento che sposta i contenuti. Sono stati aggiunti nuovi componenti per l'animazione del passaggio tra schermi inferiori e laterali, nonché per richiamare la ricerca. Aggiunto un API per creare effetti di transizione personalizzati nell'app.
- Aggiornato il set di estensioni per la fotocamera (Camera Extensions), che offre la possibilità di utilizzare algoritmi più prolungati che richiedono calcoli intensivi per l'elaborazione delle immagini, ad esempio, per migliorare la qualità delle foto scattate in condizioni di scarsa illuminazione. Sono state aggiunte funzionalità per prevedere i ritardi nell'elaborazione dell'immagine, ottenere informazioni sul progresso dell'elaborazione e ottenere rapidamente una bozza dell'immagine prima del completamento della preparazione dell'immagine finale. È stata implementata una modalità di anteprima SurfaceView più ottimizzata e a basso consumo energetico. Durante l'uso delle estensioni, è stato garantito il supporto del tocco per la messa a fuoco e lo zoom.
- Supporto per l'utilizzo delle funzionalità di zoom e ritaglio integrate nella fotocamera per l'elaborazione delle immagini RAW trasmesse.
- Per le cuffie cablate collegate tramite USB, è stata aggiunta la possibilità di applicare formati audio senza perdita di qualità (lossless). Nell'API è stata aggiunta la classe AudioMixerAttributes, che consente di inviare direttamente il suono al dispositivo, senza miscelazione, regolazione del volume e effetti di elaborazione.
- Nell'API grafico è stata implementata la classe Mesh, consentendo la creazione di varianti personalizzate di reti poligonali con shader di vertici e frammenti scritti in AGSL.
- Aggiunta la possibilità di accelerare hardware il rendering nel buffer, implementata tramite la classe HardwareBufferRenderer.
- Nella classe Path, che consente di creare grafica vettoriale basata su contorni geometrici compositi, è stata aggiunta la supporto per l'interpolazione tra contorni con struttura simile per creare un effetto di morphing e per utilizzare l'iteratore PathIterator per scorrere sequenzialmente tutti i segmenti del contorno.
- Sono state ampliate le possibilità di associare impostazioni linguistiche specifiche a diverse app. È stata fornita la possibilità di definire un elenco di lingue che verranno visualizzate nel configuratore Android al momento della selezione della lingua per un'app specifica.
- Sono state ampliate le aree in cui il sistema mostra informazioni relative alla privacy fornite dallo sviluppatore nel modulo della Play Console, come la politica relativa alla condivisione dei dati con terze parti. Ad esempio, tali informazioni ora vengono visualizzate nel dialogo di richiesta delle autorizzazioni.
- Negli app che utilizzano gestori che operano in background, ora è obbligatorio specificare il tipo di servizio in background. Durante il funzionamento, il sistema verifica la corrispondenza tra il tipo di servizio specificato, le autorizzazioni richieste e l'API utilizzata. Ad esempio, se l'app ha specificato il tipo di servizio in background FOREGROUND_SERVICE_TYPE_LOCATION, si presume che possano essere richieste le autorizzazioni ACCESS_COARSE_LOCATION o ACCESS_FINE_LOCATION.
- Sono state apportate modifiche per migliorare la sicurezza: è vietato inviare richieste di intent da parte delle applicazioni a determinati componenti interni della piattaforma. Il codice caricato dinamicamente deve ora essere contrassegnato con l'attributo di accesso in modalità sola lettura. Nelle funzioni ZipFile(String) e ZipInputStream.getNextEntry() è vietata la gestione di archivi zip i cui percorsi iniziano con il carattere "\/" o contengono la sequenza "..". È stato limitato l'avvio delle operazioni da gestori in background e aggiornati i vincoli riguardanti le chiamate delle API non fornite nel SDK.
- Collegando un dispositivo tramite USB a un computer desktop, oltre ai precedenti modi di interazione, come trasferimento file, carica, condivisione di Internet, ecc., è stata aggiunta la possibilità di utilizzare lo smartphone come webcam (modalità UVC, USB Video Class). Per impostazione predefinita, questa funzionalità è disattivata, ma può essere attivata in presenza di accesso root.
- Continua il miglioramento della piattaforma sui tablet e nei dispositivi con schermi pieghevoli. Sono state fornite librerie per la previsione degli eventi legati al movimento del cursore e per garantire bassa latenza durante l'uso di stilo. Sono stati forniti modelli di interfaccia per schermi grandi, prendendo in considerazione applicazioni come social media, comunicazioni, contenuti multimediali, lettura e acquisti.
- È stata aggiunta un'autorizzazione separata per consentire alle app di avviare azioni quando sono in background. L'attivazione mentre si è in background è limitata per non disturbare l'utente durante l'utilizzo dell'app attuale. Le app attive hanno ricevuto maggiori possibilità di controllo sull'attivazione di azioni da parte di altre app con cui interagiscono.
- È stata ottimizzata la gestione della memoria per un'allocazione più razionale delle risorse per le applicazioni in esecuzione in background. Dopo pochi secondi dalla messa in cache dell'applicazione, il lavoro in background è limitato alle interazioni con le API che gestiscono il ciclo di vita dell'applicazione, come le API Foreground Services, JobScheduler e WorkManager.
- Le notifiche contrassegnate con il flag FLAG_ONGOING_EVENT ora possono essere rifiutate quando vengono visualizzate su un dispositivo con lo schermo sbloccato. Se il dispositivo è in modalità blocco dello schermo, tali notifiche rimarranno non rifiutabili. Rimarranno non rifiutabili anche le notifiche importanti per il funzionamento del sistema.
- Nell'API PackageInstaller sono stati aggiunti nuovi metodi: requestUserPreapproval(), che consente al catalogo delle applicazioni di ritardare il download dei pacchetti APK fino a ottenere la conferma dell'installazione da parte dell'utente; setRequestUpdateOwnership(), che consente di assegnare al mittente future operazioni di aggiornamento dell'applicazione; setDontKillApp(), che consente di attivare ulteriori funzionalità per l'applicazione durante l'esecuzione del programma. Nell'API InstallConstraints, gli installatori possono attivare l'installazione degli aggiornamenti dell'applicazione nei momenti in cui l'applicazione non è in uso.
- Proseguono i miglioramenti per l'ottimizzazione della piattaforma su tablet e dispositivi con schermi pieghevoli. Sono state aggiornate le linee guida per lo sviluppo di applicazioni per dispositivi con schermi grandi e sono stati aggiunti modelli standard di interfaccia per grandi schermi, tenendo conto di applicazioni come social media, comunicazioni, contenuti multimediali, lettura e acquisti. È stata proposta una versione preliminare del Cross device SDK con strumenti per lo sviluppo di applicazioni che funzionano correttamente con diversi tipi di dispositivi (smartphone, tablet, smart TV, ecc.) e diversi formati.
- È stata ottimizzata la coordinazione nell'esecuzione di operazioni in background che richiedono molte risorse, come il caricamento di file di grandi dimensioni quando è disponibile una connessione Wi-Fi. Sono state apportate modifiche all'API per l'avvio dei servizi prioritari (Foreground Service) e alla programmazione dei compiti (JobScheduler), che ora include nuove funzionalità per i lavori avviati dall'utente relativi alla trasmissione dei dati. Sono stati introdotti requisiti per specificare il tipo di servizi prioritari avviati (lavorazione della fotocamera, sincronizzazione dei dati, riproduzione di contenuti multimediali, tracciamento della posizione, accesso al microfono, ecc.). È stato semplificato il modo in cui vengono definiti i criteri di attivazione per il caricamento dei dati, ad esempio, per caricare solo quando ci si connette tramite Wi-Fi.
- Il sistema interno di consegna di messaggi broadcast alle applicazioni è stato ottimizzato per ridurre il consumo energetico e aumentare la reattività. È stata migliorata la ricezione da parte delle applicazioni dei flussi di messaggi registrati: i messaggi possono essere messi in coda, uniti (ad esempio, una serie di messaggi BATTERY_CHANGED verrà aggregata in uno) e consegnati solo dopo che l'applicazione è uscita dallo stato di cached.
- È stato aumentato il limite massimo sul numero di applicazioni memorizzate nella cache, riducendo così il numero delle applicazioni avviate in modalità 'fredda' (non memorizzate nella cache e avviate più lentamente). Per i dispositivi con 8 GB di RAM, dopo la modifica dei limiti, il numero di avviamenti 'freddi' delle applicazioni è diminuito del 20%, mentre per quelli con 12 GB è diminuito del 30%.
- L'uso della funzione di esecuzione delle operazioni a tempo esatto (exact alarms) nelle applicazioni ora richiede l'acquisizione di un'autorizzazione separata SCHEDULE_EXACT_ALARM, poiché l'applicazione di questa funzionalità può influenzare negativamente l'autonomia e portare a un aumento del consumo delle risorse (per i compiti eseguiti secondo un programma, si raccomanda di utilizzare l'attivazione in un tempo approssimativo). Alle applicazioni che implementano un calendario e un orologio, che utilizzano l'attivazione a tempo esatto, deve essere concessa, alla prima installazione, l'autorizzazione USE_EXACT_ALARM. Le pubblicazioni nel catalogo Google Play delle applicazioni con l'autorizzazione USE_EXACT_ALARM sono ammesse solo per programmi che implementano la sveglia, il timer e il calendario con notifiche sugli eventi.
- È stata fornita la possibilità di specificare impostazioni della lingua legate a singole applicazioni. Ora lo sviluppatore dell'applicazione può modificare i parametri localeConfig attraverso la chiamata LocaleManager.setOverrideLocaleConfig per definire l'elenco delle lingue visualizzate per l'app nella schermata di impostazione di Android.
- È stato aggiunto l'API Grammatical Inflection per semplificare l'aggiunta di traduzioni degli elementi dell'interfaccia che tengono conto delle lingue con un sistema di generi.
- Per prevenire l'intercettazione delle richieste intent da parte di applicazioni dannose, nella nuova versione è vietato inviare intent senza una chiara indicazione del pacchetto o di un componente interno.
- È stata aumentata la sicurezza del caricamento dinamico del codice (DCL, Dynamic Code Loading) — per evitare l'inserimento di codice dannoso nei file eseguibili caricati dinamicamente, questi file ora devono avere permessi di accesso che consentono solo la lettura.
- È vietato installare applicazioni per le quali è dichiarata una versione SDK inferiore alla 23, permettendo così di bloccare l'aggiramento delle limitazioni dei privilegi attraverso il legame a vecchi API (la versione API 22 è vietata, poiché nella versione 23 (Android 6.0) è stato introdotto un nuovo modello di gestione degli accessi, che consente di richiedere l'accesso alle risorse di sistema in tempo reale). Le applicazioni installate in precedenza che utilizzano vecchi API continueranno a funzionare dopo l'aggiornamento di Android.
- È stato proposto l'API Credential Manager, che consente di gestire l'accesso alle applicazioni utilizzando le credenziali di fornitori di autenticazione esterni. È stato implementato il supporto per la tecnologia Passkeys, che permette all'utente di autenticarsi senza password utilizzando identificatori biometrici, come le impronte digitali o il riconoscimento facciale. È stata migliorata l'interfaccia per la selezione dell'account.
- Nel Android Runtime (ART) è stato implementato il supporto per OpenJDK 17. Le librerie Java di base della piattaforma e gli strumenti di sviluppo delle applicazioni sono stati aggiornati a OpenJDK 17. È stato aggiunto il supporto per le funzionalità linguistiche e le classi Java disponibili in OpenJDK 17, come le classi di tipo record, le stringhe multilinee e il pattern matching nell'operatore 'instanceof'.
- Nel Android Runtime sono stati utilizzati metodi di compressione più avanzati, che hanno permesso di ridurre le dimensioni dei file in media del 9,3% senza compromettere le prestazioni.
- È stato modificato il metodo di aggiornamento dei certificati delle autorità di certificazione (CA). I certificati di sistema non saranno più legati al firmware, ma verranno forniti in un pacchetto separato, aggiornabile tramite Google Play. Questo approccio semplificherà il mantenimento dei certificati aggiornati e la rimozione dei certificati compromessi, impedendo anche ai produttori di dispositivi di manipolare l'elenco dei certificati radice, rendendo il processo di aggiornamento indipendente dagli aggiornamenti del firmware. D'altra parte, il nuovo metodo di distribuzione non consentirà all'utente di apportare modifiche ai certificati di sistema, anche se ha accesso root e controlla completamente il firmware.
Fonte: opennet.ru









