Zmiany dotyczące platformy zgodności (Android 12)

Rysunek 1. Na ekranie Zmiany dotyczące zgodności aplikacji w opcjach programisty znajdziesz listę zmian, które możesz przełączać.

Na tej stronie opisujemy każdą zmianę zachowania, która jest częścią systemu sprawdzania zgodności w Androidzie 12 (poziom API 31). Używaj tej listy w połączeniu z opcjami programisty i poleceniami ADB, aby testować i debugować aplikację podczas przygotowywania jej do obsługi Androida 12 i kierowania na tę wersję.

Oto kilka rzeczy, które możesz zrobić za pomocą narzędzi systemu sprawdzania zgodności:

  • Testuj zmiany ukierunkowane bez faktycznej zmiany wartości targetSdkVersion aplikacji. Możesz użyć przełączników, aby wymusić włączenie określonych zmian zachowania, i ocenić ich wpływ na dotychczasową aplikację.
  • Skup się na testowaniu tylko konkretnych zmian. Zamiast wprowadzać wszystkie zmiany kierowania naraz, możesz za pomocą przełączników wyłączyć wszystkie zmiany kierowania oprócz tych, które chcesz przetestować.
  • Zarządzanie przełącznikami za pomocą adb Możesz używać poleceń adb, aby włączać i wyłączać zmiany w środowisku testów automatycznych.
  • Szybsze debugowanie dzięki standardowym identyfikatorom zmian Każda zmiana, którą można przełączać, ma unikalny identyfikator i nazwę, dzięki którym można szybko debugować główną przyczynę w danych wyjściowych logu.

Szczegółowe informacje o korzystaniu z narzędzi w każdym z tych przypadków znajdziesz w artykule o narzędziach systemu sprawdzania zgodności.

Zmiany zachowania uwzględnione w systemie sprawdzania zgodności

Lista w tej sekcji opisuje każdą zmianę zachowania uwzględnioną w systemie sprawdzania zgodności w Androidzie 12.

Listę zmian możesz filtrować według stanu domyślnego.

Zmiany w zachowaniu dodane do systemu sprawdzania zgodności w Androidzie 12

ALWAYS_SANDBOX_DISPLAY_APIS

Identyfikator zmiany: 185004937
Stan domyślny: wyłączone we wszystkich aplikacjach.

Po włączeniu stosuje piaskownicę interfejsu Display API do pakietu niezależnie od trybu okna. Interfejsy API wyświetlacza zawsze będą podawać granice aplikacji.

Więcej informacji o tej zmianie znajdziesz w sekcji Wycofane metody wyświetlania na stronie poświęconej zmianom zachowania w Androidzie 12.

AUTOFILL_NON_TEXT_REQUIRES_ON_RECEIVE_CONTENT_LISTENER

Identyfikator zmiany: 163400105
Stan domyślny: włączone w aplikacjach kierowanych na Androida 12 (API na poziomie 32) lub nowszego.

Od Androida 12 platforma może wyświetlać sugestie nietekstowe (np. obrazy) przy użyciu platformy rozszerzonego autouzupełniania (patrz usługi autouzupełniania). Aby aplikacja mogła obsługiwać te sugestie, musi zwykle implementować interfejs API OnReceiveContentListener.

Aby ułatwić wdrożenie tego interfejsu API w aplikacjach, które wcześniej korzystały z interfejsu API InputConnection.commitContent(InputContentInfo, int, Bundle), używamy go jako rozwiązania zastępczego, jeśli aplikacja nie ma jeszcze wdrożonego interfejsu OnReceiveContentListener. To rozwiązanie zastępcze jest włączone tylko na Androidzie 12 (poziom API 31). Ten identyfikator zmiany wyłącza zastępowanie, więc aplikacje kierowane na Androida 12 (poziom API 32) i nowsze wersje muszą implementować interfejs API OnReceiveContentListener, aby akceptować sugestie nietekstowe.

BLOCK_FLAG_SLIPPERY

Identyfikator zmiany: 157929241
Stan domyślny: włączone we wszystkich aplikacjach.

W przypadku aplikacji działających na Androidzie 12 (poziom interfejsu API 31) sprawdza, czy flaga FLAG_SLIPPERY jest używana w jakichkolwiek oknach w aplikacji. Oczekujemy, że ta flaga będzie używana tylko przez komponenty systemowe, ponieważ jest to nieobsługiwane pole. Jeśli tak, będzie podlegać ograniczeniom.

BLOCK_GPS_STATUS_USAGE

Identyfikator zmiany: 144027538
Stan domyślny: włączone w przypadku aplikacji kierowanych na Androida 12 (poziom API 31) lub nowszego.

W przypadku aplikacji kierowanych na Androida 12 (poziom API 31) i nowsze wersje wszystkie przypadki użycia interfejsu API GpsStatus muszą zostać zastąpione interfejsami API GnssStatus.

BLOCK_IMMUTABLE_PENDING_INTENTS

Identyfikator zmiany: 171317480
Stan domyślny: włączone w aplikacjach kierowanych na Androida 12 (API na poziomie 31) lub nowszego.

W przypadku aplikacji kierowanych na Androida 12 (poziom API 31) lub nowszego niezmienne obiekty PendingIntent przekazywane do interfejsów API lokalizacji będą generować błąd IllegalArgumentException..

BLOCK_PENDING_INTENT_SYSTEM_API_USAGE

Identyfikator zmiany: 169887240
Stan domyślny: włączone w aplikacjach kierowanych na Androida 12 (poziom API 31) lub nowszego.

W przypadku aplikacji kierowanych na Androida 12 (poziom API 31) i nowsze wersje interfejsów API systemu LocationRequest nie można używać z żądaniami lokalizacji PendingIntent.

BLOCK_UNTRUSTED_TOUCHES

Identyfikator zmiany: 158002302
Stan domyślny: włączone we wszystkich aplikacjach.

Aby zachować bezpieczeństwo systemu i zapewnić użytkownikom wygodę, Android 12 uniemożliwia aplikacjom wykorzystywanie zdarzeń dotknięcia, gdy nakładka blokuje aplikację w niebezpieczny sposób.

