Zmiany w działaniu: wszystkie aplikacje

Platforma Android 13 zawiera zmiany zachowania, które mogą mieć wpływ na Twoją aplikację. Poniższe zmiany zachowania dotyczą wszystkich aplikacji, które działają na Androidzie 13, niezależnie od targetSdkVersion. Należy przetestować aplikację, a następnie w razie potrzeby zmodyfikować ją, aby odpowiednio obsługiwała te funkcje.

Sprawdź też listę zmian zachowania, które mają wpływ tylko na aplikacje kierowane na Androida 13.

Wydajność i bateria

Menedżer zadań

U dołu panelu powiadomień znajduje się przycisk wskazujący liczbę aplikacji działających obecnie w tle. Po naciśnięciu tego przycisku pojawi się okno z listą nazw różnych aplikacji. przycisk Zatrzymaj po prawej stronie każdej aplikacji;
Rysunek 1. Proces w menedżerze zadań, który umożliwia użytkownikom zatrzymywanie aplikacji, które mają aktywne usługi na pierwszym planie. Ten proces jest dostępny tylko na urządzeniach z Androidem 13 lub nowszym.

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ą obsługiwać tę opcję zainicjowaną przez użytkownika.

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. Dotychczas moduł JobScheduler używał sygnału tylko do umożliwienia zadaniom wstępnego pobierania danych z wykorzystaniem 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 korzystać z zadań wstępnego pobierania w przypadku wszystkich zadań, które mają zostać wykonane przed kolejnym uruchomieniem aplikacji.

Wykorzystanie zasobów baterii

Android 13 (poziom API 33) zapewnia systemowi następujące sposoby na lepsze zarządzanie czasem pracy urządzenia na baterii:

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 są powszechnie stosowane w przypadku aplikacji w stanie „ograniczony” 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ą aktywowane
    • 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 Komunikacji w chmurze Firebase (FCM) o wysokim priorytecie

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, 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 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 wiadomości FCM o wysokim priorytecie, zalecamy zmianę priorytetu tych wiadomości na normalny, aby wiadomości, które powodują wyświetlenie powiadomienia, nie zostały zdegradowane.

Prywatność

Uprawnienia czasu działania powiadomień

W Androidzie 13 (poziom API 33) wprowadzono uprawnienie dotyczące powiadomień: POST_NOTIFICATIONS. Ta zmiana pozwoli użytkownikom skupić się na tych 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.

Ukryj poufne treści w schowku

Jeśli Twoja aplikacja umożliwia użytkownikom kopiowanie na pulpit treści poufnych, takich jak hasła czy informacje o karcie kredytowej, przed wywołaniem metody ClipboardManager#setPrimaryClip() musisz dodać do metody ClipData flagę ClipDescription. Dodanie tego flagi uniemożliwia wyświetlanie treści o charakterze kontrowersyjnym w podglądzie treści.

Podgląd skopiowanego tekstu bez oznaczenia treści poufnych
Podgląd tekstu został skopiowany bez oznaczenia treści poufnych.
Podgląd skopiowanego tekstu z oznaczeniem treści poufnych.
Podgląd skopiowanego tekstu z oznaczeniem treści poufnych.

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)
    }
}

Aby dowiedzieć się więcej o nowym interfejsie schowka, otwórz stronę funkcji Kopiuj i wklej.

Bezpieczeństwo

Migracja z użytkowników z wspólnym identyfikatorem

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ż 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 używają dotychczasowego wspólnego identyfikatora użytkownika.

Udostępnione identyfikatory użytkowników powodują niedeterministyczne działanie menedżera 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

Powiadomienia o usługach działających na pierwszym planie, które można zamknąć

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 RecognitionServiceinterfejs API oparty na intencjach.

W Androidzie 12 wprowadzono następujące zmiany:

  • Funkcje usługi SpeechService zostały przeniesione do aplikacji Usługi głosowe Google, która stała się domyślnym dostawcą usługi SpeechService.
  • Funkcja RecognitionService została przeniesiona do aplikacji Android System Intelligence, aby obsługiwać 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 używać domyślnego dostawcy usługi SpeechService, a nie twardego kodowania konkretnej aplikacji.