Zmiany w działaniu: wszystkie aplikacje

Platforma Android 13 obejmuje zmiany w działaniu, które mogą mieć wpływ na Twoją aplikację. te zmiany w działaniu mają zastosowanie do wszystkich aplikacji działających na Androidzie 13: bez względu na wartość targetSdkVersion. Przetestuj aplikację, a następnie zmodyfikuj ją jako które są niezbędne do ich prawidłowego wspierania w stosownych przypadkach.

Przejrzyj też listę zmian w działaniu, które wpływają tylko na aplikacje kierowanych na Androida 13.

Wydajność i bateria

Menedżer zadań

U dołu szuflady powiadomień znajduje się przycisk, który wskazuje
  liczba aplikacji działających obecnie w tle. Po naciśnięciu
  pojawi się okno z listą nazw różnych aplikacji. 
  Przycisk zatrzymania znajduje się po prawej stronie każdej aplikacji
Rysunek 1. Przepływ pracy dla Menedżera zadań , który umożliwia zatrzymywanie aplikacji działających na pierwszym planie. Ten przepływ pracy pojawia się tylko na urządzeniach z Androidem 13 lub nowszym.

Począwszy od Androida 13 (poziom interfejsu API 33) użytkownicy mogą wykonywać przepływ pracy z poziomu interfejsu panelu powiadomień, aby zatrzymywać aplikacje działające na pierwszym planie, co pokazuje na ilustracji 1. Afordancja jest znana jako Menedżer zadań. Aplikacje muszą radzić sobie z tym inicjowane przez użytkownika .

Popraw obsługę zadań pobierania z wyprzedzeniem za pomocą JobScheduler

JobScheduler umożliwia aplikacjom oznaczanie konkretnych zadań jako pobierania z wyprzedzeniem zadań (za pomocą JobInfo.Builder.setPrefetch()), co oznacza, że w idealnej sytuacji powinny być uruchamiane tuż przed wprowadzeniem aplikacji i w jej trakcie. Do tej pory usługa JobScheduler używała sygnału tylko do zezwalania na zadania pobierania z wyprzedzeniem na wykorzystanie bezpłatnych lub nadmiarowych danych.

W Androidzie 13 (poziom interfejsu API 33) i nowszych system próbuje określić, kiedy aplikacja zostanie uruchomiona, i używać tego oszacowania do zadań pobierania z wyprzedzeniem. Aplikacje powinny próbować pobierać z wyprzedzeniem zadania z wyprzedzeniem do każdej pracy trzeba wykonać przed udostępnieniem następnej aplikacji.

Wykorzystanie zasobów baterii

Android 13 (poziom interfejsu API 33) zapewnia systemowi poniższe sposoby zarządzanie czasem pracy baterii urządzenia:

Podczas testowania aplikacji po wprowadzeniu tych zmian sprawdź, czy spełnione są te warunki:

  • Sprawdź, jak aplikacja reaguje, gdy system umieszcza ją w grupie „z ograniczonym dostępem” Promująca aplikację Zasobnik gotowości. Użyj to polecenie Android Debug Bridge (ADB), aby przypisać aplikację do tego zasobnika:

    adb shell am set-standby-bucket PACKAGE_NAME restricted
    
  • Sprawdź, jak Twoja aplikacja reaguje na te ograniczenia, które często występują do aplikacji, które są „ograniczone” stan wykorzystanie 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ą wywoływane
    • Zadania nie są wykonywane

    Aby umieścić aplikację w tym „ograniczonym” miejscu, użyj tego polecenia ADB: województwo:

    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 środowisko wykonawcze uprawnienia do wyświetlania powiadomień: POST_NOTIFICATIONS. Ta zmiana pozwoli użytkownikom skupić się na powiadomieniach, które są dla nich najważniejsze .

Zdecydowanie zalecamy jak najszybsze przejście na Androida 13 lub nowszego aby uzyskać efekty dodatkowej kontroli i elastyczności tę funkcję.

Więcej informacji o sprawdzonych metodach dotyczących uprawnień aplikacji.

Ukryj poufne treści w schowku

Jeśli Twoja aplikacja umożliwia użytkownikom kopiowanie treści poufnych, takich jak hasła lub środki danych karty, do schowka musisz dodać flagę do ClipDescription przed nawiązaniem połączenia ClipboardManager#setPrimaryClip(). Dodaję zapobiega wyświetlaniu w podglądzie treści poufnych treści.

Podgląd tekstu został skopiowany bez oznaczenia treści poufnych
Podgląd tekstu został skopiowany bez oznaczenia treści poufnych.
Podgląd tekstu ze zgłoszeniem treści poufnych został skopiowany.
Podgląd tekstu ze zgłoszeniem treści poufnych został skopiowany.

Aby oznaczyć treści poufne, dodaj do ClipDescription element logiczny. Wszystkie w aplikacjach bez względu na docelowy poziom 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 w Kopiuj i wklej.

Bezpieczeństwo

Migracja ze wspólnego identyfikatora użytkownika

Jeśli Twoja aplikacja używa wycofanego Atrybut android:sharedUserId i nie zależy już od jego funkcjonalności, możesz określić android:sharedUserMaxSdkVersion do 32, jak widać 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ępnianej identyfikatora użytkownika. Jeśli Twoja aplikacja deklaruje parametr android:sharedUserMaxSdkVersion i jest nowa na urządzeniach z Androidem 13 lub nowszym, działa tak, jakby element android:sharedUserId nigdy nie został zdefiniowany. Zaktualizowane aplikacje nadal używają istniejącego 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 dostawcami treści, co ułatwia 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ą zamknąć powiadomienia powiązane z pierwszym planem usług przez wartość domyślną.

Główna funkcja

Usunięto wdrożenie starszej wersji usługi kopii mowy

Android 13 usuwa implementację SpeechService, w tym Głosowy edytor IME, RecognitionService oraz oparte na zamiarach API – z w aplikacji Google.

W Androidzie 12 pojawiły się te zmiany:

  • Funkcje (SpeechService) zostały przeniesione do Usług głosowych przez Google , który został domyślnym dostawcą usługi SpeechService.
  • Funkcja aplikacji RecognitionService została przeniesiona do systemu Android Aplikacja Intelligence obsługująca rozpoznawanie mowy na urządzeniu.

Aby zachować zgodność aplikacji z Androidem 12, aplikacja Google używa trampoliny, aby przekierować ruch do aplikacji Usługi głosowe Google. W Android 13. Ta trampolina została usunięta.

Aplikacje powinny używać domyślnego dostawcy urządzenia w przypadku usługi SpeechService, a nie kodowanie na stałe w konkretnej aplikacji.