Więcej informacji o tej zmianie znajdziesz w artykule Zaufane zdarzenia dotknięcia są blokowane.

CALL_ACTIVITY_RESULT_BEFORE_RESUME

Identyfikator zmiany: 78294732
Stan domyślny: włączone w aplikacjach kierowanych na Androida 12 (API na poziomie 32) lub nowszego.

W przypadku aplikacji kierowanych na Androida 12 (poziom API 32) i nowsze wersje poprawia cykl życia wyniku aktywności, aby zagwarantować, że aktywność otrzyma wynik tuż przed wznowieniem.

CAMERA_MIC_INDICATORS_NOT_PRESENT

Identyfikator zmiany: 162547999
Stan domyślny: wyłączone we wszystkich aplikacjach.

Wskazuje, że to urządzenie obsługuje wskaźniki kamery i mikrofonu. Jeśli jest obecny, będzie to false, ponieważ metoda CompatChanges#isChangeEnabled zwraca true, jeśli identyfikator zmiany nie jest obecny.

CANNOT_INSTALL_WITH_BAD_PERMISSION_GROUPS

Identyfikator zmiany: 146211400
Stan domyślny: włączona w przypadku aplikacji kierowanych na Androida 12 (API na poziomie 32) lub nowszego.

W przypadku aplikacji kierowanych na Androida 12 (API na poziomie 32) lub nowszego menedżer pakietów nie zainstaluje pakietu, jeśli zawiera on nieprawidłowo sformułowane grupy uprawnień. Grupy uprawnień powinny być udostępniane tylko między aplikacjami, które mają ten sam certyfikat. Jeśli uprawnienie należy do grupy, ta grupa również musi być zdefiniowana.

CHANGE_ID_AUTH_STATE_DENIED

Identyfikator zmiany: 181350407
Stan domyślny: włączone w przypadku aplikacji kierowanych na Androida 12 (poziom API 31) lub nowszego.

W przypadku aplikacji klienckich kierowanych na Androida 12 (poziom interfejsu API 31) lub nowszego, gdy są one w stanie odmowy autoryzacji i próbują wysłać wiadomość do nanoaplikacji, zgłaszany jest błąd SecurityException.

CHANGE_ID_SAMPLING_RATE_SENSORS_PERMISSION

Identyfikator zmiany: 136069189
Stan domyślny: włączone w aplikacjach kierowanych na Androida 12 (API na poziomie 31) lub nowszego.

W przypadku aplikacji kierowanych na Androida 12 (API na poziomie 31) lub nowszego, które nie mają uprawnienia HIGH_SAMPLING_RATE_SENSORS, działają w trybie debugowania i żądają częstotliwości próbkowania wyższej niż 200 Hz, jest zgłaszany błąd SecurityException.

DELIVER_HISTORICAL_LOCATIONS

Identyfikator zmiany: 73144566
Stan domyślny: włączone w przypadku aplikacji kierowanych na Androida 12 (poziom API 31) lub nowszego.

W przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) i nowsze wersje klienci lokalizacji mogą w niektórych okolicznościach otrzymywać lokalizacje historyczne (sprzed bieżącego momentu).

DISPLAY_INFO_NR_ADVANCED_SUPPORTED

Identyfikator zmiany: 181658987
Stan domyślny: włączone w aplikacjach kierowanych na Androida 12 (poziom API 31) lub nowszego.

W przypadku aplikacji kierowanych na Androida 12 (poziom API 31) i nowsze wersje zapewnia zgodność wsteczną ze zmianami w TelephonyDisplayInfo.

DISPLAY_MODE_RETURNS_PHYSICAL_REFRESH_RATE

Identyfikator zmiany: 170503758
Stan domyślny: włączone w aplikacjach kierowanych na Androida 12 (API na poziomie 31) lub nowszego.

W przypadku aplikacji kierowanych na Androida 12 (poziom API 31) i nowsze wersje platforma może ograniczyć liczbę klatek aplikacji do dzielnika częstotliwości odświeżania, jeśli jest to bardziej preferowane (np. jeśli aplikacja wywołała Surface.setFrameRate(float, int)). Aplikacje będą otrzymywać wywołania zwrotne Choreographer.postFrameCallback(Choreographer.FrameCallback) i będą podlegać ograniczeniom przy ograniczonej liczbie klatek. Aplikacje używają Display.getRefreshRate() i Display.Mode.getRefreshRate(), aby określić częstotliwość odświeżania wyświetlacza. Display.getRefreshRate() zawsze zwraca liczbę klatek aplikacji, a nie fizyczną częstotliwość odświeżania wyświetlacza, aby umożliwić aplikacjom prawidłowe dopasowanie liczby klatek. Display.Mode.getRefreshRate() zwróci liczbę klatek aplikacji, jeśli została skompilowana do poprzedniej wersji, a począwszy od Androida 12 (API na poziomie 31), zwróci częstotliwość odświeżania wyświetlacza fizycznego.

DOWNSCALED

Identyfikator zmiany: 168419799
Stan domyślny: wyłączone we wszystkich aplikacjach.

Ta zmiana jest kluczowa dla wszystkich zmian związanych ze zmniejszaniem bufora na aplikację. Włączenie tej zmiany umożliwia zastosowanie tych współczynników skalowania:

Gdy ta zmiana jest włączona w przypadku pakietu aplikacji, rozmiar aplikacji jest wymuszany do najwyższego włączonego współczynnika skalowania. Jeśli na przykład włączone są zarówno 80%, jak i 70% (DOWNSCALE_80 i DOWNSCALE_70), używana jest wartość 80%.

DOWNSCALE_30

Identyfikator zmiany: 189970040
Stan domyślny: wyłączone we wszystkich aplikacjach.

Gdy włączona jest też opcja DOWNSCALED, włączenie tej zmiany w pakiecie wymusza na aplikacji założenie, że działa na wyświetlaczu o rozdzielczości pionowej i poziomej równej 30% rzeczywistej rozdzielczości wyświetlacza.

