Firma Google opublikowała wersję otwartej mobilnej platformy Android 12. Powiązane z nowym wydaniem kody źródłowe znajdują się w repozytorium Git projektu (gałąź android-12.0.0_r1). Aktualizacje oprogramowania są dostępne dla urządzeń z serii Pixel oraz dla smartfonów produkcji Samsung Galaxy, OnePlus, Oppo, Realme, Tecno, Vivo i Xiaomi. Dodatkowo utworzono uniwersalne obrazy systemu GSI (Generic System Images), które są odpowiednie dla różnych urządzeń działających w architekturach ARM64 i x86_64.
Główne nowości:
- Proponowane jest jedno z najważniejszych aktualizacji interfejsu w historii projektu. Nowy design wprowadza koncepcję „Material You”, przedstawianą jako wariant Material Design nowej generacji. Nowa koncepcja będzie automatycznie stosowana do wszystkich platform i elementów interfejsu, nie wymagając od deweloperów aplikacji wprowadzania jakichkolwiek zmian. W lipcu deweloperzy aplikacji otrzymają pierwszą stabilną wersję nowego zestawu narzędzi do tworzenia interfejsów graficznych – Jetpack Compose.

W samej platformie wyróżnia się nowy wygląd widgetów. Widgety stały się bardziej widoczne, wzmocniono zaokrąglenie krawędzi, a także dodano możliwość korzystania z dynamicznych kolorów, odpowiadających systemowemu motywowi. Dodano interaktywne elementy sterujące, takie jak pola wyboru i przełączniki (CheckBox, Switch i RadioButton), które na przykład umożliwiają edytowanie list zadań w widgetach TODO bez otwierania aplikacji.

Wprowadzono płynniejszy wizualny przejście do aplikacji uruchamianych z widgetów. Uproszczono personalizację widgetów – dodano przycisk (określony jako okrąg z ołówkiem) do szybkiej zmiany położenia widgetu na ekranie, który pojawia się po długim naciśnięciu na widget.


Wprowadzono dodatkowe tryby ograniczenia rozmiaru widgetu oraz możliwość korzystania z adaptacyjnego układu elementów widgetu (responsive layout) do tworzenia standardowych układów, które zmieniają się w zależności od rozmiaru widocznej przestrzeni (na przykład można utworzyć oddzielne układy dla tabletów i smartfonów). W interfejsie wyboru widgetów (widget picker) zrealizowano dynamiczny podgląd oraz możliwość wyświetlania opisu widgetu.

- Dodano możliwość automatycznej adaptacji palety systemowej do koloru wybranych tapet — system automatycznie rozpoznaje dominujące kolory, dostosowuje aktualną paletę i wprowadza zmiany we wszystkich elementach interfejsu, w tym w obszarze powiadomień, ekranie blokady, widgetach oraz regulatorze głośności.
- Wprowadzono nowe animowane efekty, takie jak stopniowe powiększanie i płynny przesuw obszarów podczas przewijania, pojawiania się i przemieszczania elementów na ekranie. Na przykład, podczas odrzucania powiadomienia na ekranie blokady, wskaźnik czasu automatycznie powiększa się i zajmuje przestrzeń, którą wcześniej zajmowało powiadomienie.
- Przeprojektowano wygląd rozwijanej sekcji z powiadomieniami i szybkim dostępem do ustawień. Wśród szybkich ustawień dodano opcje dla Google Pay oraz zarządzania inteligentnym domem. Przy dłuższym przytrzymaniu przycisku zasilania wywołany jest Asystent Google, któremu można zlecić wykonanie połączenia, uruchomienie aplikacji lub przeczytanie artykułu na głos. Ujednolicono wygląd powiadomień z treścią ustaloną przez aplikację.

- Dodano efekt rozciągania granic przewijania (Stretch overscroll), który sygnalizuje użytkownikowi, że wyszedł poza obszar przewijania i osiągnął koniec zawartości. Obraz zawartości w nowym efekcie jakby rozciąga się i odbija z powrotem. Nowy tryb wskazywania końca przewijania jest włączony domyślnie, ale w ustawieniach przewidziano opcję przywrócenia starego zachowania.
- Interfejs zoptymalizowany dla urządzeń ze składanymi ekranami.

