Platforma Androida 13 wprowadza zmiany w działaniu, które mogą wpłynąć na Twoją aplikację. Te zmiany w działaniu dotyczą wszystkich aplikacji działających na Androidzie 13, niezależnie od targetSdkVersion
. Przetestuj aplikację, a potem w razie potrzeby zmodyfikuj ją, aby prawidłowo obsługiwała te funkcje.
Zapoznaj się też z listą zmian w działaniu, które wpływają tylko na aplikacje kierowane na Androida 13.
Wydajność i bateria
Menedżer zadań
Począwszy od Androida 13 (poziom interfejsu API 33) użytkownicy mogą za pomocą panelu powiadomień zatrzymywać aplikacje z aktywnymi usługami na pierwszym planie, jak pokazano na ilustracji 1. Jest to tzw. menedżer zadań. Aplikacje muszą być w stanie obsługiwać to zatrzymywanie inicjowane przez użytkownika.
Popraw obsługę zadań pobierania z wyprzedzeniem za pomocą JobScheduler
JobScheduler umożliwia aplikacjom oznaczanie konkretnych zadań jako zadań pobierania z wyprzedzeniem (za pomocą JobInfo.Builder.setPrefetch()
), co oznacza, że powinny one uruchamiać się w pobliżu następnego wydania aplikacji lub wcześniej w celu zwiększenia wygody użytkowników.
W przeszłości JobScheduler korzystał z tego sygnału jedynie do umożliwienia zadaniom pobierania z wyprzedzeniem korzystania z bezpłatnych lub nadmiarowych danych.
W Androidzie 13 (poziom interfejsu API 33) i nowszych system próbuje określić, kiedy zostanie uruchomiona aplikacja, i na podstawie tych szacunków uruchamia zadania pobierania z wyprzedzeniem. Aplikacje powinny korzystać z zadań pobierania z wyprzedzeniem przy wszelkich zadaniach, które mają zostać wykonane przed jej opublikowaniem.
Wykorzystanie zasobów baterii
Android 13 (poziom interfejsu API 33) umożliwia systemowi lepsze zarządzanie czasem pracy na baterii:
- Zaktualizowano reguły określające, kiedy system umieszcza aplikację w zasobniku gotowości aplikacji z ograniczeniami.
- Nowe ograniczenia dotyczące czynności, jakie może wykonywać aplikacja, gdy użytkownik ustawi jej stan „ograniczone” do wykorzystania baterii w tle.
W ramach testowania aplikacji z uwzględnieniem tych zmian sprawdź te kwestie:
Sprawdź, jak aplikacja reaguje, gdy system umieści ją w zasobniku gotowości aplikacji z ograniczeniami. Aby przypisać aplikację do tego zasobnika, użyj tego polecenia Android Debug Bridge (ADB):
adb shell am set-standby-bucket PACKAGE_NAME restricted
Sprawdź, jak Twoja aplikacja reaguje na te ograniczenia, które zwykle obowiązują w przypadku aplikacji objętych ograniczeniami w zakresie wykorzystania baterii w tle:
- Nie udało się uruchomić usług działających na pierwszym planie
- Istniejące usługi na pierwszym planie zostaną usunięte
- Alarmy nie są uruchamiane
- Zadania nie są wykonywane
Aby umieścić aplikację w takim stanie, użyj tego polecenia ADB:
adb shell cmd appops set PACKAGE_NAME RUN_ANY_IN_BACKGROUND ignore
Limity dotyczące wiadomości w chmurze Firebase (FCM) o wysokim priorytecie
Android 13 (poziom interfejsu API 33) aktualizuje limity Komunikacji w chmurze Firebase (FCM), aby zwiększyć niezawodność przesyłania danych przez FCM o wysokim priorytecie w przypadku aplikacji, które wyświetlają powiadomienia w odpowiedzi na żądania FCM o wysokim priorytecie. W Androidzie 13 (poziom API 33) wprowadzono te zmiany:
- Zasobniki gotowości aplikacji nie określają już, z ilu usług FCM o wysokim priorytecie może korzystać aplikacja.
- Limity FCM o wysokim priorytecie skalują się proporcjonalnie do liczby powiadomień wyświetlanych użytkownikowi w odpowiedzi na usługi FCM o wysokim priorytecie.
Podobnie jak w poprzednich wersjach Androida usługi FCM o wysokim priorytecie, które przekraczają limit, mają standardowy priorytet. Jeśli w odpowiedzi na żądanie FCM uruchamiasz usługi na pierwszym planie, zalecamy sprawdzenie wyniku RemoteMessage.getPriority()
i potwierdzenie, że jest to PRIORITY_HIGH
lub obsługuje ewentualne wyjątki ForegroundServiceStartNotAllowedException
.
Jeśli Twoja aplikacja nie zawsze wysyła powiadomienia w odpowiedzi na powiadomienia o wysokim priorytecie, zalecamy zmianę priorytetu tych funkcji na normalny, aby wiadomości, których dotyczy powiadomienie, nie zostały obniżone.
prywatność
Uprawnienia czasu działania powiadomień
Android 13 (poziom interfejsu API 33) wprowadza uprawnienia dotyczące powiadomień w czasie działania: POST_NOTIFICATIONS
.
Dzięki tej zmianie użytkownicy mogą skupić się na najważniejszych powiadomieniach.
Zdecydowanie zalecamy jak najszybsze kierowanie aplikacji na Androida 13 lub nowszego. Pozwoli to uzyskać dodatkową kontrolę i elastyczność tej funkcji.
Dowiedz się więcej o sprawdzonych metodach dotyczących uprawnień aplikacji.
Ukryj poufne treści w schowku
Jeśli Twoja aplikacja umożliwia użytkownikom kopiowanie do schowka poufnych treści, takich jak hasła czy dane kart kredytowych, przed wywołaniem metody ClipboardManager#setPrimaryClip()
musisz dodać do klasy ClipData flagę ClipDescription
. Dodanie tego oznaczenia zapobiega wyświetlaniu w podglądzie treści poufnych treści.
Aby oznaczyć treści poufne, dodaj do ClipDescription
dodatkową wartość logiczną. Powinny to robić wszystkie aplikacje, niezależnie od docelowego poziomu interfejsu API.
// When your app is compiled with the API level 33 SDK or higher
clipData.apply {
description.extras = PersistableBundle().apply {
putBoolean(ClipDescription.EXTRA_IS_SENSITIVE, true)
}
}
// If your app is compiled with a lower SDK
clipData.apply {
description.extras = PersistableBundle().apply {
putBoolean("android.content.extra.IS_SENSITIVE", true)
}
}
Więcej informacji o nowym interfejsie schowka znajdziesz na stronie funkcji kopiowania i wklejania.
Zabezpieczenia
Migracja z udostępnianego identyfikatora użytkownika
Jeśli Twoja aplikacja korzysta z wycofanego atrybutu android:sharedUserId
i nie jest już zależna od jego funkcji, możesz ustawić wartość 32
atrybutu android:sharedUserMaxSdkVersion
, jak pokazano w tym fragmencie kodu:
<manifest ...> <!-- To maintain backward compatibility, continue to use "android:sharedUserId" if you already added it to your manifest. --> android:sharedUserId="SHARED_PACKAGE_NAME" android:sharedUserMaxSdkVersion="32" ... </manifest>
Ten atrybut informuje system, że aplikacja nie korzysta już ze współdzielonego identyfikatora użytkownika. Jeśli aplikacja ma certyfikat android:sharedUserMaxSdkVersion
i została niedawno zainstalowana na urządzeniach z Androidem 13 lub nowszym, będzie działać tak, jakby android:sharedUserId
nie została nigdy zdefiniowana. Zaktualizowane aplikacje nadal używają
udostępnionego identyfikatora użytkownika.
Udostępniane identyfikatory użytkowników powodują niedeterministyczne działanie menedżera pakietów. Aplikacja powinna korzystać z odpowiednich mechanizmów komunikacji, np. usług i dostawców treści, aby współdziałać ze współdzielonymi komponentami.
Z perspektywy użytkownika
Zamykane powiadomienia dotyczące usługi na pierwszym planie
Na urządzeniach z Androidem 13 lub nowszym użytkownicy mogą domyślnie odrzucać powiadomienia związane z usługami na pierwszym planie.
Główna funkcja
Usunięto starszą kopię implementacji usługi rozpoznawania mowy
Android 13 usuwa z aplikacji Google implementację SpeechService
, w tym Voice IME, RecognitionService
i interfejs API oparty na zamiarze.
W Androidzie 12 wystąpiły te zmiany:
- Funkcje usługi
SpeechService
zostały przeniesione do aplikacji Usługi głosowe Google, która stała się domyślnym dostawcąSpeechService
. - Funkcja
RecognitionService
została przeniesiona do aplikacji Android System Intelligence, która obsługuje rozpoznawanie mowy na urządzeniu.
Aby zachować zgodność aplikacji na Androidzie 12, aplikacja Google używa trampoliny, aby przekierować ruch do aplikacji Usługi głosowe Google. W Androidzie 13 ta trampolina jest usuwana.
W przypadku SpeechService
aplikacje powinny korzystać z domyślnego dostawcy urządzenia, a nie wpisywać na stałe konkretną aplikację.