L'azienda Google ha pubblicato il rilascio della piattaforma mobile open-source Android 12. I codici sorgenti associati al nuovo rilascio sono disponibili nel repository Git del progetto (branch android-12.0.0_r1). Gli aggiornamenti del firmware sono stati preparati per i dispositivi della serie Pixel, così come per gli smartphone prodotti da Samsung Galaxy, OnePlus, Oppo, Realme, Tecno, Vivo e Xiaomi. Sono state create anche build universali GSI (Generic System Images), adatte per diversi dispositivi basati su architetture ARM64 e x86_64.
Novità principali:
- È stata proposta una delle aggiornamenti più importanti nel design dell'interfaccia nella storia del progetto. Il nuovo design realizza il concetto di "Material You", presentato come una variazione del Material Design di nuova generazione. Il nuovo concetto sarà automaticamente applicato a tutte le piattaforme e agli elementi dell'interfaccia, senza richiedere modifiche da parte degli sviluppatori di applicazioni. A luglio, verrà fornita agli sviluppatori la prima versione stabile del nuovo toolkit per la creazione di interfacce grafiche: Jetpack Compose.

Nella piattaforma stessa spicca un nuovo design dei widget. I widget sono stati resi più evidenti, con angoli arrotondati accentuati, e offrono la possibilità di utilizzare colori dinamici in base al tema di sistema. Sono stati aggiunti elementi di controllo interattivi, come caselle di controllo e interruttori (CheckBox, Switch e RadioButton), che ad esempio consentono di modificare le liste di attività nel widget TODO senza aprire l'app.

È stata implementata una transizione visiva più fluida verso le applicazioni avviate dai widget. È stata semplificata la personalizzazione dei widget: è stato aggiunto un pulsante (cerchio con una matita) per un rapido riposizionamento del widget sullo schermo, che appare quando si tiene premuto a lungo il widget.


Sono state fornite modalità aggiuntive per limitare le dimensioni del widget e la possibilità di utilizzare un layout adattivo per gli elementi del widget (responsive layout) per creare layout standard che cambiano in base alle dimensioni dell'area visibile (ad esempio, è possibile creare layout separati per tablet e smartphone). Nell'interfaccia di selezione dei widget (widget picker) è stata implementata un'anteprima dinamica e la possibilità di visualizzare la descrizione del widget.

- È stata aggiunta la possibilità di adattare automaticamente la palette di sistema al colore dello sfondo scelto: il sistema rileva automaticamente i colori predominanti, modifica l'attuale palette e applica le modifiche a tutti gli elementi dell'interfaccia, inclusa l'area delle notifiche, lo schermo di blocco, i widget e il regolatore del volume.
- Sono stati implementati nuovi effetti animati, come l'ingrandimento progressivo e il movimento fluido delle aree durante lo scorrimento, l'apparizione e lo spostamento degli elementi sullo schermo. Ad esempio, quando si annulla una notifica sullo schermo di blocco, l'indicatore dell'ora si ingrandisce automaticamente e occupa lo spazio precedentemente occupato dalla notifica.
- È stato riprogettato il layout dell'area a discesa con notifiche e impostazioni rapide. Tra le impostazioni rapide sono state aggiunte opzioni per Google Pay e gestione della smart home. Tenendo premuto il pulsante di accensione, viene attivato Google Assistant, al quale è possibile dare comandi per effettuare chiamate, aprire app o leggere ad alta voce articoli. Le notifiche, con contenuti forniti dall'app, sono state uniformate nel loro aspetto generale.

- È stato aggiunto un effetto di allungamento dei bordi di scorrimento (Stretch overscroll) che indica che l'utente è uscito dall'area di scorrimento e ha raggiunto la fine del contenuto. L'immagine del contenuto si allunga e rimbalza indietro con il nuovo effetto. La nuova modalità di indicazione della fine dello scorrimento è attivata per impostazione predefinita, ma nelle impostazioni è disponibile l'opzione per tornare al comportamento precedente.
- L'interfaccia è stata ottimizzata per i dispositivi con schermi pieghevoli.