DOWNSCALE_35

Identyfikator zmiany: 189969749
Stan domyślny: wyłączone we wszystkich aplikacjach.

Jeśli włączona jest też opcja DOWNSCALED, włączenie tej zmiany w pakiecie wymusza na aplikacji założenie, że działa na wyświetlaczu o rozdzielczości pionowej i poziomej równej 35% rozdzielczości rzeczywistego wyświetlacza.

DOWNSCALE_40

Identyfikator zmiany: 189970038
Stan domyślny: wyłączone we wszystkich aplikacjach.

Gdy włączona jest też opcja DOWNSCALED, włączenie tej zmiany w pakiecie wymusza na aplikacji założenie, że działa na wyświetlaczu o rozdzielczości pionowej i poziomej równej 40% rzeczywistej rozdzielczości wyświetlacza.

DOWNSCALE_45

Identyfikator zmiany: 189969782
Stan domyślny: wyłączone we wszystkich aplikacjach.

Gdy włączona jest też opcja DOWNSCALED, włączenie tej zmiany w przypadku pakietu wymusza na aplikacji założenie, że działa na wyświetlaczu o rozdzielczości pionowej i poziomej równej 45% rozdzielczości rzeczywistego wyświetlacza.

DOWNSCALE_50

Identyfikator zmiany: 176926741
Stan domyślny: wyłączone we wszystkich aplikacjach.

Jeśli włączona jest też opcja DOWNSCALED, włączenie tej zmiany w pakiecie wymusza na aplikacji założenie, że działa na wyświetlaczu o rozdzielczości pionowej i poziomej równej 50% rzeczywistej rozdzielczości wyświetlacza.

DOWNSCALE_55

Identyfikator zmiany: 189970036
Stan domyślny: wyłączone we wszystkich aplikacjach.

Gdy włączona jest też opcja DOWNSCALED, włączenie tej zmiany w przypadku pakietu wymusza na aplikacji założenie, że działa na wyświetlaczu o rozdzielczości pionowej i poziomej równej 55% rzeczywistej rozdzielczości wyświetlacza.

DOWNSCALE_60

Identyfikator zmiany: 176926771
Stan domyślny: wyłączone we wszystkich aplikacjach.

Jeśli włączona jest też opcja DOWNSCALED, włączenie tej zmiany w pakiecie wymusza na aplikacji założenie, że działa na wyświetlaczu o rozdzielczości pionowej i poziomej równej 60% rzeczywistej rozdzielczości wyświetlacza.

DOWNSCALE_65

Identyfikator zmiany: 189969744
Stan domyślny: wyłączone we wszystkich aplikacjach.

Jeśli włączona jest też opcja DOWNSCALED, włączenie tej zmiany w pakiecie wymusza na aplikacji założenie, że działa na wyświetlaczu o rozdzielczości pionowej i poziomej równej 65% rozdzielczości rzeczywistego wyświetlacza.

DOWNSCALE_70

Identyfikator zmiany: 176926829
Stan domyślny: wyłączone we wszystkich aplikacjach.

Gdy włączona jest też opcja DOWNSCALED, włączenie tej zmiany w pakiecie wymusza na aplikacji założenie, że działa na wyświetlaczu o rozdzielczości pionowej i poziomej równej 70% rzeczywistego wyświetlacza.

DOWNSCALE_75

Identyfikator zmiany: 189969779
Stan domyślny: wyłączone we wszystkich aplikacjach.

Jeśli włączona jest też opcja DOWNSCALED, włączenie tej zmiany w pakiecie wymusza na aplikacji założenie, że działa na wyświetlaczu o rozdzielczości pionowej i poziomej równej 75% rzeczywistej rozdzielczości wyświetlacza.

DOWNSCALE_80

Identyfikator zmiany: 176926753
Stan domyślny: wyłączone we wszystkich aplikacjach.

Gdy włączona jest też opcja DOWNSCALED, włączenie tej zmiany w pakiecie wymusza na aplikacji założenie, że działa na wyświetlaczu o rozdzielczości pionowej i poziomej równej 80% rozdzielczości rzeczywistego wyświetlacza.

DOWNSCALE_85

Identyfikator zmiany: 189969734
Stan domyślny: wyłączone we wszystkich aplikacjach.

Gdy włączona jest też opcja DOWNSCALED, włączenie tej zmiany w pakiecie wymusza na aplikacji założenie, że działa na wyświetlaczu o rozdzielczości pionowej i poziomej równej 85% rzeczywistej rozdzielczości wyświetlacza.

DOWNSCALE_90

Identyfikator zmiany: 182811243
Stan domyślny: wyłączone we wszystkich aplikacjach.

Gdy włączona jest też opcja DOWNSCALED, włączenie tej zmiany w pakiecie wymusza na aplikacji założenie, że działa na wyświetlaczu o rozdzielczości pionowej i poziomej równej 90% rzeczywistego wyświetlacza.

DO_NOT_DOWNSCALE_TO_1080P_ON_TV

Identyfikator zmiany: 157629738
Stan domyślny: włączone w aplikacjach kierowanych na Androida 12 (API na poziomie 31) lub nowszego.

Aplikacje na Androida TV kierowane na Androida 12 (API na poziomie 31) lub nowszego powinny obsługiwać dowolny rozmiar okna, w tym rozmiary większe niż 1080p. Aplikacje przeznaczone na starsze wersje Androida nie oczekują okien o rozdzielczości większej niż 1080p, więc w razie potrzeby ich okna są zmniejszane do 1080p.

DROP_CLOSE_SYSTEM_DIALOGS

Identyfikator zmiany: 174664120
Stan domyślny: włączono we wszystkich aplikacjach.

Aby zwiększyć kontrolę użytkownika podczas interakcji z aplikacjami i systemem, od Androida 12 działanie intencji ACTION_CLOSE_SYSTEM_DIALOGS jest wycofane.

