Platforma Android 13 zawiera zmiany w działaniu, które mogą mieć wpływ na Twoją aplikację. Poniższe zmiany w działaniu dotyczą wszystkich aplikacji działających na Androidzie 13, niezależnie od targetSdkVersion
. W razie potrzeby przetestuj aplikację, a następnie zmodyfikuj ją, aby prawidłowo obsługiwała te funkcje.
Zapoznaj się też z listą zmian w zachowaniu, które mają wpływ tylko na aplikacje kierowane na Androida 13.
Wydajność i bateria
Menedżer zadań
Od Androida 13 (API na poziomie 33) użytkownicy mogą wykonać przepływ pracy z poziomu panelu powiadomień, aby zatrzymać aplikacje, które mają działające usługi na pierwszym planie, jak pokazano na ilustracji 1. Ta funkcja jest nazywana Menedżerem zadań. Aplikacje muszą obsługiwać zatrzymywanie inicjowane przez użytkownika.
Ulepsz obsługę zadań wstępnego pobierania za pomocą JobScheduler
JobScheduler umożliwia aplikacjom oznaczanie konkretnych zadań jako zadań „wstępnego pobierania” (za pomocą JobInfo.Builder.setPrefetch()
), co oznacza, że powinny one być wykonywane jak najbliżej następnego uruchomienia aplikacji i przed nim, aby zwiększyć wygodę użytkownika.
W przeszłości JobScheduler używał tego sygnału tylko po to, aby zadania wstępnego pobierania mogły oportunistycznie korzystać z wolnych lub nadmiarowych danych.
W Androidzie 13 (API na poziomie 33) i nowszych system próbuje określić, kiedy aplikacja zostanie uruchomiona następnym razem, i wykorzystuje to oszacowanie do uruchamiania zadań wstępnego pobierania. Aplikacje powinny używać zadań wstępnego pobierania w przypadku wszystkich działań, które mają być wykonane przed następnym uruchomieniem aplikacji.
Wykorzystanie baterii
Android 13 (API na poziomie 33) zapewnia te sposoby na lepsze zarządzanie żywotnością baterii urządzenia:
- Zaktualizowane reguły dotyczące tego, kiedy system umieszcza aplikację w „ograniczonym” zasobniku stanu gotowości aplikacji.
- Nowe ograniczenia dotyczące działań, które aplikacja może wykonywać, gdy użytkownik ustawi ją w stanie „ograniczonym” w zakresie wykorzystania baterii w tle.
Podczas testowania aplikacji z tymi zmianami sprawdź, czy:
Sprawdź, jak aplikacja reaguje, gdy system umieści ją w „ograniczonym” zasobniku stanu gotowości aplikacji. 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 dotyczą aplikacji w stanie „ograniczonym” w zakresie wykorzystania baterii w tle:
- Nie można uruchomić usług działających na pierwszym planie
- Istniejące usługi działające na pierwszym planie są usuwane z pierwszego planu.
- Alarmy nie są włączane
- Zadania nie są wykonywane
Aby umieścić aplikację w stanie „ograniczonym”, użyj tego polecenia ADB:
adb shell cmd appops set PACKAGE_NAME RUN_ANY_IN_BACKGROUND ignore
Limity wiadomości FCM o wysokim priorytecie
Android 13 (poziom 33 interfejsu API) aktualizuje limity Komunikacji w chmurze Firebase (FCM), aby zwiększyć niezawodność dostarczania powiadomień FCM o wysokim priorytecie w przypadku aplikacji, które wyświetlają powiadomienia w odpowiedzi na powiadomienia FCM o wysokim priorytecie. W Androidzie 13 (poziom API 33) wprowadzono te zmiany:
- Zasobniki gotowości aplikacji nie określają już, ile powiadomień FCM o wysokim priorytecie może używać aplikacja.
- System obniża teraz priorytet wiadomości o wysokim priorytecie, jeśli wykryje aplikację, która stale wysyła takie wiadomości, ale nie powodują one wyświetlania powiadomień.
Podobnie jak w poprzednich wersjach Androida, wiadomości FCM o wysokim priorytecie, które przekraczają limit, są obniżane do normalnego priorytetu. Podczas uruchamiania usług na pierwszym planie (FGS) w odpowiedzi na FCM zalecamy sprawdzenie wyniku RemoteMessage.getPriority()
i upewnienie się, że jest to PRIORITY_HIGH
, lub obsługę potencjalnych wyjątków ForegroundServiceStartNotAllowedException
.
Jeśli Twoja aplikacja nie zawsze publikuje powiadomienia w odpowiedzi na wiadomości FCM o wysokim priorytecie, zalecamy zmianę priorytetu tych wiadomości na normalny, aby wiadomości powodujące wyświetlanie powiadomień nie były obniżane.
Prywatność
Uprawnienia w czasie działania aplikacji dotyczące powiadomień
W Androidzie 13 (poziom 33 interfejsu API) wprowadzono uprawnienia do powiadomień w czasie działania:POST_NOTIFICATIONS
Ta zmiana pomoże użytkownikom skupić się na powiadomieniach, które są dla nich najważniejsze.
Zdecydowanie zalecamy jak najszybsze kierowanie reklam na Androida 13 lub nowszego, aby uzyskać dodatkową kontrolę i elastyczność, jakie daje ta funkcja.
Dowiedz się więcej o sprawdzonych metodach dotyczących uprawnień aplikacji.
Ukrywanie poufnych treści w schowku
Jeśli Twoja aplikacja umożliwia użytkownikom kopiowanie do schowka treści o charakterze poufnym, takich jak hasła lub informacje o karcie kredytowej, przed wywołaniem funkcji ClipboardManager#setPrimaryClip()
musisz dodać flagę do obiektu ClipData ClipDescription
. Dodanie tego znacznika uniemożliwia wyświetlanie treści o charakterze kontrowersyjnym w podglądzie treści.