- Sono state realizzate transizioni audio più fluide: quando si passa da un'applicazione che emette suoni a un'altra, il suono della prima ora ora si abbassa delicatamente e quello della seconda aumenta gradualmente, senza sovrapporre i suoni.
- È stata modernizzata l'interfaccia di gestione delle connessioni di rete nel pannello delle impostazioni rapide, nella barra e nel configuratore di sistema. È stata aggiunta una nuova barra Internet, che consente di passare rapidamente tra diversi provider e diagnosticare problemi.

- È stata aggiunta la possibilità di creare screenshot che coprono non solo l'area visibile, ma anche il contenuto nelle aree scorrevoli. La possibilità di salvare contenuti al di fuori dell'area visibile funziona per tutte le app che utilizzano la classe View per l'output. Per implementare il supporto per screenshot scorrevoli in programmi che utilizzano interfacce specifiche, è stata proposta un'API ScrollCapture.

- È stata migliorata la funzione di rotazione automatica del contenuto dello schermo, che ora può utilizzare il riconoscimento facciale tramite la fotocamera frontale per determinare la necessità di ruotare lo schermo, ad esempio quando una persona utilizza il telefono distesa. Per garantire la privacy, le informazioni vengono elaborate in tempo reale senza salvare temporaneamente le immagini. Questa funzionalità è attualmente disponibile solo su smartphone Pixel 4 e modelli più recenti.
- È stata migliorata la modalità "immagine nell'immagine" (PIP, Picture in Picture) e aumentata la fluidità degli effetti di transizione. Se si attiva il passaggio automatico a PIP con il gesto up-to-home (slittamento della parte inferiore dello schermo verso l'alto), l'applicazione ora passa immediatamente alla modalità PIP, senza attendere il completamento dell'animazione. È migliorato il ridimensionamento delle finestre PIP con contenuti diversi dai video. È stata aggiunta la possibilità di nascondere la finestra PIP trascinandola verso il bordo sinistro o destro dello schermo. È stato modificato il comportamento al tocco della finestra PIP: un tocco ora provoca la visualizzazione dei pulsanti di controllo, mentre un doppio tocco cambia le dimensioni della finestra.
- È stata effettuata un'ottimizzazione significativa delle prestazioni del sistema: il carico sulla CPU dei principali servizi di sistema è stato ridotto del 22%, il che ha portato a un aumento dell'autonomia della batteria del 15%. Grazie alla riduzione della concorrenza nelle operazioni di blocco, alla riduzione dei ritardi e all'ottimizzazione dell'input/output, è stata migliorata la fluidità nel passaggio da un'applicazione all'altra e ridotto il tempo di avvio delle applicazioni.
Nel PackageManager, durante il lavoro con gli snapshot in modalità sola lettura, il conflitto di blocchi è stato ridotto del 92%. Nel meccanismo di interprocess communication, Binder ha implementato un caching leggero, che ha permesso di ridurre i ritardi di 47 volte per alcune tipologie di chiamate. È stata migliorata la performance nel trattamento di file dex, odex e vdex, portando a una riduzione del tempo di caricamento delle applicazioni, soprattutto su dispositivi con una quantità limitata di memoria. È stato accelerato il lancio delle applicazioni dalle notifiche; ad esempio, l'apertura di Google Photos da una notifica ora avviene il 34% più velocemente.
È stata aumentata la performance delle query al database tramite l'applicazione di ottimizzazioni inline nell'operazione CursorWindow. Per piccole quantità di dati, CursorWindow è diventato più veloce del 36%, mentre per set di più di 1000 righe, l'accelerazione può raggiungere fino a 49 volte.
Sono stati proposti criteri per la classificazione dei dispositivi in base alla loro performance. A seconda delle capacità del dispositivo, gli viene assegnata una classe di performance, che può poi essere utilizzata dalle applicazioni per limitare le funzionalità dei codec su dispositivi a bassa potenza o per gestire contenuti multimediali di qualità superiore su hardware più potente.
- È stata implementata una modalità di ibernazione delle applicazioni che consente, se l'utente non interagisce esplicitamente con il programma da molto tempo, di ripristinare automaticamente le autorizzazioni precedentemente concesse all'applicazione, fermare l'esecuzione, restituire le risorse utilizzate dall'applicazione, come la memoria, e bloccare l'avvio di lavori in background e l'invio di notifiche push. Questa modalità può essere applicata alla maggior parte delle applicazioni e serve a proteggere i dati dell'utente, a cui possono continuare ad avere accesso programmi dimenticati da tempo. Se lo si desidera, la modalità di ibernazione può essere disattivata selettivamente nelle impostazioni.
- È stata ottimizzata l'animazione durante la rotazione dello schermo, il che ha permesso di ridurre il ritardo prima della rotazione di circa il 25%.
- È stato incluso un nuovo motore di ricerca ad alte prestazioni, AppSearch, che consente di indicizzare informazioni sul dispositivo e di eseguire ricerche a testo libero con ranking dei risultati. AppSearch offre due tipi di indici: per organizzare la ricerca all'interno di singole applicazioni e per la ricerca nell'intero sistema.
- È stata aggiunta l'API Game Mode e le relative impostazioni, che consentono di gestire il profilo delle prestazioni del gioco: ad esempio, si può sacrificare la prestazione per prolungare la durata della batteria o utilizzare tutte le risorse disponibili per raggiungere il massimo FPS.
- È stata aggiunta la funzione play-as-you-download per scaricare risorse di gioco in background durante l'installazione, permettendo di iniziare a giocare prima che il download sia completato.
- È stata aumentata la reattività e la velocità di risposta durante l'interazione con le notifiche. Ad esempio, toccando una notifica ora avviene un passaggio immediato all'applicazione correlata. Negli app, è limitato l'uso dei gestori intermedi delle notifiche (notification trampoline).
- È stata ottimizzata la chiamata IPC in Binder. Grazie all'applicazione di una nuova strategia di caching e alla risoluzione dei conflitti durante il blocco, si è riusciti a ridurre significativamente i ritardi. In generale, le prestazioni delle chiamate Binder sono aumentate di circa il doppio, ma in alcuni settori si è riusciti a ottenere un'accelerazione ancora più consistente. Ad esempio, la chiamata a refContentProvider() è diventata più veloce di 47 volte, releaseWakeLock() di 15 volte e JobScheduler.schedule() di 7,9 volte.
- Per prevenire potenziali problemi di prestazioni, alle applicazioni è vietato avviare servizi prioritari (foreground service) durante il funzionamento in background, ad eccezione di alcuni casi speciali. Si raccomanda di utilizzare WorkManager per avviare operazioni mentre si è in background. Per semplificare il passaggio, è stato proposto un nuovo tipo di operazione in JobScheduler, che viene avviata immediatamente, ha una priorità aumentata e accesso alla rete.
- È stata implementata l'interfaccia Privacy Dashboard con una panoramica generale di tutte le impostazioni dei permessi, che consente di comprendere a quali dati dell'utente le applicazioni hanno accesso. Nell'interfaccia è disponibile anche una scala temporale che visualizza la cronologia degli accessi delle applicazioni al microfono, alla fotocamera e ai dati sulla posizione. Per ciascuna applicazione è possibile visualizzare i dettagli e le ragioni dell'accesso ai dati sensibili.

- Nella dashboard sono stati aggiunti indicatori di attività del microfono e della fotocamera, che appaiono quando un'applicazione accede alla fotocamera o al microfono. Cliccando sugli indicatori si apre un dialogo con le impostazioni, che consente di determinare quale applicazione sta utilizzando la fotocamera o il microfono e, se necessario, revocare i permessi.
- Nel blocco delle impostazioni rapide è stato aggiunto un interruttore, attraverso il quale è possibile disattivare forzatamente il microfono e la fotocamera. Dopo la disattivazione, i tentativi di accesso alla fotocamera e al microfono porteranno alla visualizzazione di una notifica e alla trasmissione di dati vuoti all'applicazione.

- È stata aggiunta una nuova notifica, visualizzata in basso allo schermo ogni volta che un'applicazione tenta di leggere il contenuto degli appunti tramite la chiamata della funzione getPrimaryClip(). Se il contenuto degli appunti viene copiato nella stessa applicazione in cui è stato aggiunto, la notifica non viene visualizzata.
- È stata aggiunta un'autorizzazione separata BLUETOOTH_SCAN per la scansione dei dispositivi circostanti tramite Bluetooth. In precedenza, questa funzionalità era disponibile solo se si aveva accesso alle informazioni sulla posizione del dispositivo, il che portava alla necessità di fornire ulteriori autorizzazioni alle applicazioni che richiedevano il pairing con un altro dispositivo tramite Bluetooth.
- È stato modernizzato il dialogo per la concessione di accesso alle informazioni sulla posizione del dispositivo. Ora all'utente è data la possibilità di fornire all'app informazioni sulla posizione esatta oppure di fornire solo dati approssimativi, oltre a limitare l'azione dei permessi solo alla sessione attiva con l'app (vietando l'accesso quando è in background). Il livello di precisione dei dati forniti alla scelta di una posizione approssimativa può essere modificato nelle impostazioni, anche in relazione a singole applicazioni.

- Gli sviluppatori di applicazioni hanno la possibilità di disattivare le finestre pop-up con avvisi che coprono il contenuto. In precedenza, la possibilità di generare finestre sovrapposte era regolata da una richiesta di autorizzazione, confermata durante l'installazione delle applicazioni che generano finestre sovrapposte. Non erano disponibili strumenti per influenzare la sovrapposizione del contenuto delle applicazioni le cui finestre venivano sovrapposte. Utilizzando il metodo Window#setHideOverlayWindows(), tutte le finestre che coprono il contenuto ora verranno nascoste automaticamente. Ad esempio, il nascondimento può essere attivato quando viene visualizzata un'informazione particolarmente importante, come la conferma di una transazione.
- Le applicazioni hanno ora ulteriori impostazioni per limitare le operazioni con le notifiche durante il blocco dello schermo. In precedenza, era possibile solo gestire la visibilità delle notifiche durante il blocco dello schermo, mentre ora è possibile attivare l'autenticazione obbligatoria per eseguire qualsiasi azione con le notifiche durante il blocco dello schermo. Ad esempio, un'app di messaggistica può richiedere l'autenticazione prima di eliminare un messaggio o contrassegnarlo come letto.
- È stato aggiunto l'API PackageManager.requestChecksums() per richiedere e controllare il checksum dell'applicazione installata. Sono supportati algoritmi come SHA256, SHA512 e Merkle Root.
- Nel motore web WebView è stata implementata la possibilità di utilizzare l'attributo SameSite per gestire il trattamento dei cookie. Il valore "SameSite=Lax" limita l'invio dei cookie per le subrichieste cross-site, come la richiesta di immagini o il caricamento di contenuti tramite iframe da un altro sito. In modalità "SameSite=Strict", i cookie non vengono inviati per nessun tipo di richiesta cross-site, incluse tutte le link in ingresso da siti esterni.
- Continua il lavoro sulla randomizzazione degli indirizzi MAC per escludere la possibilità di tracciare il dispositivo quando si connette a una rete wireless. Per le applicazioni non privilegiate, l'accesso all'indirizzo MAC del dispositivo è limitato e, quando viene chiamata la funzione getHardwareAddress(), ora viene restituito un valore vuoto.
- È stata aggiunta la possibilità di adattare gli elementi dell'interfaccia ai dispositivi con schermi arrotondati. Gli sviluppatori ora possono ottenere informazioni sui raggi degli angoli dello schermo e correggere gli elementi dell'interfaccia che si trovano in aree angolari invisibili. Attraverso il nuovo API RoundedCorner è possibile conoscere parametri come raggio e centro di arrotondamento, e tramite Display.getRoundedCorner() e WindowInsets.getRoundedCorner() è possibile determinare le coordinate di ciascun angolo arrotondato dello schermo.

- È stato aggiunto un nuovo API CompanionDeviceService, tramite il quale è possibile attivare applicazioni che gestiscono dispositivi companion, come smartwatch e fitness tracker. L'API risolve il problema dell'avvio e della connessione delle applicazioni necessarie quando un dispositivo companion è nelle vicinanze. Il sistema attiva il servizio quando il dispositivo è vicino e invia una notifica quando il dispositivo si disconnette o entra o esce dall'area di visibilità. Le applicazioni possono anche utilizzare il nuovo profilo dei dispositivi companion per semplificare la configurazione delle autorizzazioni per la connessione al dispositivo.
- È stato migliorato il sistema di previsione della banda. Le applicazioni ora possono richiedere informazioni sulla banda totale prevista in relazione all'operatore, a una rete wireless specifica (SSID Wi-Fi), al tipo di rete e al livello del segnale.
- È stato semplificato l'utilizzo di effetti visivi tipici, come sfocatura e distorsione dei colori, che ora possono essere applicati tramite l'API RenderEffect a qualsiasi oggetto RenderNode o all'intera area visibile, anche in combinazione con altri effetti. Questa funzionalità consente, ad esempio, di sfocare un'immagine mostrata tramite ImageView, senza una copia esplicita, trattamento e sostituzione del bitmap, delegando queste operazioni alla piattaforma. È stato inoltre proposto l'API Window.setBackgroundBlurRadius(), tramite il quale è possibile sfocare lo sfondo di una finestra con effetto vetro smerigliato e evidenziare la profondità attraverso la sfocatura dello spazio circostante alla finestra.

- Sono stati integrati strumenti per la ricodifica di flussi multimediali, utilizzabili in ambienti con applicazioni per fotocamere, che salvano video in formato HEVC, per garantire la compatibilità con applicazioni che non supportano questo formato. Per tali applicazioni è stata aggiunta una funzione di ricodifica automatica in un formato più comune AVC.
- È stato aggiunto il supporto per il formato delle immagini AVIF (AV1 Image Format), che utilizza tecnologie di compressione intra-frame dal formato di codifica video AV1. Il contenitore per la distribuzione dei dati compressi in AVIF è completamente analogo a HEIF. AVIF supporta sia immagini in HDR (High Dynamic Range) e spazi colore Wide-gamut, sia in gamma dinamica standard (SDR).
- È stata proposta un'API unificata OnReceiveContentListener per l'inserimento e il trasferimento tra applicazioni di contenuti avanzati (testo formattato, immagini, video, file audio, ecc.), utilizzando varie fonti di dati, inclusi gli appunti, la tastiera e l'interfaccia drag&drop.
- È stato aggiunto un effetto di feedback tattile realizzabile tramite il vibromotore integrato nei telefoni, la cui frequenza e intensità di vibrazione dipendono dai parametri del suono in uscita al momento. Questo nuovo effetto consente di percepire fisicamente il suono e può essere applicato per aggiungere ulteriore realismo a giochi e applicazioni audio.
- In modalità immersiva (Immersive mode), in cui il programma viene visualizzato a schermo intero nascondendo le barre di servizio, è stata semplificata la navigazione tramite gesti di controllo. Ad esempio, nelle applicazioni di lettura di libri, visione di video e lavoro con fotografie ora è possibile spostarsi con un singolo gesto di scorrimento.
- Nell'ambito del progetto Mainline, che consente di aggiornare singoli componenti di sistema senza aggiornare l'intera piattaforma, sono stati preparati nuovi moduli di sistema aggiornabili in aggiunta ai 22 moduli disponibili in Android 11. Gli aggiornamenti riguardano componenti non legati all'hardware, che vengono caricati tramite Google Play separatamente dagli aggiornamenti OTA del firmware del produttore. Tra i nuovi moduli che potranno essere aggiornati tramite Google Play senza aggiornare il firmware ci sono ART (Android Runtime) e un modulo per la ricodifica video.
- Nella classe WindowInsets è stata aggiunta un'API per determinare la posizione di visualizzazione degli indicatori di utilizzo della fotocamera e del microfono (gli indicatori possono sovrapporsi ai controlli nelle applicazioni a schermo intero e tramite l'API specificata, l'applicazione può modificare la propria interfaccia).
- Per i dispositivi gestiti in modo centralizzato è stata aggiunta la possibilità di vietare l'uso degli interruttori per disattivare il microfono e la fotocamera.
- Per le applicazioni CDM (Companion Device Manager) eseguite in background, che gestiscono dispositivi associati come smartwatch e tracker di attività, è stata fornita la possibilità di avviare servizi attivi (in primo piano).
- Invece di lavorare su una versione per dispositivi indossabili Android Wear, insieme a Samsung si è deciso di sviluppare una nuova piattaforma unificata che combini le funzionalità di Android e Tizen.
- Sono state ampliate le funzionalità delle versioni di Android per i sistemi di infotainment automobilistici e per le smart TV.
Fonte: opennet.ru