- Wprowadzone zostały płynniejsze przejścia dźwiękowe — przy przełączaniu z jednej aplikacji odtwarzającej dźwięk na drugą, dźwięk pierwszej teraz płynnie cichnie, a drugiej płynnie narasta, bez nakładania się dźwięków.
- Zmodernizowano interfejs zarządzania połączeniami sieciowymi w sekcji szybkich ustawień, panelu i systemowym konfiguratorze. Dodano nowy panel Internet, który umożliwia szybkie przełączanie między różnymi dostawcami oraz diagnozowanie problemów.

- Dodano możliwość tworzenia zrzutów ekranu, obejmujących nie tylko widoczną część, ale także treść w obszarze przewijania. Możliwość zapisywania treści poza widoczną strefą działa dla wszystkich aplikacji, które używają klasy View do wyświetlania. Aby umożliwić obsługę przewijanych zrzutów ekranu w programach korzystających z specyficznych interfejsów, zaproponowano interfejs API ScrollCapture.

- Ulepszono funkcję automatycznego obracania zawartości ekranu, która teraz może korzystać z rozpoznawania twarzy przez przednią kamerę, aby określić potrzebę obrotu ekranu, na przykład gdy osoba używa telefonu leżąc. Aby zapewnić prywatność, informacje są przetwarzane na bieżąco bez pośredniego zapisywania obrazów. Funkcja ta na razie dostępna jest tylko na smartfonach Pixel 4 i nowszych modelach.
- Poprawiono tryb „obraz w obrazie” (PIP, Picture in Picture) oraz zwiększono płynność efektów przejścia. W przypadku włączenia automatycznego przejścia do PIP przy gestach up-to-home (przesunięcie dolnej części ekranu do góry) aplikacja teraz od razu przechodzi w tryb PIP, nie czekając na zakończenie animacji. Udoskonalono zmianę rozmiaru okien PIP z zawartością inną niż wideo. Dodano możliwość ukrycia okna PIP poprzez przeciągnięcie go do lewej lub prawej krawędzi ekranu. Zmieniono zachowanie przy dotykaniu okna PIP - jedno dotknięcie teraz powoduje wyświetlenie przycisków sterujących, a podwójne zmienia rozmiar okna.
- Przeprowadzono znaczną optymalizację wydajności systemu — obciążenie CPU głównych usług systemowych zostało zredukowane o 22%, co z kolei doprowadziło do wydłużenia czasu pracy na baterii o 15%. Dzięki zmniejszeniu konkurencji blokad, ograniczeniu opóźnień oraz optymalizacji wejścia/wyjścia zwiększona została wydajność przechodzenia z jednej aplikacji do drugiej i skrócono czas uruchamiania aplikacji.
W PackageManager, podczas pracy z migawkami w trybie tylko do odczytu, rywalizacja blokad została zmniejszona o 92%. W mechanizmie komunikacji międzyprocesowej Binder zastosowano lekkie buforowanie, co pozwoliło na skrócenie opóźnień aż 47 razy dla niektórych rodzajów wywołań. Zwiększona wydajność przetwarzania plików dex, odex i vdex doprowadziła do skrócenia czasu ładowania aplikacji, szczególnie na urządzeniach z małą ilością pamięci. Przyspieszono uruchamianie aplikacji z powiadomień, na przykład uruchomienie Google Photos z powiadomienia teraz odbywa się o 34% szybciej.
Poprawiono wydajność zapytań do bazy danych poprzez zastosowanie optymalizacji inline w operacji CursorWindow. Dla niewielkich zbiorów danych CursorWindow stał się szybszy o 36%, a dla zestawów zawierających ponad 1000 wierszy, przyspieszenie może wynosić aż 49 razy.
Zaproponowano kryteria klasyfikacji urządzeń według wydajności. W zależności od możliwości urządzenia przypisywana jest mu klasa wydajności, która może być następnie używana w aplikacjach do ograniczania funkcjonalności kodeków na słabszych urządzeniach lub do pracy z multimedialnymi treściami o wyższej jakości na mocnym sprzęcie.
- Wprowadzono tryb hibernacji aplikacji, który pozwala na automatyczne odebranie wcześniej przyznanych aplikacji uprawnień, zatrzymanie wykonywania, zwrócenie zasobów używanych przez aplikację, takich jak pamięć, oraz zablokowanie uruchamiania prac w tle i wysyłania powiadomień push, gdy użytkownik od dłuższego czasu nie interagował z programem. Tryb ten może być stosowany do większości aplikacji i pozwala chronić dane użytkownika, do których nadal mają dostęp dawno zapomniane programy. W razie potrzeby tryb hibernacji można selektywnie wyłączyć w ustawieniach.
- Zoptymalizowano animację podczas obracania ekranu, co pozwoliło zmniejszyć opóźnienie przed obrotem o około 25%.
- W skład wchodzi nowa wysokowydajna wyszukiwarka AppSearch, która umożliwia indeksowanie informacji na urządzeniu i przeprowadzanie wyszukiwania pełnotekstowego z rankingiem wyników. AppSearch oferuje dwa typy indeksów — do organizacji wyszukiwania w poszczególnych aplikacjach oraz do wyszukiwania w całym systemie.
- Dodano API Game Mode oraz odpowiednie ustawienia, które pozwalają zarządzać profilem wydajności gier — na przykład można poświęcić wydajność na rzecz wydłużenia pracy baterii lub wykorzystać wszystkie dostępne zasoby, aby osiągnąć maksymalny FPS.
- Dodana funkcja play-as-you-download, która pozwala na pobieranie zasobów gier w tle podczas instalacji, co umożliwia rozpoczęcie grania jeszcze przed zakończeniem pobierania.
- Zwiększono responsywność i szybkość reakcji w pracy z powiadomieniami. Na przykład, po dotknięciu powiadomienia następuje natychmiastowe przejście do powiązanej z nim aplikacji. W aplikacjach ograniczono użycie pośrednich przetworników powiadomień (notification trampoline).
- Optymalizacja wywołań IPC w Binderze. Dzięki zastosowaniu nowej strategii buforowania i wyeliminowaniu konfliktów podczas blokad udało się znacząco skrócić opóźnienia. W ogólnym ujęciu wydajność wywołań Binder wzrosła w przybliżeniu dwukrotnie, ale w niektórych obszarach udało się osiągnąć jeszcze większe przyspieszenie. Na przykład wywołanie refContentProvider() stało się 47 razy szybsze, releaseWakeLock() 15 razy, a JobScheduler.schedule() 7,9 razy.
- W celu zapobiegania możliwym problemom z wydajnością aplikacjom zabrania się uruchamiania usług o wysokim priorytecie (foreground service) podczas działania w tle, z wyjątkiem kilku szczególnych przypadków. Do uruchamiania prac w tle zaleca się wykorzystanie WorkManager. W celu uproszczenia przejścia zaproponowano nowy typ prac w JobScheduler, który uruchamia się natychmiast, ma zwiększony priorytet i dostęp do sieci.
- Wprowadzono interfejs Privacy Dashboard z ogólnym przeglądem wszystkich ustawień uprawnień, umożliwiający zrozumienie, do jakich danych użytkownika aplikacje mają dostęp. W interfejsie dostępna jest także oś czasu, zwizualizowująca historię dostępu aplikacji do mikrofonu, kamery oraz danych o lokalizacji. Dla każdej aplikacji można przejrzeć szczegóły i powody dostępu do danych poufnych.

