Platforma Android 13 obejmuje zmiany w działaniu, które mogą mieć wpływ na Twoją aplikację. Poniższe zmiany w działaniu mają zastosowanie do wszystkich aplikacji działających na Androidzie 13, niezależnie od wersji targetSdkVersion
. Należy przetestować aplikację, a następnie w razie potrzeby zmodyfikować ją, aby odpowiednio obsługiwała te funkcje.
Przejrzyj też listę zmian w działaniu, które wpływają tylko na aplikacje kierowane na Androida 13.
Wydajność i bateria
Menedżer zadań
Od Androida 13 (poziom interfejsu API 33) użytkownicy mogą w drawerze powiadomień zatrzymać aplikacje, które mają aktywne usługi na pierwszym planie, jak pokazano na rysunku 1. Ta funkcja nosi nazwę Menedżer zadań. Aplikacje muszą być w stanie obsługiwać zainicjowane przez użytkownika zatrzymywanie.
Usprawnianie obsługi zadań wstępnego pobierania za pomocą usługi JobScheduler
JobScheduler umożliwia aplikacjom oznaczanie konkretnych zadań jako zadań „prefetch” (za pomocą JobInfo.Builder.setPrefetch()
), co oznacza, że powinny one być wykonywane w pobliżu lub przed kolejnym uruchomieniem aplikacji, aby zwiększyć wygodę użytkownika.
W przeszłości usługa JobScheduler używała tego sygnału tylko do umożliwienia pobierania z wyprzedzeniem wolnych lub nadmiarowych danych.
W Androidzie 13 (poziom API 33) lub nowszym system próbuje określić, kiedy aplikacja zostanie uruchomiona, i wykorzystuje tę wartość do uruchamiania zadań w ramach funkcji prefetch. Aplikacje powinny używać zadań pobierania z wyprzedzeniem do wszystkich zadań, 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 baterii urządzenia na kilka sposobów:
- Zaktualizowane reguły dotyczące umieszczania przez system aplikacji w zasobie w stanie gotowości aplikacji z ograniczonym dostępem.
- Nowe ograniczenia dotyczące działania aplikacji, gdy użytkownik umieści ją w stanie „ograniczony” pod względem wykorzystania baterii w tle.
Podczas testowania aplikacji z tymi zmianami sprawdź te kwestie:
Sprawdź, jak reaguje aplikacja, gdy system umieszcza ją w „ograniczonym” zasobniku 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 często występują w aplikacjach, które mają stan „ograniczony”, ponieważ wykorzystują baterię w tle:
- Nie udało się uruchomić usług działających na pierwszym planie
- Istniejące usługi na pierwszym planie są usuwane z pierwszego planu.
- Alarmy nie są aktywowane
- 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 FCM (wysoki priorytet) w ramach wiadomości w chmurze Firebase (FCM)
Android 13 (poziom interfejsu API 33) aktualizuje limity Komunikacji w chmurze Firebase (FCM), aby zwiększyć niezawodność dostarczania danych w ramach priorytetu wysokiego w przypadku aplikacji, które wyświetlają powiadomienia w odpowiedzi na dane o wysokiej priorytecie. W Androidzie 13 (poziom API 33) wprowadzono następujące zmiany:
- Zasobniki gotowości aplikacji nie określają już, z ilu FCM o wysokim priorytecie może korzystać aplikacja.
- Limity FCM o wysokim priorytecie zmieniają się proporcjonalnie do liczby powiadomień wyświetlanych użytkownikowi w odpowiedzi na powiadomienia FCM o wysokim priorytecie.
Podobnie jak w poprzednich wersjach Androida, 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 potwierdzenie, że jest on PRIORITY_HIGH
lub że obsługuje potencjalne wyjątki ForegroundServiceStartNotAllowedException
.
Jeśli Twoja aplikacja nie zawsze publikuje powiadomienia w odpowiedzi na FCM o wysokim priorytecie, zalecamy zmianę priorytetu tych FCM na normal, dzięki czemu wiadomości, które powodują wysłanie powiadomienia, nie zostaną obniżone.
Prywatność
Uprawnienia w czasie działania aplikacji dotyczące powiadomień
Android 13 (poziom interfejsu API 33) wprowadza uprawnienia do powiadomień w czasie działania aplikacji: POST_NOTIFICATIONS
.
Ta zmiana pomaga użytkownikom skupić się na powiadomieniach, które są dla nich najważniejsze.
Aby jak najszybciej uzyskać dodatkowe możliwości kontroli i elastyczność tej funkcji, zalecamy jak najszybciej ukierunkowanie reklam na użytkowników korzystających z Androida 13 lub nowszego.
Dowiedz się więcej o sprawdzonych metodach dotyczących uprawnień aplikacji.
Ukrywanie treści poufnych ze schowka
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 ClipboardManager#setPrimaryClip()
musisz dodać flagę do elementu ClipDescription
ClipData. Dodanie tej flagi zapobiega wyświetlaniu treści poufnych w podglądzie treści.
Aby oznaczyć treści o charakterze kontrowersyjnym, dodaj do elementu ClipDescription
dodatkowy element logiczny. 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)
}
}
Aby dowiedzieć się więcej o nowym interfejsie schowka, otwórz stronę funkcji Kopiuj i wklej.
Bezpieczeństwo
Migracja ze wspólnego identyfikatora użytkownika
Jeśli Twoja aplikacja używa przestarzałego atrybutu android:sharedUserId
i nie zależy już od jego funkcji, możesz ustawić wartość atrybutu 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 Twoja aplikacja nie korzysta już ze współdzielonego identyfikatora użytkownika. Jeśli aplikacja deklaruje android:sharedUserMaxSdkVersion
i została niedawno zainstalowana na urządzeniach z Androidem 13 lub nowszym, zachowuje się tak, jakby android:sharedUserId
nigdy nie została zdefiniowana. Zaktualizowane aplikacje nadal będą używać
dotychczasowego udostępnionego identyfikatora użytkownika.
Udostępniane identyfikatory użytkowników powodują niedeterministyczne działanie w menedżerze pakietów. Aplikacja powinna zamiast tego używać odpowiednich mechanizmów komunikacji, takich jak usługi i dostawcy treści, aby ułatwić współdziałanie między współdzielonymi komponentami.
Interfejs użytkownika
Niemożliwe do zamknięcia powiadomienia usługi na pierwszym planie
Na urządzeniach z Androidem 13 lub nowszym użytkownicy mogą domyślnie odrzucać powiadomienia powiązane z usługami działającymi na pierwszym planie.
Główna funkcja
Usunięto starsze rozwiązanie implementacji usługi rozpoznawania mowy
Android 13 usuwa z aplikacji Google implementację SpeechService
, w tym Voice IME, RecognitionService
i interfejs API oparty na intencji.
W Androidzie 12 wprowadzono następujące zmiany:
- Funkcje
SpeechService
zostały przeniesione do aplikacji Usługi głosowe Google, która stała się domyślnym dostawcą usługiSpeechService
. - Funkcja
RecognitionService
została przeniesiona do aplikacji Android System Intelligence, aby umożliwić rozpoznawanie mowy na urządzeniu.
Aby utrzymać zgodność aplikacji na Androidzie 12, aplikacja Google używa trampoliny, aby przekierowywać ruch do aplikacji Usługi mowy w Google. W Androidzie 13 trampolina została usunięta.
Aplikacje powinny korzystać z domyślnego dostawcy urządzenia na potrzeby funkcji SpeechService
, a nie na stałe kodować konkretną aplikację.