Więcej informacji o tej zmianie znajdziesz w artykule Aplikacje nie mogą zamykać okien systemowych.

ENABLE_CHECKS_FOR_PRIVATE_FILES

Identyfikator zmiany: 172100307
Stan domyślny: włączone w aplikacjach kierowanych na Androida 12 (poziom API 31) lub nowszego.

Aplikacje kierowane na Androida 12 (API na poziomie 31) lub nowszego nie mogą wstawiać ani aktualizować plików prywatnych za pomocą dostawcy multimediów.

ENABLE_DEFERRED_SCAN

Identyfikator zmiany: 180326732
Stan domyślny: włączone w aplikacjach kierowanych na Androida 12 (API na poziomie 31) lub nowszego.

Włącz tę opcję, aby odroczyć skanowanie, które jest uruchamiane w ramach MediaProvider#update().

ENABLE_GET_CALL_STATE_PERMISSION_PROTECTION

Identyfikator zmiany: 157233955
Stan domyślny: włączone w aplikacjach kierowanych na Androida 12 (API na poziomie 31) lub nowszego.

W przypadku aplikacji kierowanych na Androida 12 (poziom API 31) i nowsze wersje włącza ochronę READ_PHONE_STATE w interfejsach API, które wysyłają zapytania o stan połączenia i powiadamiają o nim, takich jak TelecomManager#getCallState, TelephonyManager.getCallStateForSubscription() i TelephonyCallback.CallStateListener.

ENABLE_GET_PHONE_ACCOUNT_PERMISSION_PROTECTION

Identyfikator zmiany: 183407956
Stan domyślny: włączone w aplikacjach kierowanych na Androida 12 (API na poziomie 31) lub nowszego.

W przypadku aplikacji kierowanych na Androida 12 (API na poziomie 31) i nowsze wersje włącza zabezpieczenia READ_PHONE_NUMBERS lub READ_PRIVILEGED_PHONE_STATE w getPhoneAccount(PhoneAccountHandle).

ENABLE_INCLUDE_ALL_VOLUMES

Identyfikator zmiany: 182734110
Stan domyślny: włączone w aplikacjach kierowanych na Androida 12 (API na poziomie 31) lub nowszego.

Włącz tę opcję, aby uwzględnić wiersze bazy danych plików z niedawno odmontowanego woluminu w MediaProvider#query.

ENABLE_RAW_MANAGE_EXTERNAL_STORAGE_ACCESS

Identyfikator zmiany: 178209446
Stan domyślny: włączone w przypadku aplikacji kierowanych na Androida 12 (API na poziomie 31) lub nowszego.

Włącz tę opcję, aby umożliwić aplikacjom z uprawnieniem Manifest.permission.MANAGE_EXTERNAL_STORAGE wysyłanie żądań dostępu do nieprzetworzonych danych w pamięci zewnętrznej.

ENFORCE_MINIMUM_WINDOW_ON_INEXACT_ALARMS

Identyfikator zmiany: 185199076
Stan domyślny: włączone w aplikacjach kierowanych na Androida 12 (poziom interfejsu API 31) lub nowszego.

W przypadku aplikacji kierowanych na Androida 12 (poziom API 31) i nowsze wersje wszystkie alarmy niedokładne muszą mieć minimalny rozmiar okna, który powinien wynosić kilka minut. W praktyce wszystkie alarmy wymagające mniejszych okien są takie same jak alarmy precyzyjne i powinny używać odpowiednich interfejsów API, takich jak setExact(int, long, PendingIntent). W przypadku alarmów niedokładnych z krótszymi oknami system wydłuży te okna.

ENFORCE_NATIVE_SHARED_LIBRARY_DEPENDENCIES

Identyfikator zmiany: 142191088
Stan domyślny: włączone w przypadku aplikacji kierowanych na Androida 12 (API na poziomie 31) lub nowszego.

Aplikacje kierowane na Androida 12 (poziom API 31) i nowsze wersje muszą deklarować zależności od publicznych natywnych bibliotek współdzielonych, które są zdefiniowane przez producenta urządzenia za pomocą tagu uses-native-library w pliku AndroidManifest.xml. Jeśli nie można spełnić którejś z zależności (np. jedna z nich nie istnieje), menedżer pakietów nie zainstaluje aplikacji. Zależność można określić jako opcjonalną za pomocą atrybutu android:required w tagu. W takim przypadku niespełnienie zależności nie spowoduje zatrzymania instalacji.

Po zainstalowaniu aplikacja ma dostęp tylko do natywnych bibliotek udostępnionych, które są określone w manifeście aplikacji. Wywołanie dlopen w natywnej bibliotece współdzielonej, która nie pojawia się w manifeście aplikacji, nie powiedzie się, nawet jeśli biblioteka faktycznie istnieje na urządzeniu.

ENFORCE_STRICT_QUERY_BUILDER

Identyfikator zmiany: 143231523
Stan domyślny: wyłączone we wszystkich aplikacjach.

Gdy ta opcja jest włączona, SQLiteQueryBuilder sprawdza wszystkie zapytania CalendarProvider2 pod kątem szkodliwych argumentów.

FGS_BG_START_RESTRICTION_CHANGE_ID

Identyfikator zmiany: 170668199
Stan domyślny: włączone w przypadku aplikacji kierowanych na Androida 12 (API na poziomie 31) lub nowszego.

W przypadku aplikacji kierowanych na Androida 12 (poziom API 31) i nowsze wersje ogranicza możliwość uruchamiania usług na pierwszym planie, gdy aplikacje działają w tle.

FGS_START_EXCEPTION_CHANGE_ID

Identyfikator zmiany: 174041399
Stan domyślny: włączone w aplikacjach kierowanych na Androida 12 (poziom API 31) lub nowszego.

W przypadku aplikacji kierowanych na Androida 12 (poziom API 31) i nowsze wersje umożliwia systemowi zgłaszanie błędu IllegalStateException, jeśli aplikacja próbuje uruchomić usługę działającą na pierwszym planie, gdy działa w tle.

FINISH_INPUT_NO_FALLBACK_CONNECTION