- Do panelu dodano wskaźniki aktywności mikrofonu i kamery, które pojawiają się, gdy aplikacja uzyskuje dostęp do kamery lub mikrofonu. Po kliknięciu na wskaźniki pojawia się okno dialogowe z ustawieniami, które pozwala określić, która dokładnie aplikacja korzysta z kamery lub mikrofonu, oraz w razie potrzeby cofnąć uprawnienia.
- Do wyskakującego bloku szybkich ustawień dodano przełączniki, które pozwalają wymuszenie wyłączenia mikrofonu i kamery. Po wyłączeniu, próby uzyskania dostępu do kamery i mikrofonu będą prowadzić do wyświetlenia powiadomienia i przesłania aplikacji pustych danych.

- Dodano nowe powiadomienie, które jest wyświetlane na dole ekranu za każdym razem, gdy aplikacja próbuje odczytać zawartość schowka za pomocą wywołania funkcji getPrimaryClip(). Jeśli zawartość schowka jest kopiowana w tej samej aplikacji, w której została dodana, powiadomienie nie jest wyświetlane.
- Dodano osobne uprawnienie BLUETOOTH_SCAN do skanowania pobliskich urządzeń przez Bluetooth. Wcześniej ta możliwość była udostępniana tylko w przypadku dostępu do informacji o lokalizacji urządzenia, co prowadziło do konieczności przyznawania dodatkowych uprawnień aplikacjom wymagającym parowania z innym urządzeniem przez Bluetooth.
- Zmodernizowany dialog udostępniania informacji o lokalizacji urządzenia. Użytkownik ma teraz możliwość przekazania aplikacji informacji o dokładnej lokalizacji lub tylko szacunkowych danych, a także ograniczenia działania uprawnień tylko do aktywnej sesji w programie (zabraniając dostępu w tle). Poziom dokładności danych wydawanych przy wyborze szacunkowej lokalizacji można zmienić w ustawieniach, w tym w powiązaniu z poszczególnymi aplikacjami.

