Google ha pubblicato la versione della piattaforma mobile open-source Android 17. I codici sorgente correlati al nuovo rilascio sono disponibili nel repository Git del progetto (branch android-17.0.0_r1). Le build del firmware sono state preparate per i dispositivi Pixel 6/6a/6 Pro, Pixel 7/7a/7 Pro, Pixel 8/8a/8 Pro, Pixel 9/9a/9 Pro/9 Pro XL/9 Pro Fold, Pixel 10/10 Pro/10 Pro XL/10 Pro Fold, Pixel Fold e Pixel Tablet. Le build preliminari del firmware sono disponibili per i dispositivi HONOR, iQOO, Lenovo, OnePlus, OPPO, realme, Sharp, vivo e Xiaomi. Sono in fase di sviluppo le build universali GSI (Generic System Images), compatibili con diversi dispositivi basati su architetture ARM64 e x86_64.
Tra le modifiche (1, 2, 3):
- È stata aggiunta una nuova modalità di lavoro a più finestre – "Bubbles", che consente di avviare qualsiasi applicazione in finestre fluttuanti, simili alle notifiche per l'invio di messaggi ("bolle"), ma non legate a un'API specializzata. L'apertura di un'applicazione in una finestra fluttuante avviene tenendo premuta l'icona dell'app. Su schermi grandi, le icone delle finestre fluttuanti vengono visualizzate in un'area separata della barra delle applicazioni. Queste finestre possono essere raggruppate, spostate e ancorate allo schermo.

- È proseguito lo sviluppo della piattaforma per dispositivi con schermi grandi, come tablet, laptop, sistemi desktop e smartphone con schermi pieghevoli. Sono state rimosse le precedenti opzioni per disabilitare il nuovo comportamento su dispositivi con schermi larghi più di 600 pixel condizionati (dp), legato all'ignorare alcune API per gestire il cambiamento di dimensione e orientamento dello schermo (screenOrientation, resizeableActivity, [min|max]AspectRatio), oltre alla disposizione adattiva delle applicazioni in finestre, che consentono il ridimensionamento e il movimento sullo schermo.


- È stato aggiunto l'API di sistema EyeDropper, che consente all'applicazione di ottenere informazioni sul colore di qualsiasi pixel sullo schermo senza la necessità di autorizzazioni per catturare lo schermo. La sicurezza è garantita dal fatto che l'utente può scegliere autonomamente l'area per determinare il colore tramite un'interfaccia gestita dalla piattaforma con il «contagocce», non controllata dall'app, cioè l'app non può richiedere informazioni su un pixel specifico e ricreare pixel per pixel il contenuto dello schermo.

- È stato aggiunto un'interfaccia di sistema per la selezione dei contatti dalla rubrica, accessibile con l'autorizzazione ACTION_PICK_CONTACTS. Questa interfaccia consente di evitare l'autorizzazione READ_CONTACTS, che permette di leggere tutti i dati dei contatti. Quando viene chiamata la nuova interfaccia, l'utente decide quali informazioni specifiche dalla rubrica inviare all'app, con la possibilità di selezionare solo campi specifici.

- È stato aggiunto l'API PhotoPickerUiCustomizationParams per modificare l'interfaccia di selezione delle foto, avvicinandola allo stile dell'app che l'ha invocata. Ad esempio, è possibile cambiare il rapporto di aspetto delle anteprime delle foto da 1:1 (quadrata) a 9:16 (ritratto).

- È stata aggiunta l'autorizzazione USE_LOCATION_BUTTON, che consente di integrare nell'interfaccia dell'app una pulsante di sistema per fornire l'accesso a dati sulla posizione accurati. Il pulsante viene disegnato dal sistema e, una volta premuto dall'utente, consente l'accesso alla posizione solo per la durata della sessione attuale.

- È stata aggiunta un'impostazione che consente di rimuovere la visualizzazione dei nomi delle applicazioni sotto le loro icone.

- L'interfaccia della barra degli strumenti per la registrazione di screencast è stata modificata.