Identyfikator zmiany: 156215187
Stan domyślny: wyłączone we wszystkich aplikacjach.

W przypadku aplikacji kierowanych na Androida 12 (API na poziomie 31) lub nowszego zakończ InputConnection, gdy urządzenie przejdzie w stan non-interactive.

Jeśli jest to dozwolone przez bieżącą usługę input method, bieżące połączenie wejściowe będzie finished, gdy urządzenie przestanie być interaktywne.

Jeśli ta opcja nie jest włączona, bieżące połączenie wejściowe zostanie wyłączone bez powiadomienia, gdy urządzenie przestanie być interaktywne, a gdy urządzenie znów stanie się interaktywne, zostanie wysłana para onFinishInput() i onStartInput().

FORCE_DISABLE_HEVC_SUPPORT

Identyfikator zmiany: 174227820
Stan domyślny: wyłączone we wszystkich aplikacjach.

Wymuś wyłączenie obsługi funkcji multimedialnych HEVC przez aplikację. Aplikacje powinny deklarować obsługiwane funkcje multimedialne w pliku manifestu, ale tej flagi można użyć, aby wymusić brak obsługi HEVC przez aplikację, co wymusi transkodowanie podczas uzyskiwania dostępu do multimediów zakodowanych w HEVC. Ustawienie tej flagi zastępuje wszystkie domyślne ustawienia aplikacji na poziomie systemu operacyjnego. Domyślnie jest wyłączona, co oznacza, że pierwszeństwo mają ustawienia domyślne systemu operacyjnego. Jeśli włączona jest zarówno ta flaga, jak i FORCE_ENABLE_HEVC_SUPPORT, system operacyjny ignoruje obie flagi.

FORCE_ENABLE_HEVC_SUPPORT

Identyfikator zmiany: 174228127
Stan domyślny: wyłączone we wszystkich aplikacjach.

Wymuś włączenie obsługi formatu HEVC w aplikacji. Aplikacje powinny deklarować obsługiwane formaty multimediów w pliku manifestu, ale ta flaga może służyć do wymuszenia obsługi formatu HEVC, co pozwala uniknąć transkodowania podczas uzyskiwania dostępu do multimediów zakodowanych w tym formacie. Ustawienie tej flagi zastępuje wszystkie domyślne ustawienia aplikacji na poziomie systemu operacyjnego. Domyślnie jest wyłączona, co oznacza, że pierwszeństwo mają ustawienia domyślne systemu operacyjnego. Jeśli włączona jest zarówno ta flaga, jak i FORCE_DISABLE_HEVC_SUPPORT, system operacyjny ignoruje obie flagi.

FORCE_NON_RESIZE_APP

Identyfikator zmiany: 181136395
Stan domyślny: wyłączone we wszystkich aplikacjach.

Wymusza, aby pakiety, do których jest stosowany, nie miały możliwości zmiany rozmiaru.

FORCE_RESIZE_APP

Identyfikator zmiany: 174042936
Stan domyślny: wyłączone we wszystkich aplikacjach.

Wymusza możliwość zmiany rozmiaru pakietów, do których jest stosowana. Zezwalamy na zmianę rozmiaru tylko w trybie okna pełnoekranowego, ale nie wymuszamy na aplikacji trybu wielu okien z możliwością zmiany rozmiaru.

HIDE_PROP_ICUBINARY_DATA_PATH

Identyfikator zmiany: 171979766
Stan domyślny: włączone w aplikacjach kierowanych na Androida 12 (poziom interfejsu API 31) lub nowszego.

W przypadku aplikacji kierowanych na Androida 12 (poziom API 31) i nowsze wersje usuwa dostęp do właściwości android.icu.impl.ICUBinary.dataPath.

IGNORE_ALLOW_BACKUP_IN_D2D

Identyfikator zmiany: 183147249
Stan domyślny: włączone w aplikacjach kierowanych na Androida 12 (poziom interfejsu API 31) lub nowszego.

W przypadku aplikacji kierowanych na Androida 12 (API na poziomie 31) lub nowszego atrybut android:allowBackup jest ignorowany podczas migracji z urządzenia na urządzenie.

IGNORE_FULL_BACKUP_CONTENT_IN_D2D

Identyfikator zmiany: 180523564
Stan domyślny: włączone w aplikacjach kierowanych na Androida 12 (API na poziomie 31) lub nowszego.

W przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) i nowsze wersje reguły uwzględniania i wykluczania określone za pomocą android:fullBackupContent są ignorowane podczas przenoszenia danych między urządzeniami.

IME_AUTOFILL_DEFAULT_SUPPORTED_LOCALES_IS_EMPTY

Identyfikator zmiany: 169273070
Stan domyślny: włączone w aplikacjach kierowanych na Androida 12 (poziom interfejsu API 31) lub nowszego.

W przypadku aplikacji kierowanych na Androida 12 (poziom API 31) i nowsze wersje getSupportedLocales() zwraca teraz pustą listę języków, gdy nie jest ustawiona, zamiast domyślnego języka systemu.

IS_BACKUP_SERVICE_ACTIVE_ENFORCE_PERMISSION_IN_SERVICE

Identyfikator zmiany: 158482162
Stan domyślny: włączone w aplikacjach kierowanych na Androida 12 (poziom API 31) lub nowszego.

W przypadku aplikacji kierowanych na Androida 12 (poziom API 31) i nowsze wersje uprawnienie BACKUP wymagane do isBackupServiceActive() jest egzekwowane po stronie usługi, a nie po stronie klienta w BackupManager.

KEYSTORE_OPERATION_CREATION_MAY_FAIL

Identyfikator zmiany: 169897160
Stan domyślny: wyłączone we wszystkich aplikacjach.

Gdy ta opcja jest włączona, tworzenie operacji magazynu kluczy może się nie powieść zgodnie z nową strategią przycinania. Magazyn kluczy działał przy założeniu, że tworzenie operacji kryptograficznych zawsze się udaje. Jednak backend KeyMint ma tylko ograniczoną liczbę gniazd operacyjnych.

