Zmiany w działaniu: wszystkie aplikacje

Platforma Android 14 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 14, niezależnie od targetSdkVersion. Należy przetestować aplikację, a następnie zmodyfikować ją w taki sposób, aby w odpowiednich przypadkach zapewniała prawidłowe działanie tych funkcji.

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

Główna funkcja

Planowanie alarmów precyzyjnych jest domyślnie zablokowane

Dokładne alarmy są przeznaczone do powiadomień wysyłanych przez użytkownika lub do działań, które muszą zostać wykonane w określonym czasie. Od wersji Androida 14 uprawnienie SCHEDULE_EXACT_ALARM nie jest już wstępnie przyznawane większości nowo zainstalowanych aplikacji kierowanych na Androida 13 i nowsze wersje – domyślnie są one odrzucane.

Dowiedz się więcej o zmianach w uprawnieniach do planowania alarmów precyzyjnych.

Transmisje zarejestrowane w kontekście są umieszczane w kolejce, gdy aplikacje są przechowywane w pamięci podręcznej.

Na Androidzie 14 system może umieszczanie komunikatów zarejestrowanych kontekstowo w kolejce podczas korzystania przez aplikację z aplikacji jest w pamięci podręcznej. Jest to podobne do kolejkowania transakcji asynchronicznych w binderze, które zostało wprowadzone w Androidzie 12 (poziom API 31). Transmisje zadeklarowane w pliku manifestu nie są umieszczane w kolejce, a aplikacje są usuwane ze stanu pamięci podręcznej na potrzeby przesyłania komunikatów.

Gdy aplikacja opuści stan pamięci podręcznej, np. powrót na pierwszy plan, system dostarcza wszystkie transmisje w kolejce. Wiele wystąpień niektórych transmisji mogą zostać połączone w jedną transmisję. W zależności od innych czynników, takich jak system stanu, aplikacje mogą zostać usunięte ze stanu pamięci podręcznej, a wszystkie aplikacje znajdujące się w kolejce i wysyłanie wiadomości.

Aplikacje mogą zabijać tylko własne procesy w tle

Począwszy od Androida 14, gdy Twoja aplikacja wywołuje killBackgroundProcesses(), interfejs API może zakończyć tylko procesy w tle Twojej aplikacji.

Jeśli podasz nazwę pakietu innej aplikacji, ta metoda nie będzie miała wpływu na procesy w tle tej aplikacji. W Logcat pojawi się wtedy taki komunikat:

Invalid packageName: com.example.anotherapp

Aplikacja nie powinna używać interfejsu API killBackgroundProcesses() ani w inny sposób próbować wpływa na cykl życia innych aplikacji, nawet w starszych wersjach systemów operacyjnych. Android został zaprojektowany tak, aby utrzymywał w tle aplikacje z pamięci podręcznej i zabijał je automatycznie, gdy system potrzebuje pamięci. Jeśli aplikacja wyłącza inne aplikacje może zmniejszyć wydajność systemu i zwiększyć zużycie baterii, wymagając późniejszego pełnego ponownego uruchomienia, co zajmuje znacznie niż wznowienie istniejącej aplikacji w pamięci podręcznej.

MTU jest ustawione na 517 w przypadku pierwszego klienta GATT żądającego MTU

Począwszy od Androida 14 stos Bluetooth na Androidzie jest ściślej zgodny ze wersją 5.2 specyfikacji Bluetooth Core i gdy pierwszy klient GATT wysyła żądanie MTU przy użyciu interfejsu API BluetoothGatt#requestMtu(int), wysyła żądanie BLE ATT MTU do 517 bajtów. Ignoruje wszystkie kolejne żądania MTU dotyczące tego połączenia ACL.