Aby oznaczyć treści o charakterze kontrowersyjnym, dodaj do parametru ClipDescription
dodatkową wartość logiczną. Wszystkie aplikacje powinny to robić 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 Kopiowanie i wklejanie.
Bezpieczeństwo
Migracja z udostępnianego identyfikatora użytkownika
Jeśli Twoja aplikacja używa wycofanego atrybutu
android:sharedUserId
i nie zależy już od jego funkcji, możesz ustawić atrybut
android:sharedUserMaxSdkVersion
na 32
, 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 deklaruje android:sharedUserMaxSdkVersion
i jest nowo zainstalowana na urządzeniach z Androidem 13 lub nowszym, zachowuje się tak, jakby android:sharedUserId
nigdy nie zostało zdefiniowane. Zaktualizowane aplikacje nadal używają dotychczasowego wspólnego identyfikatora użytkownika.
Współdzielone identyfikatory użytkowników powodują niedeterministyczne działanie w menedżerze pakietów. Aplikacja powinna zamiast tego korzystać z odpowiednich mechanizmów komunikacji, takich jak usługi i dostawcy treści, aby ułatwiać współdziałanie między udostępnionymi komponentami.
Interfejs użytkownika
Powiadomienia o usługach działających na pierwszym planie, które można odrzucić
Na urządzeniach z Androidem 13 lub nowszym użytkownicy mogą domyślnie odrzucać powiadomienia związane z usługami działającymi na pierwszym planie.
Główna funkcja
Usunięto starszą kopię implementacji usługi mowy
Android 13 usuwa z aplikacji Google implementację SpeechService
, w tym klawiaturę głosową, RecognitionService
i interfejs API oparty na intencjach.
W Androidzie 12 wprowadziliśmy te zmiany:
- Funkcje
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, aby obsługiwać rozpoznawanie mowy na urządzeniu.
Aby zachować zgodność aplikacji na Androidzie 12, aplikacja Google używa trampoliny do przekierowywania ruchu do aplikacji Usługi mowy Google. Na Androidzie 13 ta trampolina została usunięta.
Aplikacje powinny używać domyślnego dostawcy na urządzeniu w przypadku SpeechService
, zamiast na stałe kodować konkretną aplikację.