Zmiany w działaniu: wszystkie aplikacje

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ń

Na dole szuflady powiadomień znajduje się przycisk wskazujący liczbę aplikacji, które obecnie działają w tle. Gdy go naciśniesz, pojawi się okno z listą nazw różnych aplikacji. Przycisk Zatrzymaj znajduje się po prawej stronie każdej aplikacji
Rysunek 1. Przepływ pracy dla Menedżera zadań , który umożliwia użytkownikom zatrzymywanie aplikacji działających na pierwszym planie. Ten proces jest widoczny tylko na urządzeniach z Androidem 13 lub nowszym.

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:

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.

Podgląd tekstu został skopiowany bez zgłaszania treści poufnych
Podgląd tekstu został skopiowany bez oznaczania treści poufnych.
Podgląd tekstu został skopiowany i oznacza treści poufne.
Skopiowano podgląd tekstu do oznaczenia treści poufnych.

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ę.