- È stata aggiunta la supporto per le reazioni dello schermo (Screen Reactions), che combinano la registrazione video dalla fotocamera frontale con la creazione di un screencast per sovrapporre i propri commenti alle azioni sullo schermo.
- È stata aggiunta una modalità per i giochi su dispositivi con schermi pieghevoli, in cui una metà dello schermo pieghevole è utilizzata per mostrare il gameplay, mentre l'altra per un gamepad virtuale.

- Aggiunto l'API Handoff, che permette di trasferire lo stato dell'app su un altro dispositivo Android nelle vicinanze (ad esempio, un tablet) e continuare a lavorarci.

- Sono state implementate finestre ancorate interattive che, a differenza delle tradizionali finestre in modalità 'picture-in-picture', rimangono interattive quando ancorate sopra ad altre applicazioni in modalità desktop.
- Sono state aggiunte due nuove API: API UWB DL-TDOA - per determinare la posizione del dispositivo all'interno di un edificio utilizzando il Wi-Fi per la navigazione interna; API di Rilevamento della Prossimità per rilevare i dispositivi nelle vicinanze tramite Wi-Fi.
- È stata aggiunta la supporto per il formato video VVC (Versatile Video Coding), conosciuto anche come standard di compressione video H.266, sviluppato congiuntamente dai gruppi di lavoro MPEG (ISO/IEC JTC 1) e VCEG (ITU-T), con la partecipazione di aziende come Apple, Ericsson, Intel, Huawei, Microsoft, Qualcomm e Sony. H.266 sostituisce H.265 (HEVC) e offre un'alta efficienza nella trasmissione e nello stoccaggio di tutte le risoluzioni dello schermo (da SD e HD a 4K e 8K), supporta video con intervallo dinamico elevato (HDR, High Dynamic Range) e video panoramico a 360 gradi.
- È stata aggiunta la possibilità di registrare video con un livello di qualità costante. La modalità viene impostata nell'oggetto MediaRecorder, utilizzando il metodo setVideoEncodingQuality(), che consente di fissare il livello di qualità senza legarlo al bitrate.
- È stata aggiunta la supporto per il formato di immagini RAW14, utilizzato nelle fotocamere digitali professionali e che consente di memorizzare 15 bit per canale colore.
- È stata aggiunta la supporto per il formato video HDR Eclipsa.
- È stato aggiunto il codificatore software per il formato audio HE-AAC (High-Efficiency Advanced Audio Coding), che supporta sia bitrate bassi che alti.
- È stata aggiunta una nuova autorizzazione ACCESS_LOCAL_NETWORK per limitare l'accesso delle applicazioni alla rete locale. La presenza di questa autorizzazione consente alle applicazioni di identificare e connettersi ai dispositivi nella rete locale, come quelli per la smart home e i sistemi multimediali. L'autorizzazione è stata aggiunta per bloccare la scansione delle risorse della rete locale da parte di applicazioni dannose, per esempio, per nascondere l'identificazione dell'ambiente dell'utente.
- È stata ampliata la protezione contro l'intercettazione dei codici OTP e delle conferme inviate via SMS. Ora, l'accesso diretto a tali messaggi viene concesso alla maggior parte delle applicazioni solo dopo tre ore dalla loro ricezione. Nell'applicazione standard per la lettura degli SMS, tali messaggi vengono mostrate immediatamente.
- Implementata la protezione contro le chiamate di truffa da parte di falsi operatori bancari. La piattaforma può interagire con le app bancarie installate per verificare che la chiamata sia stata avviata dalla banca. Inoltre, le banche possono identificare i numeri di telefono da cui sono consentite solo le chiamate in ingresso.
- Aggiunta la possibilità di fornire temporaneamente l'accesso ai dati sulla posizione esatta alle app, valido solo per la durata della sessione attiva.
- Il meccanismo di protezione del caricamento dinamico del codice (DCL, Dynamic Code Loading) è stato esteso per l'uso con librerie native caricate tramite il metodo System.load(), e non solo
con file nei formati DEX e JAR. Il DCL consente di evitare l'inserimento di codice dannoso nei file eseguibili caricati dinamicamente, impostando permessi di accesso che consentono solo la lettura per tali file. - Attivato di default il meccanismo di Certificate Transparency, che mantiene un registro pubblico di tutti i certificati emessi e revocati,
- È stata offerta la possibilità di firmare i pacchetti APK con una firma digitale basata su un algoritmo ibrido, che combina l'algoritmo classico con l'algoritmo ML-DSA, resistente agli attacchi su computer quantistici.
- Per le applicazioni che funzionano in background, l'accesso alle API per la riproduzione audio, la connessione a dispositivi audio e la modifica del volume è limitato. Si intende che solo le applicazioni attive con cui l'utente sta interagendo attualmente possano avviare la riproduzione e modificare il volume.
- È stata aggiunta la supporto per la crittografia ibrida basata sul meccanismo HPKE (Hybrid Public Key Encryption, RFC 9180), che unisce la semplicità della trasmissione della chiave nella crittografia a chiave pubblica con l'alta prestazione della crittografia simmetrica (i dati vengono crittografati con una chiave simmetrica veloce, mentre la chiave stessa è crittografata con un algoritmo asimmetrico più lento).
- Di default, durante l'immissione di password e PIN tramite una tastiera fisica, la visualizzazione dell'ultimo carattere inserito è disattivata durante la digitazione.
- Per semplificare l'implementazione del supporto per i touchpad nei giochi, è stata unificata la gestione degli eventi provenienti dal mouse e dal touchpad: per impostazione predefinita, gli eventi del touchpad relativi al movimento del cursore e ai gesti di scorrimento vengono ora convertiti in un formato con coordinate relative, come per il mouse. L'accesso alle coordinate assolute è fornito solo quando si specifica esplicitamente la modalità POINTER_CAPTURE_MODE_ABSOLUTE.
- Nell'oggetto ChooserSession è stato aggiunto il metodo getInitialRestingBounds(), che consente di conoscere la posizione finale e le dimensioni della finestra di selezione (Chooser) dopo la conclusione dell'animazione e il caricamento dei dati.
- Aggiunti i metodi getStreamingAppMaxDownlinkKbps e getStreamingAppMaxUplinkKbps per determinare la massima larghezza di banda del canale di comunicazione al fine di scegliere il livello di qualità durante lo streaming.
- Ai produttori di hardware è stato fornito un'API per creare estensioni per le telecamere, consentendo di utilizzare nelle applicazioni funzionalità specifiche, come il meccanismo di miglioramento della definizione Super Resolution, modalità di riduzione del rumore e ottimizzatori di qualità basati su AI.
- È stata aggiunta un'API per ottenere informazioni sul tipo di telecamera (telecamera integrata, telecamera web collegata tramite USB o telecamera virtuale).
- È stato aggiunto il supporto per gli apparecchi acustici collegati tramite Bluetooth Low Energy (BLE). Questi dispositivi sono stati classificati in una nuova categoria TYPE_BLE_HEARING_AID, consentendo alle applicazioni di distinguere tra apparecchi acustici e cuffie, nonché di gestire separatamente la riproduzione dei suoni di sistema (ad esempio, è possibile riprodurre i suoni delle notifiche, delle chiamate e della sveglia attraverso l'altoparlante integrato del telefono, invece che sull'apparecchio acustico).
- Sono state aggiunte impostazioni separate per attivare la visualizzazione della password immessa sulla tastiera fisica e sul touchscreen. Di default, i caratteri della password inseriti tramite la tastiera fisica vengono immediatamente nascosti.
- Migliorata la visualizzazione dei widget delle applicazioni sugli schermi esterni, tenendo conto delle differenze di DPI durante il ridimensionamento.
- Aggiunto il comando ACTION_VPN_APP_EXCLUSION_SETTINGS, che consente di aprire il pannello di sistema con le impostazioni per fornire all'applicazione l'accesso alla rete bypassando VPN-il tunnel.
- Aggiunto il supporto delle funzionalità del linguaggio e delle classi Java disponibili in OpenJDK 25.
- Ampliate le funzionalità delle interfacce di programmazione per lavorare con la fotocamera. Nell'oggetto CameraCaptureSession è stato aggiunto il metodo updateOutputConfigurations() per allegare o disattivare aree di output al volo senza la necessità di riconfigurare l'intero sessione di acquisizione dati dalla fotocamera. Nella pratica, questa modifica consente un passaggio fluido tra diverse modalità di funzionamento della fotocamera (ad esempio, registrazione video e scatto fotografico). Lavorando con telecamere logiche che coprono diversi sensori fisici, è stata aggiunta la possibilità di ricevere metadati su ciascun sensore, non solo su quello primario.
- L'attributo android:usesCleartextTraffic, che permetteva alle applicazioni di inviare traffico non crittografato, come le richieste effettuate tramite «http://», è stato dichiarato obsoleto. Se è necessario utilizzare traffico non crittografato, devono essere utilizzati file di configurazione separati per le impostazioni di sicurezza.
- Aggiunte impostazioni per gestire la cronologia delle chiamate VoIP, consentendo di controllare la conservazione delle informazioni nei log e la visualizzazione nell'interfaccia delle informazioni sulle chiamate effettuate.
- Nell'API Wi-Fi RTT (Round-Trip-Time) è stata ampliata la possibilità di determinare continuamente la distanza approssimativa dai punti di accesso e di identificare in modo sicuro i nodi per le connessioni P2P (peer-to-peer).
- Nel CompanionDeviceManager sono stati aggiunti nuovi profili per richiedere autorizzazioni e interagire con dispositivi medici e fitness tracker.
- In Android Runtime (ART) è implementato un garbage collector generazionale (Generational Concurrent Mark-Compact Garbage Collector) che utilizza un trattamento separato degli oggetti "vecchi" e "giovani", aumentando così l'efficienza della pulizia degli oggetti recentemente creati con breve tempo di vita. L'uso del garbage collector generazionale riduce il rischio di pause durante l'allocazione delle risorse e diminuisce il carico sulla CPU, migliorando così l'efficienza energetica.
- È stato implementato un limite sul massimo quantitativo di memoria RAM che un'applicazione può occupare. Se il limite, calcolato in base alla RAM disponibile nel dispositivo, viene superato, l'applicazione viene terminata forzatamente. Per ridurre le dimensioni della memoria utilizzata, è stato proposto l'ottimizzatore R8, che comprime i nomi di classi, metodi e campi, e rimuove il codice e le risorse non utilizzate.
- Nella compilazione del kernel Linux è attivata l'ottimizzazione AutoFDO (Ottimizzazione Auto-Feedback-Directed), che utilizza i risultati del profiling con informazioni sulla frequenza di esecuzione delle varie sezioni del codice per migliorare le prestazioni delle operazioni frequentemente eseguite. Nei test condotti, l'attivazione di AutoFDO per il kernel ha portato a una riduzione del tempo di avvio del 2,1%, a un'accelerazione del primo avvio delle applicazioni del 4,3%, a un aumento dell'efficienza delle chiamate di sistema del 9,3%, a una riduzione del tempo di esecuzione delle transazioni mmap di Binder del 12,3%, HwBinder del 20% e Binder RPC del 21,7%.
- È stata proposta una nuova implementazione della coda dei messaggi android.os.MessageQueue, che funziona senza blocchi. La nuova implementazione consente di migliorare le prestazioni e ridurre la perdita di fotogrammi.
- Per le applicazioni che dichiarano il supporto per Android 17 e versioni successive, è vietato modificare i valori dei campi contrassegnati come «static final», consentendo così di sfruttare ottimizzazioni delle prestazioni più aggressive durante il runtime.
- Per ridurre il consumo di memoria, è limitata la dimensione dei layout personalizzati delle notifiche (notification view).
- Nel profiler ProfilingManager sono stati aggiunti ulteriori trigger TRIGGER_TYPE_COLD_START, TRIGGER_TYPE_OOM e TRIGGER_TYPE_KILL_EXCESSIVE_CPU_USAGE per raccogliere dati utili nella risoluzione di problemi di prestazioni.
Fonte: opennet.ru