Aby zastosować się do tej zmiany i zwiększyć bezpieczeństwo aplikacji, rozważ te opcje:

  • Urządzenie peryferyjne powinno odpowiadać na żądanie MTU urządzenia z Androidem, podając rozsądną wartość, którą może ono obsłużyć. Ostateczna wynegocjowana wartość będzie minimalną wartością żądanej dla Androida oraz wartością dostarczaną zdalną (np. min(517, remoteMtu)).
    • Wdrożenie tej poprawki może wymagać aktualizacji oprogramowania peryferyjnego
  • Możesz też ograniczyć zapisy parametrów GATT, opierając się na minimalnej wartości między znaną obsługiwaną wartością urządzenia peryferyjnego a otrzymaną zmianą MTU.
    • Należy pamiętać o zmniejszeniu obsługiwanego rozmiaru nagłówków o 5 bajtów
    • Przykład: arrayMaxLength = min(SUPPORTED_MTU, GATT_MAX_ATTR_LEN(517)) - 5

Nowy powód umieszczenia aplikacji w grupie ograniczonego trybu gotowości

W Androidzie 14 wprowadziliśmy nowy powód, dla którego można umieścić aplikację w zasobniku trybu czuwania z ograniczonym dostępem. Zadania aplikacji wielokrotnie powodują błędy ANR z powodu przekroczenia limitu czasu dla metody onStartJob, onStopJob lub onBind. Informacje o zmianach w onStartJob i onStopJob znajdziesz w sekcji JobScheduler wzmacnia wywołania zwrotne i działanie sieci.

Aby sprawdzić, czy aplikacja dołączyła do ograniczonego zasobnika w trybie gotowości, zalecamy logowanie za pomocą interfejsu API UsageStatsManager.getAppStandbyBucket() podczas wykonywania zadania lub UsageStatsManager.queryEventsForSelf() podczas uruchamiania aplikacji.

mlock ograniczony do 64 KB

W Androidzie 14 (poziom interfejsu API 34) i nowszych platforma zmniejsza maksymalną ilość pamięci, którą można zablokować za pomocą mlock(), do 64 KB na proces. We wcześniejszych wersjach limit ten wynosił 64 MB na proces. Takie ograniczenie ułatwia zarządzanie pamięcią w aplikacjach i systemie. Aby zapewnić większą spójność na różnych urządzeniach, Android 14 dodaje nowy test CTS dla nowego limitu mlock() na zgodnych urządzeniach.

System wymusza wykorzystanie zasobów aplikacji z pamięci podręcznej

Z założenia proces aplikacji znajduje się w pamięci podręcznej, gdy zostaje przeniesiony do tła i nie działają żadne inne jego komponenty. Taki proces aplikacji może zostać zatrzymany z powodu obciążenia pamięci systemu. Wszystkie działania Activity wykonywane po wywołaniu i zwróceniu metody onStop() są zawodne i zdecydowanie odradzamy takie działanie.

Android 14 wymaga spójności i egzekwowania zasad. Wkrótce po tym, jak proces aplikacji przejdzie do pamięci podręcznej, praca w tle będzie niedozwolona, dopóki komponent procesu ponownie nie wejdzie w aktywny stan cyklu życia.

Te zmiany nie powinny mieć wpływu na aplikacje korzystające z typowych interfejsów API cyklu życia obsługiwanych przez platformę, takich jak usługi, JobScheduler i Jetpack WorkManager.

Interfejs użytkownika

Zmiany w sposobie wyświetlania użytkownikom powiadomień, których nie można zamknąć

Jeśli Twoja aplikacja wyświetla użytkownikom powiadomienia na pierwszym planie, których nie można zamknąć, Android 14 Zmieniliśmy sposób działania, aby umożliwić użytkownikom odrzucanie takich powiadomień.

Ta zmiana dotyczy aplikacji, które uniemożliwiają użytkownikom odrzucanie powiadomień na pierwszym planie przez ustawienie Notification.FLAG_ONGOING_EVENTNotification.Builder#setOngoing(true) lub NotificationCompat.Builder#setOngoing(true). Działanie funkcji Aplikacja FLAG_ONGOING_EVENT zmieniła ustawienie, aby takie powiadomienia były które użytkownik może odrzucić.