Aby zachować pozory „nieskończonej” liczby slotów operacji, demon Keystore usuwał najmniej używane operacje, jeśli nie było dostępnego slotu operacji. W rezultacie prawidłowe operacje mogą zostać przedwcześnie zakończone. Spowodowało to, że AndroidKeystore stał się podatny na ataki typu DoS i niezamierzone blokady. Jeśli na przykład kilka aplikacji zostanie wybudzonych jednocześnie w ramach optymalizacji zarządzania energią i będzie próbowało wykonać operacje kryptograficzne, zaczną one przerywać operacje innych aplikacji, nie robiąc żadnych postępów.

Aby uniknąć blokad i zniechęcić do prób ataków DoS, zmieniliśmy strategię przycinania, tak aby preferowała klientów, którzy przez krótki czas korzystają z niewielu gniazd operacyjnych. Dzięki temu pojedyncze operacje, które nie pozostają nieaktywne przez ponad 5 sekund, prawie zawsze kończą się bez zakłóceń ze strony strategii przycinania. Nadal istnieją pewne operacje związane z szyfrowaniem systemu plików, które mogą usunąć nawet te operacje, ale takie przypadki są niezwykle rzadkie. Efektem ubocznym tej nowej strategii przycinania jest to, że tworzenie może się nie powieść, jeśli klient ma mniejszą moc przycinania niż wszystkie istniejące operacje.

Strategia przycinania: aby znaleźć odpowiedniego kandydata, obliczamy malus dla elementu wywołującego i każdej istniejącej operacji. Malus jest odwrotnością mocy przycinania (wywołujący) lub odporności na przycinanie (istniejąca operacja). Aby obiekt wywołujący mógł usunąć operację, musi znaleźć operację o wyższej wartości malus niż jego własna. Więcej informacji o strategii przycinania znajdziesz w implementacji operation.rs. W Androidzie 11 (poziom interfejsu API 30) i starszych KeyStore2 odpytuje demona Keystore o wolne miejsce na operację. W przypadku aplikacji kierowanych na Androida 11 (API na poziomie 30) i starsze wersje będzie to wyglądać tak, jakby inicjowanie obiektu szyfru i podpisu zawsze się udawało, ale uzyskanie operacji może potrwać dłużej. Wszystkie wersje Androida korzystają z bardziej sprawiedliwego planowania przedziałów czasowych operacji i mają większe szanse na pomyślne zakończenie operacji.

LOCK_DOWN_CLOSE_SYSTEM_DIALOGS

Identyfikator zmiany: 174664365
Stan domyślny: włączone w przypadku aplikacji kierowanych na Androida 12 (API na poziomie 31) lub nowszego.

W przypadku aplikacji kierowanych na Androida 12 (poziom API 31) i nowsze wersje nie można wysyłać Intent.ACTION_CLOSE_SYSTEM_DIALOGS, chyba że aplikacja ma też uprawnienia android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS. Pamiętaj, że jest to bardziej restrykcyjna wersja #DROP_CLOSE_SYSTEM_DIALOGS, która oczekuje, że aplikacja przestanie wysyłać intencję Intent.ACTION_CLOSE_SYSTEM_DIALOGS, gdy zacznie być kierowana na Androida 12 (API na poziomie 31) lub nowszego.

LOCK_DOWN_COLLAPSE_STATUS_BAR

Identyfikator zmiany: 173031413
Stan domyślny: włączone w aplikacjach kierowanych na Androida 12 (poziom API 31) lub nowszego.

W przypadku aplikacji kierowanych na Androida 12 (poziom API 31) i nowsze wersje uprawnienie Manifest.permission.STATUS_BAR jest wymagane do zwijania paneli paska stanu ze względów bezpieczeństwa. Złośliwe oprogramowanie wykorzystywało tę lukę, aby uniemożliwić użytkownikowi dostęp do powiadomień krytycznych.

LOW_POWER_EXCEPTIONS

Identyfikator zmiany: 168936375
Stan domyślny: włączone w aplikacjach kierowanych na Androida 12 (poziom API 31) lub nowszego.

W przypadku aplikacji kierowanych na Androida 12 (poziom API 31) i nowsze wersje wszystkie obiekty LocationRequest oznaczone jako obiekty o niskim poborze mocy zgłaszają wyjątki, jeśli element wywołujący nie ma uprawnień LOCATION_HARDWARE, zamiast po cichu odrzucać część żądania dotyczącą niskiego poboru mocy.

MISSING_EXPORTED_FLAG

Identyfikator zmiany: 150232615
Stan domyślny: włączone w aplikacjach kierowanych na Androida 12 (API na poziomie 31) lub nowszego.

W przypadku aplikacji kierowanych na Androida 12 (poziom API 31) lub nowszego należy określić jawną wartość atrybutu android:exported za każdym razem, gdy definiowany jest filtr intencji.

Więcej informacji o tej zmianie znajdziesz w artykule Bezpieczniejsze eksportowanie komponentów.

NATIVE_HEAP_POINTER_TAGGING_APP_ZYGOTE

Identyfikator zmiany: 207557677
Stan domyślny: włączone w przypadku aplikacji kierowanych na Androida 12 (API na poziomie 32) lub nowszego.

W przypadku aplikacji kierowanych na Androida 12 (API na poziomie 32) i nowsze wersje alokacje sterty natywnej w procesie AppZygote i jego procesach podrzędnych używają niezerowego tagu w najbardziej znaczącym bajcie.

Więcej informacji o tej zmianie znajdziesz w artykule Tagged Pointers (Wskaźniki ze znacznikami).

NATIVE_HEAP_ZERO_INIT

Identyfikator zmiany: 178038272
Stan domyślny: wyłączone we wszystkich aplikacjach.

Włącz automatyczną inicjalizację zerową alokacji pamięci sterty natywnej.

NATIVE_MEMTAG_ASYNC

Identyfikator zmiany: 135772972
Stan domyślny: wyłączone we wszystkich aplikacjach.