- Deweloperzy aplikacji zyskali możliwość wyłączenia wyskakujących okienek z ostrzeżeniami, które zasłaniają treść. Wcześniej możliwość wyświetlania zasłaniających okienek regulowana była przez żądanie uprawnień, potwierdzanych podczas instalacji aplikacji wyświetlających te okna. Nie było narzędzi, które pozwalałyby wpływać na zasłanianie treści z aplikacji, których okna były zasłaniane. Przy użyciu wywołania Window#setHideOverlayWindows() wszystkie okna zasłaniające treść będą teraz automatycznie ukrywane. Na przykład, ukrywanie może być włączane przy wyświetlaniu szczególnie ważnych informacji, takich jak potwierdzenie transakcji.
- Aplikacje otrzymały dodatkowe ustawienia dla ograniczeń działań z powiadomieniami podczas zablokowanego ekranu. Wcześniej umożliwiono jedynie zarządzanie widocznością powiadomień podczas zablokowanego ekranu, a teraz można włączyć obowiązkową autoryzację przed dokonaniem jakichkolwiek działań z powiadomieniami podczas zablokowanego ekranu. Na przykład, aplikacja do wymiany wiadomości może wymagać przeprowadzenia autoryzacji przed usunięciem wiadomości lub oznaczeniem jej jako przeczytanej.
- Dodano API PackageManager.requestChecksums() do żądania i sprawdzania sum kontrolnych zainstalowanej aplikacji. Obsługiwane są takie algorytmy, jak SHA256, SHA512 i Merkle Root.
- W silniku webowym WebView wprowadzono możliwość użycia atrybutu SameSite do zarządzania obsługą plików cookie. Wartość „SameSite=Lax” ogranicza wysyłanie plików cookie dla międzystronnych subzapytań, takich jak zapytania o obraz lub ładowanie treści przez iframe z innej strony. W trybie „SameSite=Strict” pliki cookie nie są wysyłane dla jakiegokolwiek rodzaju międzystronnych zapytań, w tym dla wszystkich przychodzących linków z zewnętrznych stron.
- Prace nad losowaniem adresów MAC zostały kontynuowane, aby wykluczyć możliwość śledzenia urządzenia podczas podłączenia do sieci bezprzewodowej. Dla aplikacji bez przywilejów dostęp do adresu MAC urządzenia został ograniczony, a przy wywołaniu funkcji getHardwareAddress() zwracana jest teraz pusta wartość.
- Dodano możliwość dostosowania elementów interfejsu do urządzeń z zaokrąglonymi ekranami. Teraz deweloperzy mogą uzyskać informacje o zaokrągleniach ekranu i dostosować elementy interfejsu, które znajdują się w niewidocznych obszarach kątowych. Dzięki nowemu API RoundedCorner można poznać takie parametry jak promień i środek zaokrąglenia, a przez Display.getRoundedCorner() oraz WindowInsets.getRoundedCorner() określić współrzędne każdego zaokrąglonego kąta ekranu.

