Android 13 – nowości i zmiany dla developerów
Premiera Androida 13 przeszła bez większego echa, co zresztą w przypadku kolejnych dużych wydań tego systemu stało się już chyba standardem. Dla końcowych użytkowników prezentowane nowości są zazwyczaj kosmetyczne i nijak mają się do tego, co każdej jesień prezentuje w iOS-ie Apple.
Osobną kwestię stanowi adopcja nowych wersji Androida – trudno, żeby wszyscy ze szczególnym zainteresowaniem śledzili rozwój tego systemu, skoro i tak w lwiej części przypadków będą musieli czekać na dostępność najnowszych wersji OS-a na swoim urządzeniu bardzo długo lub wcale nie otrzymają aktualizacji.
Android 13 – nowości dla developerów
Jak już wspomniano, w takich okolicznościach trudno się dziwić, że premiera nowego Androida 13 nie wywoływała większego zainteresowania. Zwłaszcza że nawet jak na standardy tego systemu jest to wydanie skromne, dopieszczające raczej zmiany zaprezentowane w poprzedniej wersji, i zwyczajnie nudne.
Tak przynajmniej może to wyglądać z perspektywy końcowego użytkownika. Zgoła inne znaczenie Android 13 może mieć dla developerów, ludzi dostarczających na system mobilny Google swoje aplikacje. Wiemy przecież, że każda nowa wersja systemu może otworzyć przed developerami nowe możliwości, ale też przysporzyć kłopotów. Sprawdźmy więc, jakie nowości Android 13 przynosi developerom.
Nowości w Androidzie 13
Z punktu widzenia programisty najpewniej najważniejszą zmianą będzie podmiana kolejnych rdzennych bibliotek Javy na nowsze wersje, co ma docelowo zapewnić pełną zgodność z OpenJDK 11. W efekcie, tworząc aplikacje na Androida, można już wykorzystywać słowo kluczowe var
dla lokalnych zmiennych i jako parametr wyrażeń lambd. O nowe metody wzbogaciła się klasa String (m.in. isBlank()
, lines()
, repeat()
, strip()
), rozszerzono obsługę SocketOptions
, a także dodano szereg nowych funkcji. Szczegóły w dokumentacji.
Liczne zmiany dotyczą pomniejszych usprawnień, które mogą ułatwić pracę programistom w aspektach, które skutkują kosmetycznymi zmianami. Do nich zaliczyć należy między innymi możliwość korzystania z ikon adaptacyjnych. Po tym, jak developer dostarczy odpowiedni plik ikony spełniający ściśle określone przez Google wymagania, a także jej wariant monochromatyczny, ikona będzie automatycznie dostosowywana do tego, jakie preferencje wizualne ma ustawione użytkownik – np. inaczej będzie się prezentować w trybie ciemnym, kolor będzie przystosowywany do głównego koloru karnacji, itd.
Nowości dla developerów przygotowano także w kwestii zarządzania językiem aplikacji. Wraz z premierą Androida 13 dodano bowiem możliwość ustawiania języka per aplikacja. Odtąd użytkownicy mogą bowiem w ustawieniach systemowych wybierać nie tylko jeden język wykorzystywany globalnie – w interfejsie systemu, jak i aplikacjach – ale też dodawać alternatywne języki, na które mogą automatycznie przełączać się aplikacje, gdy ta nie obsługuje języka głównego. W ręce programistów oddano przy okazji nowe API, setApplicationLocales()
oraz getApplicationLocales()
, które pozwalają aplikacja ustawiać w innym języki niż język systemowy.
Pomniejszych nowości, które przekładają się przede wszystkim na to, jak aplikacje wyglądają – dodano obsługę standardu COLRv1, które wykorzystywane jest między innymi do renderowania fontów i emoji i wykorzystuje w większej liczbie zastosowań grafikę wektorową, a nie bitmapy. Warto także zwrócić uwagę na zmiany w tym, jak w Androidzie działa schowek systemowy. W najnowszej wersji umożliwiono działanie mechanizmu pozwalającego na potwierdzenie wizualne, czy dane zapisały się w schowku.
Zmiany w zachowaniu aplikacji
Nie mniej ważne dla developerów niż nowości są zmiany, które mogą potencjalnie uszkodzić lub zmienić działanie ich aplikacji. Mogą także stanowić wyzwanie podczas podwyższania traget API. W Androidzie 13 (a więc API 33) zmienia się zachowanie menedżera usług działających w tyle (FSG Task Manager). Przede wszystkim użytkownicy będą odtąd mogli zatrzymywać aplikację wykorzystującą usługę w tle, po przełączeniu są na nią z poziomu powiadomienia. Mechanizm ten może wymagać dostosowania aplikacji.
Zmienia się także częściowo zachowanie JobSchedulera, a konkretnie sposób, w jaki działa JobInfo.Builder.setPrefetch()
. Od Androida 13 system ma próbować przewidywać moment ponownego uruchomienia aplikacji, zaś aplikacje powinny być dostosowane do nowych możliwości w taki sposób, aby wskazywać systemowi dane, które mają być załadowane wcześniej, do momentu ponownego uruchomienia aplikacji. Nowy Android zmieni także w przypadku aplikacji wykorzystujących API 33 sposób, w jaki system będzie czerpał informacje o wykorzystaniu baterii. Więcej w dokumentacji.
Zmiany w uprawnieniach
Jak już przyzwyczaiły nas poprzednie premiery kolejnych wersji Androida, zmiany pojawiły się obszarze uprawnień systemowych. To tutaj szczególnie chętnie Google lubi wprowadzać modyfikacje i z jednej strony bardzo dobrze – służy tu systematycznemu utwardzaniu systemu, zmniejszaniu powierzchni ataku. Z drugiej zaś, stanowi sól w oku developerów, którzy często muszą zmieniać to, o jakie uprawnienia proszą ich aplikacje, a niekiedy wymyślać obejścia lub liczyć się z blokadami w Google Play.
Android 13 nie stanowi pod tym względem wyjątku: Przyjrzyjmy się więc bliżej, jakie zmiany w uprawnieniach systemowych wprowadza nowa wersja:
- AD_ID – aplikacje wykorzystujące API 33 muszą odtąd poprosić użytkownika na zgodę na wykorzystanie personalizacji reklam z użyciem usług Google Play. Zmian należy dokonać w manifeście pliku, tak aby użytkownik miał świadomość tego, że reklamy są sprofilowane i targetowane przez identyfikator reklamowy.
- POST_NOTIFICATIONS – nowe uprawnienie w zakresie zarządzania powiadomieniami wysyłanymi przez aplikacje. Ma ono być wykorzystywane przez wszystkie aplikacje, które chcą wyświetlić takie powiadomienie, na które wcześniej nie wydzielono zgody na poziomie środowiska uruchomieniowego.
- BODY_SENSORS_BACKGROUND – uprawnienie pozwalające aplikacjom działającym na Androidzie 13 na dostęp w tle do danych z czujników fizycznych: akcelerometru, żyroskopu, etc.
- READ_EXTERNAL_STORAGE – aplikacje muszą żądać oddzielnych zgód na uzyskiwanie dostępu do konkretnych typów danych.
To oczywiście najważniejsze z nowości, pomniejszych zmian i poprawek bez większego wpływu na pracę developerów jest w Androidzie 13. Trudno więc powiedzieć, abyśmy mieli do czynienia ze zmianami rewolucyjnymi, co jednak nie musi wcale oznaczać, że zmiana target API na 100% przebiegnie bezboleśnie – zainteresowanych odsyłamy do listy różnić pomiędzy API poziomu 32 i 33.