Włącz asynchroniczne (ASYNC) sprawdzanie tagów pamięci w tym procesie. Ta flaga ma wpływ tylko na sprzęt obsługujący rozszerzenie Memory Tagging Extension (MTE) ARM.

NATIVE_MEMTAG_SYNC

Identyfikator zmiany: 177438394
Stan domyślny: wyłączone we wszystkich aplikacjach.

Włącza synchroniczne (SYNC) sprawdzanie tagów pamięci w tym procesie. Ta flaga ma wpływ tylko na sprzęt obsługujący rozszerzenie Memory Tagging Extension (MTE) ARM. Jeśli włączone są zarówno zasada NATIVE_MEMTAG_ASYNC, jak i ta opcja, ta opcja ma pierwszeństwo, a MTE jest włączone w trybie SYNC.

NEVER_SANDBOX_DISPLAY_APIS

Identyfikator zmiany: 184838306
Stan domyślny: wyłączone we wszystkich aplikacjach.

Gdy ta opcja jest włączona, zapobiega stosowaniu piaskownicy interfejsu Display API do aktywności letterbox lub SCM. Interfejsy API wyświetlacza będą nadal udostępniać granice DisplayArea.

Więcej informacji o tej zmianie znajdziesz w sekcji Wycofane metody wyświetlania na stronie poświęconej zmianom zachowania w Androidzie 12.

NOTIFICATION_CANCELLATION_REASONS

Identyfikator zmiany: 175319604
Stan domyślny: włączone w aplikacjach kierowanych na Androida 12 (API na poziomie 31) lub nowszego.

Umożliwia odbiorcom powiadomień zrozumienie nowych, bardziej szczegółowych powodów anulowania.

NOTIFICATION_TRAMPOLINE_BLOCK

Identyfikator zmiany: 167676448
Stan domyślny: włączone w aplikacjach kierowanych na Androida 12 (API na poziomie 31) lub nowszego.

Aby zwiększyć wydajność aplikacji i poprawić wrażenia użytkowników, aplikacje kierowane na Androida 12 nie mogą używać usług ani odbiorników do uruchamiania aktywności z powiadomień.

Więcej informacji o tej zmianie znajdziesz w artykule Nie można tworzyć trampolin powiadomień z usług ani odbiorników komunikatów (w języku angielskim).

NULL_TELEPHONY_THROW_NO_CB

Identyfikator zmiany: 182185642
Stan domyślny: włączone w aplikacjach kierowanych na Androida 12 (poziom API 31) lub nowszego.

Służy do sprawdzania, czy docelowa wersja pakietu SDK dla bieżącego procesu to Android 12 (API na poziomie 31) lub nowszy.

Dotyczy tych metod:

OVERRIDE_MIN_ASPECT_RATIO

Identyfikator zmiany: 174042980
Stan domyślny: wyłączone we wszystkich aplikacjach.

Ta zmiana jest strażnikiem wszystkich zmian, które wymuszają dany minimalny format obrazu. Włączenie tej zmiany umożliwia stosowanie tych minimalnych formatów obrazu:

Gdy ta zmiana jest włączona w przypadku pakietu aplikacji, minimalny format obrazu podany w pliku manifestu aplikacji jest zastępowany największym włączonym formatem obrazu, chyba że wartość w pliku manifestu aplikacji jest większa.

OVERRIDE_MIN_ASPECT_RATIO_LARGE

Identyfikator zmiany: 180326787
Stan domyślny: wyłączone we wszystkich aplikacjach.

Gdy włączona jest też funkcja OVERRIDE_MIN_ASPECT_RATIO, włączenie tej zmiany dla pakietu ustawia minimalny format obrazu aktywności na dużą wartość określoną przez OVERRIDE_MIN_ASPECT_RATIO_LARGE_VALUE.

OVERRIDE_MIN_ASPECT_RATIO_MEDIUM

Identyfikator zmiany: 180326845
Stan domyślny: wyłączone we wszystkich aplikacjach.

Gdy włączona jest też opcja OVERRIDE_MIN_ASPECT_RATIO, włączenie tej zmiany w pakiecie ustawia minimalny format obrazu aktywności na średnią wartość zdefiniowaną przez OVERRIDE_MIN_ASPECT_RATIO_MEDIUM_VALUE.

PENDING_INTENT_EXPLICIT_MUTABILITY_REQUIRED

Identyfikator zmiany: 160794467
Stan domyślny: włączone w przypadku aplikacji kierowanych na Androida 12 (API na poziomie 31) lub nowszego.

W przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) lub nowszego musisz określić zmienność każdego obiektu PendingIntent tworzonego przez aplikację. To dodatkowe wymaganie zwiększa bezpieczeństwo aplikacji.

Więcej informacji o tej zmianie znajdziesz w sekcji Intencje oczekujące muszą deklarować zmienność.

PREVENT_SETTING_PASSWORD_QUALITY_ON_PARENT

Identyfikator zmiany: 165573442
Stan domyślny: włączone w aplikacjach kierowanych na Androida 12 (API na poziomie 31) lub nowszego.

Aplikacje administratora kierowane na Androida 12 (poziom interfejsu API 31) i nowsze nie mogą używać metody DevicePolicyManager.setPasswordQuality(ComponentName, int) do ustawiania jakości hasła w instancji DevicePolicyManager uzyskanej przez wywołanie metody DevicePolicyManager.getParentProfileInstance(ComponentName). Zamiast tego powinny używać DevicePolicyManager.setRequiredPasswordComplexity(int), aby ustawić ogólne wymagania dotyczące haseł na całym urządzeniu.

RATE_LIMIT_TOASTS

Identyfikator zmiany: 174840628
Stan domyślny: tej zmiany nie można przełączyć. Jest on rejestrowany tylko przez system sprawdzania zgodności.

Włącza ograniczanie liczby żądań Toast.show(), aby nie obciążać użytkownika zbyt dużą liczbą powiadomień w ograniczonym czasie. Każda próba wyświetlenia większej liczby powiadomień, niż jest to dozwolone w określonym czasie, spowoduje odrzucenie powiadomienia.

