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
. Przetestuj aplikację, a w razie potrzeby zmodyfikuj ją, aby obsługiwała te zmiany.
Przejrzyj też 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ą wykonać przepływ pracy z panelu powiadomień, aby zatrzymywać aplikacje działające na pierwszym planie, jak pokazano na ilustracji 1. Afordancja jest nazywana menedżerem zadań. Aplikacje muszą być w stanie obsługiwać zainicjowane przez użytkownika zatrzymywanie.
Popraw obsługę zadań pobierania z wyprzedzeniem za pomocą JobScheduler
JobScheduler umożliwia aplikacjom oznaczanie konkretnych zadań jako ���pobierania z wyprzedzeniem” (za pomocą JobInfo.Builder.setPrefetch()
). Oznacza to, że najlepiej, by uruchamiały się tuż przed następnym uruchomieniem aplikacji lub przed nią, aby zwiększyć wygodę użytkowników.
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 interfejsu API 33) i nowszych system próbuje określić kolejny termin uruchomienia aplikacji i używa tego oszacowania do uruchamiania zadań pobierania z wyprzedzeniem. 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:
- Zaktualizowaliśmy reguły określające, kiedy system umieszcza aplikację w „ograniczonym” zasobniku gotowości aplikacji.
- Nowe ograniczenia dotyczące czynności, które Twoja aplikacja może wykonywać, gdy użytkownik ustawia ją w stanie „ograniczonym” z powodu wykorzystania baterii w tle.
Testując aplikację po wprowadzeniu tych zmian, sprawdź:
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 zostaną usunięte
- Alarmy nie są wywoływane
- Zadania nie są wykonywane
Aby ustawić aplikację w stanie „ograniczonym” (np. za pomocą 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), by zwiększyć niezawodność przesyłania przez FCM o wysokim priorytecie w przypadku aplikacji, które wyświetlają powiadomienia w odpowiedzi na FCM o wysokim priorytecie. W Androidzie 13 (poziom interfejsu API 33) wprowadziliśmy te zmiany:
- Zasobniki gotowości aplikacji nie określają już, z ilu FCM o wysokim priorytecie może korzystać aplikacja.
- Limity w FCM o wysokim priorytecie są skalowane proporcjonalnie do liczby powiadomień wyświetlanych użytkownikowi w odpowiedzi na FCM o wysokim priorytecie.
Podobnie jak w poprzednich wersjach Androida, FCM o wysokim priorytecie, które przekraczają limit, są obniżane do normalnego priorytetu. Gdy uruchamiasz usługi na pierwszym planie w odpowiedzi na FCM, zalecamy sprawdzenie wyniku RemoteMessage.getPriority()
i upewnienie się, że jest to PRIORITY_HIGH
lub obsługuje wszelkie potencjalne wyjątki ForegroundServiceStartNotAllowedException
.
Jeśli Twoja aplikacja nie zawsze publikuje powiadomienia w odpowiedzi na FCM o wysokim priorytecie, zalecamy zmianę ich priorytetu na normal, dzięki czemu wiadomości, które powodują wysłanie powiadomienia, nie zostaną obniżone.
Prywatność
Uprawnienia czasu działania powiadomień
Android 13 (poziom interfejsu API 33) wprowadza uprawnienia do powiadomień w czasie działania aplikacji: POST_NOTIFICATIONS
.
Ta zmiana pozwoli użytkownikom skupić się na tych powiadomieniach, które są dla nich najważniejsze.
Zdecydowanie zalecamy jak najszybsze przejście na Androida 13 lub nowszego, aby zyskać dodatkowe możliwości kontroli i elastyczności 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 karty kredytowej, 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 poufne, dodaj do ClipDescription
element logiczny. Należy tak 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 Kopiuj i wklej.
Zabezpieczenia
Migracja ze wspólnego 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 Twoja aplikacja nie korzysta już z udostępnianego identyfikatora użytkownika. Jeśli Twoja aplikacja deklaruje parametr android:sharedUserMaxSdkVersion
i została niedawno zainstalowana na urządzeniach z Androidem 13 lub nowszym, działa tak, jakby nigdy nie została zdefiniowana android:sharedUserId
. 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ć interoperacyjność udostępnianych komponentów.
Z perspektywy 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 zamykać powiadomienia związane z usługami na pierwszym planie.
Główna funkcja
Usunięto wdrożenie starszej wersji usługi kopii mowy
Android 13 usuwa z aplikacji Google implementację SpeechService
, w tym Voice IME, RecognitionService
i interfejs API oparty na intencji.
W Androidzie 12 pojawiły się te zmiany:
- Funkcje usługi
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 obsługiwać rozpoznawanie mowy na urządzeniu.
Aby zachować zgodność aplikacji z Androidem 12, aplikacja Google używa trampoliny, by przekierować ruch do aplikacji Usługi głosowe Google. Na Androidzie 13 ta trampolina jest usuwana.
Aplikacje powinny korzystać z domyślnego dostawcy urządzenia na potrzeby funkcji SpeechService
, a nie na stałe kodować konkretną aplikację.