- Dodano nowy interfejs API CompanionDeviceService, za pomocą którego można aktywować aplikacje zarządzające urządzeniami towarzyszącymi, takimi jak smartwatche i fitness trackery. Interfejs API rozwiązuje problem z uruchamianiem i łączeniem wymaganych aplikacji w pobliżu urządzenia towarzyszącego. System aktywuje usługę, gdy urządzenie znajduje się w pobliżu, i wysyła powiadomienie, gdy urządzenie zostanie odłączone lub wchodzi lub wychodzi z zasięgu. Aplikacje mogą również korzystać z nowego profilu urządzeń towarzyszących, aby uprościć konfigurację uprawnień do łączenia się z urządzeniem.
- Zoptymalizowano system prognozowania przepustowości. Aplikacje mogą teraz zażądać informacji o przewidywanej całkowitej przepustowości w związku z operatorem, konkretną siecią bezprzewodową (SSID Wi-Fi), typem sieci oraz poziomem sygnału.
- Uproszczono stosowanie typowych efektów wizualnych, takich jak rozmycie i zniekształcenie kolorów, które można teraz stosować za pomocą API RenderEffect do dowolnego obiektu RenderNode lub całej widocznej przestrzeni, w tym w połączeniu z innymi efektami. Ta funkcjonalność umożliwia na przykład rozmycie obrazu wyświetlanego przez ImageView, bez konieczności jawnego kopiowania, przetwarzania i wymiany bitmapy, przenosząc te działania na stronę platformy. Dodatkowo zaproponowano API Window.setBackgroundBlurRadius(), za pomocą którego można rozmyć tło okna za pomocą efektu matowego szkła i uwydatnić głębię poprzez rozmycie przestrzeni otaczającej okno.

- Zintegrowano narzędzia do transkodowania strumieni multimedialnych, które mogą być używane w środowiskach aplikacji obsługujących kamerę, zapisując wideo w formacie HEVC, aby zapewnić zgodność z aplikacjami, które nie obsługują tego formatu. Dla takich aplikacji dodano funkcję automatycznego transkodowania do bardziej powszechnego formatu AVC.
- Dodano wsparcie dla formatu obrazów AVIF (AV1 Image Format), który wykorzystuje technologie wewnątrzkodrowego kompresji z formatu kodowania wideo AV1. Kontener do dystrybucji skompresowanych danych w AVIF jest całkowicie analogiczny do HEIF. AVIF obsługuje zarówno obrazy w HDR (High Dynamic Range) i przestrzeni barwnej szerokiego gamut, jak i w standardowym dynamice (SDR).
- Proponowane znormalizowane API OnReceiveContentListener do wstawiania i przenoszenia rozszerzonych rodzajów treści (sformatowany tekst, obrazy, wideo, pliki dźwiękowe itp.), wykorzystując różne źródła danych, w tym schowek, klawiaturę i interfejs drag&drop.
- Dodano efekt haptycznej informacji zwrotnej, realizowany za pomocą wbudowanego w telefony silnika wibracyjnego, którego częstotliwość i intensywność wibracji zależą od parametrów aktualnie emitowanego dźwięku. Nowy efekt pozwala fizycznie odczuwać dźwięk i może być używany do zwiększenia realizmu w grach i aplikacjach dźwiękowych.
- W trybie zanurzenia (Immersive mode), w którym program jest wyświetlany na cały ekran z ukrytymi paskami systemowymi, uproszczono nawigację za pomocą gestów sterujących. Na przykład w aplikacjach do czytania książek, oglądania wideo i pracy z fotografiami teraz można poruszać się za pomocą jednego gestu przesunięcia.
- W ramach projektu Mainline, który umożliwia aktualizację poszczególnych komponentów systemowych bez konieczności aktualizacji całej platformy, przygotowano nowe aktualizowane moduły systemowe w dodatku do 22 modułów dostępnych w Androidzie 11. Aktualizacje dotyczą komponentów, które nie są związane z sprzętem i są pobierane przez Google Play oddzielnie od aktualizacji OTA od producenta. Wśród nowych modułów, które można aktualizować przez Google Play bez aktualizacji oprogramowania, znajdują się ART (Android Runtime) i moduł do kodowania wideo.
- Do klasy WindowInsets dodano interfejs API do określania pozycji wyświetlania wskaźników użycia kamery i mikrofonu (wskaźniki mogą nakładać się na elementy sterujące w aplikacjach pełnoekranowych, a przez podany interfejs API aplikacja może dostosować swój interfejs).
- Dla systemów zarządzanych centralnie dodano możliwość zablokowania użycia przełączników do wyłączania mikrofonu i kamery.
- Dla aplikacji CDM (Companion Device Manager) działających w tle, zarządzających urządzeniami towarzyszącymi, takimi jak smartwatche i fitness trackery, wprowadzono możliwość uruchamiania aktywnych usług.
- Zamiast edycji dla urządzeń noszonych Android Wear, wspólnie z firmą Samsung postanowiono rozwijać nową zjednoczoną platformę, łączącą możliwości Android i Tizen.
- Rozszerzono możliwości edycji Android dla samochodowych systemów informacyjno-rozrywkowych i inteligentnych telewizorów.
Źródło: opennet.ru