REQUIRE_EXACT_ALARM_PERMISSION

Identyfikator zmiany: 171306433
Stan domyślny: włączone w aplikacjach kierowanych na Androida 12 (API na poziomie 31) lub nowszego.

Aplikacje kierowane na Androida 12 (API na poziomie 31) lub nowszego muszą mieć uprawnienie Manifest.permission.SCHEDULE_EXACT_ALARM, aby mogły używać interfejsów API do ustawiania alarmów precyzyjnych, takich jak setExactAndAllowWhileIdle(int, long, PendingIntent) i setAlarmClock(AlarmClockInfo, PendingIntent).

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_ACTIVE_DATA_SUB_ID

Identyfikator zmiany: 182478738
Stan domyślny: włączone w przypadku aplikacji kierowanych na Androida 12 (API na poziomie 31) lub nowszego.

W przypadku aplikacji kierowanych na Androida 12 (poziom API 31) i nowsze wersje aplikacje muszą mieć uprawnienia Manifest.permission.READ_PHONE_STATE, aby wywoływać TelephonyCallback.ActiveDataSubscriptionIdListener.

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_CELL_INFO

Identyfikator zmiany: 184323934
Stan domyślny: włączone w aplikacjach kierowanych na Androida 12 (API na poziomie 31) lub nowszego.

W przypadku aplikacji kierowanych na Androida 12 (poziom API 31) i nowsze wersje aplikacje muszą mieć uprawnienia Manifest.permission.READ_PHONE_STATE, aby wywoływać TelephonyCallback.CellInfoListener.

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_DISPLAY_INFO

Identyfikator zmiany: 183164979
Stan domyślny: włączone w aplikacjach kierowanych na Androida 12 (poziom API 31) lub nowszego.

W przypadku aplikacji kierowanych na Androida 12 (poziom API 31) i nowsze wersje aplikacje muszą mieć uprawnienia Manifest.permission.READ_PHONE_STATE, aby wywoływać TelephonyCallback.DisplayInfoListener.

RESTRICT_ADB_BACKUP

Identyfikator zmiany: 171032338
Stan domyślny: włączone w aplikacjach kierowanych na Androida 12 (API na poziomie 31) lub nowszego.

W przypadku aplikacji kierowanych na Androida 12 (poziom API 31) i nowsze wersje adb backup jest automatycznie włączany w aplikacjach działających w trybie debugowania (android:debuggable ustawione na true) i niedostępny dla innych aplikacji.

RESTRICT_DOMAINS

Identyfikator zmiany: 175408749
Stan domyślny: włączone w aplikacjach kierowanych na Androida 12 (API na poziomie 31) lub nowszego.

W przypadku aplikacji kierowanych na Androida 12 (API na poziomie 31) lub nowszego wymagana jest zaktualizowana wersja interfejsu API do weryfikacji linków do aplikacji. To wymaganie oznacza, że aplikacja musi zadeklarować domeny w filtrze intencji, który zawiera wszystkie te elementy:

  • android:autoVerify="true"
  • Intent.ACTION_VIEW
  • Intent.CATEGORY_BROWSABLE
  • Intet.CATEGORY_DEFAULT
  • Tylko IntentFilter.SCHEME_HTTP lub IntentFilter.SCHEME_HTTPS, bez innych schematów

W starszych wersjach Androida schemat Intent.CATEGORY_BROWSABLE nie był wymagany, dozwolone były inne schematy, a ustawienie autoVerify na true w dowolnym filtrze intencji powodowało, że wszystkie filtry intencji były ustawione na autoVerify="true".

SECURITY_EXCEPTION_ON_INVALID_ATTRIBUTION_TAG_CHANGE

Identyfikator zmiany: 151105954
Stan domyślny: włączone w aplikacjach kierowanych na Androida 12 (poziom API 31) lub nowszego.

W przypadku aplikacji kierowanych na Androida 12 (poziom API 31) i nowsze wersje wymusza, aby wszystkie obiekty attributionTags wysyłane do noteOp(String, int, String), noteProxyOp(String, String) i startOp(String, int, String) były zdefiniowane w pliku manifestu pakietu określonego jako parametr metod.

Aby wprowadzić tę zmianę, musi ona zostać włączona zarówno w pakiecie wywołującym noteOp(String, int, String), jak i w pakiecie określonym jako parametr metody.

SELINUX_LATEST_CHANGES

Identyfikator zmiany: 143539591
Stan domyślny: włączone w aplikacjach kierowanych na Androida 12 (poziom API 31) lub nowszego.

W przypadku aplikacji kierowanych na Androida 12 (poziom API 31) i nowsze wersje akceptuje najnowsze zmiany w SELinux. Wyłączenie tej zmiany w aplikacji kierowanej na Androida 12 (poziom API 31) lub nowszego nie ma żadnego efektu. Nie ma też wpływu na aplikacje, które używają wspólnego identyfikatora użytkownika.

SETTINGS_API_V2

Identyfikator zmiany: 178111421
Stan domyślny: włączone we wszystkich aplikacjach.

Nowy interfejs API preferencji użytkownika do weryfikacji domen oznaczonych jako autoVerify=true w filtrach intencji w pliku AndroidManifest.xml nie został jeszcze wdrożony w obecnej wersji testowej platformy. Na razie można wyświetlić podgląd nowych zmian preferencji użytkownika, włączając ten identyfikator zmiany i używając polecenia adb shell pm set-app-links-user-selection i podobnych.

USE_SHORT_FGS_USAGE_INTERACTION_TIME

Identyfikator zmiany: 183972877
Stan domyślny: włączone w przypadku aplikacji kierowanych na Androida 12 (API na poziomie 31) lub nowszego.

W przypadku aplikacji kierowanych na Androida 12 (poziom API 31) i nowsze wersje określa, czy używać krótszego czasu oczekiwania przed podniesieniem zasobnika gotowości do ACTIVE, gdy aplikacje uruchamiają usługę na pierwszym planie.