Tego rodzaju powiadomień nadal nie można odrzucić w przypadku: warunki:

  • Gdy telefon jest zablokowany
  • Jeśli użytkownik wybierze działanie powiadomienia Wyczyść wszystko (co ułatwia przypadkowe odrzucenia)

Nowe zachowanie nie dotyczy też powiadomień w tych przypadkach użycia:

  • CallStyle powiadomień
  • Kontroler zasad dotyczących urządzeń (DPC) i obsługujące pakiety dla firm
  • Powiadomienia o multimediach
  • Domyślny pakiet selektora wyszukiwania

Informacje o bezpieczeństwie danych są bardziej widoczne

Aby chronić prywatność użytkowników, Android 14 zwiększa liczbę miejsc, w których system wyświetla informacje zadeklarowane w formularzu w Konsoli Play. Obecnie użytkownicy mogą wyświetlać te informacje w sekcji Bezpieczeństwo danych na stronie aplikacji w Google Play.

Zachęcamy do zapoznania się z zasadami udostępniania danych o lokalizacji w aplikacji i dokonania odpowiednich zmian w sekcji Bezpieczeństwo danych w Google Play.

Z przewodnika dowiesz się, jak zwiększyć widoczność informacji o bezpieczeństwie danych na Androidzie 14.

Ułatwienia dostępu

nieliniowe skalowanie czcionki do 200%,

Począwszy od Androida 14 system obsługuje skalowanie czcionek do 200% i zapewnia użytkownikom niedowidzącym dodatkowe opcje ułatwień dostępu zgodne z wytycznymi dotyczącymi dostępności treści internetowych (WCAG).

Jeśli do określania rozmiaru tekstu używasz już skalowanych jednostek pikseli (sp), ta zmiana prawdopodobnie nie będzie miała dużego wpływu na działanie aplikacji. Zalecamy jednak przeprowadzenie testów interfejsu z włączonym maksymalnym rozmiarem czcionki (200%), aby upewnić się, że aplikacja może obsługiwać większe rozmiary czcionek bez negatywnego wpływu na jej obsługę.

Bezpieczeństwo

Minimalny docelowy poziom interfejsu API, który można zainstalować

Od Androida 14 nie można instalować aplikacji z wersją targetSdkVersion niższą niż 23. aplikacje muszą spełniać wymagania dotyczące minimalnego docelowego poziomu interfejsu API; zwiększają bezpieczeństwo i prywatność użytkowników.

Złośliwe oprogramowanie często atakuje starsze poziomy interfejsu API, aby ominąć zabezpieczenia i prywatność zabezpieczeń wprowadzonych w nowszych wersjach Androida. Przykład: niektóre złośliwe aplikacje używają tych zabezpieczeń: targetSdkVersion z 22, model uprawnień czasu działania wprowadzony w 2015 r. przez Androida 6.0 Marshmallow (API) poziom 23). Ta zmiana w Androidzie 14 utrudnia złośliwemu unikaniu zabezpieczeń i lepszą ochronę prywatności. Próba zainstalowania aplikacji kierowanej na niższy poziom interfejsu API spowoduje niepowodzenie instalacji i wyświetlenie tego komunikatu w Logcat:

INSTALL_FAILED_DEPRECATED_SDK_VERSION: App package must target at least SDK version 23, but found 7

na urządzeniach z Androidem 14 wszystkie aplikacje z wersją targetSdkVersion niższą niż 23.

Jeśli chcesz przetestować aplikację kierowaną na starszy poziom interfejsu API, użyj tego ADB polecenie:

adb install --bypass-low-target-sdk-block FILENAME.apk

Nazwy pakietów właścicieli multimediów mogą zostać usunięte.

The media store supports queries for the OWNER_PACKAGE_NAME column, which indicates the app that stored a particular media file. Starting in Android 14, this value is redacted unless at least one of the following conditions is true:

  • The app that stored the media file has a package name that is always visible to other apps.
  • The app that queries the media store requests the QUERY_ALL_PACKAGES permission.

Learn more about how Android filters package visibility for privacy purposes.