Zmiany platformy zgodności (Android 12)

Rysunek 1. Ekran Zmiany zgodności aplikacji w opcjach programisty zawiera listę zmian, które możesz przełączyć.

Na tej stronie opisujemy wszystkie zmiany w działaniu, które wchodzą w skład platformy zgodności na Androidzie 12 (poziom interfejsu API 31). Tej listy możesz używać w połączeniu z opcjami programisty i poleceniami ADB, aby testować i debugować aplikację, gdy przygotowujesz się do obsługi Androida 12 i jej kierowania na nią.

Oto kilka przykładów tego, co możesz zrobić za pomocą narzędzi platformy zgodności:

  • Przetestuj docelowe zmiany bez zmiany wartości targetSdkVersion. Możesz użyć przełączników, aby wymusić włączenie określonych kierowanych zmian działania w celu oceny ich wpływu na istniejącą aplikację.
  • Skup się na testowaniu tylko określonych zmian. Zamiast zajmować się wszystkimi zmianami w kierowaniu naraz, przełączniki pozwalają wyłączyć wszystkie kierowane zmiany z wyjątkiem tych, które chcesz przetestować.
  • Przełączami można zarządzać za pomocą narzędzia adb. Za pomocą poleceń adb możesz włączać i wyłączać zmiany z możliwością przełączania w automatycznym środowisku testowym.
  • Szybsze debugowanie przy użyciu standardowych identyfikatorów zmian. Każda zmiana, którą można przełączyć, ma unikalny identyfikator i nazwę, dzięki którym można szybko debugować główną przyczynę w danych wyjściowych logu.

Pełne informacje o korzystaniu z narzędzi używanych w każdym z tych przypadków znajdziesz w artykule na temat narzędzi platformy zgodności.

Zmiany w działaniu uwzględnione w ramach struktury zgodności

Na liście w tej sekcji opisujemy wszystkie zmiany w działaniu uwzględnione w platformie zgodności w Androidzie 12.

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

Zmiany w działaniu dodane do platformy zgodności w Androidzie 12

ALWAYS_SANDBOX_DISPLAY_APIS

Identyfikator zmiany: 185004937
Stan domyślny: wyłączone dla wszystkich aplikacji.

Gdy ta opcja jest włączona, stosuje do pakietu piaskownicę interfejsu Display API niezależnie od trybu okna. Interfejsy Display API zawsze określają granice aplikacji.

Więcej informacji o tej zmianie znajdziesz w sekcji na temat wycofanych metod wyświetlania na stronie zmian w działaniu Androida 12.

AUTOFILL_NON_TEXT_REQUIRES_ON_RECEIVE_CONTENT_LISTENER

Identyfikator zmiany: 163400105
Stan domyślny: włączony w przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 32) lub nowszy.

Począwszy od Androida 12 platforma ta może wyświetlać sugestie inne niż tekstowe (np. obrazy) za pomocą platformy rozszerzonej autouzupełniania (zobacz usługi autouzupełniania). Aby aplikacja obsługiwała te sugestie, musi zwykle implementować interfejs API OnReceiveContentListener.

Aby usprawnić wdrażanie tego interfejsu API w przypadku aplikacji, które wcześniej wdrożyły InputConnection.commitContent(InputContentInfo, int, Bundle) API, użyjemy go jako kreacji zastępczej, jeśli OnReceiveContentListener nie został jeszcze wdrożony przez aplikację. Ta kreacja zastępcza jest dostępna tylko na Androidzie 12 (poziom API 31). Ten identyfikator zmiany powoduje wyłączenie kreacji zastępczej. Oznacza to, że aplikacje kierowane na Androida 12 (poziom interfejsu API 32) i nowsze wersje muszą implementować interfejs API OnReceiveContentListener, aby akceptować sugestie inne niż tekstowe.

BLOCK_FLAG_SLIPPERY

Identyfikator zmiany: 157929241
Stan domyślny: włączony dla wszystkich aplikacji.

W przypadku aplikacji działających na Androidzie 12 (poziom interfejsu API 31) sprawdza, czy w którychkolwiek oknach aplikacji jest używany interfejs FLAG_SLIPPERY. Spodziewamy się, że ta flaga jest prawdopodobnie używana tylko przez komponenty systemu, ponieważ jest nieobsługiwanym polem. Jeśli tak, dostęp do treści zostanie ograniczony.

BLOCK_GPS_STATUS_USAGE

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

W przypadku aplikacji kierowanych na Androida 12 (poziom API 31) i nowsze wykorzystanie interfejsów API GpsStatus należy zastąpić interfejsami API GnssStatus.

BLOCK_IMMUTABLE_PENDING_INTENTS

Identyfikator zmiany: 171317480
Stan domyślny: włączony w przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) lub nowszy.

W przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) i nowsze stałe obiekty PendingIntentprzekazywane do interfejsów API lokalizacji generują IllegalArgumentException.

BLOCK_PENDING_INTENT_SYSTEM_API_USAGE

Identyfikator zmiany: 169887240
Stan domyślny: włączony w przypadku aplikacji kierowanych na Androida 12 (poziom API 31) lub nowszy.

W przypadku aplikacji kierowanych na Androida 12 (poziom API 31) i nowsze interfejsy API systemu LocationRequest nie mogą być używane razem z żądaniami lokalizacji PendingIntent.

BLOCK_UNTRUSTED_TOUCHES

Identyfikator zmiany: 158002302
Stan domyślny: włączony dla wszystkich aplikacji.

Aby zapewnić bezpieczeństwo systemu i komfort użytkowników, Android 12 uniemożliwia aplikacjom wykorzystywanie zdarzeń kliknięcia, w przypadku których nakładka blokuje aplikację w niebezpieczny sposób.

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

CALL_ACTIVITY_RESULT_BEFORE_RESUME

Identyfikator zmiany: 78294732
Stan domyślny: włączony w przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 32) lub nowszy.

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

CAMERA_MIC_INDICATORS_NOT_PRESENT

Identyfikator zmiany: 162547999
Stan domyślny: wyłączone dla wszystkich aplikacji.

Wskazuje, że urządzenie obsługuje wskaźniki aparatu i mikrofonu. Ma wartość false, jeśli występuje, ponieważ metoda CompatChanges#isChangeEnabled zwraca wartość true, jeśli nie podano identyfikatora zmiany.

CANNOT_INSTALL_WITH_BAD_PERMISSION_GROUPS

Identyfikator zmiany: 146211400
Stan domyślny: włączony w przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 32) lub nowszy.

W przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 32) i nowsze wersje menedżer pakietów nie zainstaluje pakietu, jeśli istnieją nieprawidłowe grupy uprawnień. Grupy uprawnień należy udostępniać tylko aplikacjom udostępniającym certyfikat. Jeśli uprawnienie należy do grupy, musi ona też być zdefiniowana.

CHANGE_ID_AUTH_STATE_DENIED

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

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

CHANGE_ID_SAMPLING_RATE_SENSORS_PERMISSION

Identyfikator zmiany: 136069189
Stan domyślny: włączony w przypadku aplikacji kierowanych na Androida 12 (poziom API 31) lub nowszy.

W przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) lub nowszego wywoływany jest SecurityException, gdy nie mają uprawnienia HIGH_SAMPLING_RATE_SENSORS, są uruchamiane w trybie debugowania i żądają częstotliwości próbkowania powyżej 200 Hz.

DELIVER_HISTORICAL_LOCATIONS

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

W przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) lub nowszego klienty lokalizacji mogą w pewnych okolicznościach otrzymywać lokalizacje historyczne (sprzedające czas wstecz).

DISPLAY_INFO_NR_ADVANCED_SUPPORTED

Identyfikator zmiany: 181658987
Stan domyślny: włączony w przypadku aplikacji kierowanych na Androida 12 (poziom API 31) lub nowszy.

W przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) i nowsze funkcje zapewniają zgodność wsteczną w przypadku zmian w TelephonyDisplayInfo.

DISPLAY_MODE_RETURNS_PHYSICAL_REFRESH_RATE

Identyfikator zmiany: 170503758
Stan domyślny: włączony w przypadku aplikacji kierowanych na Androida 12 (poziom API 31) lub nowszy.

W przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) lub nowszego platforma może ograniczać liczbę klatek aplikacji do dzielnika częstotliwości odświeżania, jeśli jest to korzystniejsze (na przykład gdy aplikacja wywołuje metodę Surface.setFrameRate(float, int)). Aplikacje będą wywoływać Choreographer.postFrameCallback(Choreographer.FrameCallback) wywołania zwrotne i obciążenie wsteczne z ograniczoną liczbą klatek. Aplikacje używają parametrów Display.getRefreshRate() i Display.Mode.getRefreshRate(), aby poznać częstotliwość odświeżania wyświetlacza. Display.getRefreshRate() zawsze zwraca liczbę klatek w aplikacji, a nie fizyczną częstotliwość odświeżania wyświetlacza, aby aplikacje mogły odpowiednio zmieniać tempo klatek. Display.Mode.getRefreshRate() zwraca liczbę klatek w aplikacji, jeśli jest skompilowana do poprzedniej wersji, a od Androida 12 (poziom interfejsu API 31) zwraca częstotliwość odświeżania fizycznej wyświetlacza.

DOWNSCALED

Identyfikator zmiany: 168419799
Stan domyślny: wyłączone dla wszystkich aplikacji.

Ta zmiana decyduje o wszystkich zmianach skalowania bufora w podziale na aplikacje. Włączenie tej zmiany umożliwia stosowanie tych współczynników skalowania:

Gdy ta zmiana jest włączona w pakiecie aplikacji, rozmiar aplikacji jest wymuszany na najwyższy, włączony współczynnik skalowania. Na przykład wartość 80% jest używana, gdy włączone jest zarówno 80%, jak i 70% (DOWNSCALE_80 i DOWNSCALE_70).

DOWNSCALE_30

Identyfikator zmiany: 189970040
Stan domyślny: wyłączona dla wszystkich aplikacji.

Gdy włączona jest też usługa DOWNSCALED, włączenie tej zmiany w pakiecie wymusza na aplikacji przyjmowanie, że działa na wyświetlaczu z 30% rozdzielczości pionowej i poziomej rzeczywistego wyświetlacza.

DOWNSCALE_35

Identyfikator zmiany: 189969749
Stan domyślny: wyłączona dla wszystkich aplikacji.

Gdy włączona jest też usługa DOWNSCALED, włączenie tej zmiany w pakiecie wymusza na aplikacji przyjmowanie, że działa na wyświetlaczu z 35% rozdzielczością pionowej i poziomej rzeczywistego wyświetlacza.

DOWNSCALE_40

Identyfikator zmiany: 189970038
Stan domyślny: wyłączone dla wszystkich aplikacji.

Gdy włączona jest też usługa DOWNSCALED, włączenie tej zmiany w pakiecie wymusza na aplikacji przyjmowanie, że działa na wyświetlaczu z rozdzielczością pionową i poziomą rzeczywistego wyświetlacza.

DOWNSCALE_45

Identyfikator zmiany: 189969782
Stan domyślny: wyłączone dla wszystkich aplikacji.

Gdy włączona jest też usługa DOWNSCALED, włączenie tej zmiany w pakiecie wymusza na aplikacji przyjmowanie, że działa na wyświetlaczu z rozdzielczością pionową i poziomą rzeczywistego wyświetlacza.

DOWNSCALE_50

Identyfikator zmiany: 176926741
Stan domyślny: wyłączona dla wszystkich aplikacji.

Gdy włączona jest też usługa DOWNSCALED, włączenie tej zmiany w pakiecie wymusza na aplikacji przyjmowanie, że działa na wyświetlaczu z rozdzielczością pionową i poziomą rzeczywistego wyświetlacza.

DOWNSCALE_55

Identyfikator zmiany: 189970036
Stan domyślny: wyłączona dla wszystkich aplikacji.

Gdy włączona jest również usługa DOWNSCALED, włączenie tej zmiany w pakiecie wymusza na aplikacji przyjmowanie, że działa na wyświetlaczu z rozdzielczością pionową i poziomą rzeczywistego wyświetlacza.

DOWNSCALE_60

Identyfikator zmiany: 176926771
Stan domyślny: wyłączone dla wszystkich aplikacji.

Gdy włączona jest też usługa DOWNSCALED, włączenie tej zmiany w pakiecie wymusza na aplikacji przyjmowanie, że działa na wyświetlaczu z 60% rozdzielczości pionowej i poziomej rzeczywistego wyświetlacza.

DOWNSCALE_65

Identyfikator zmiany: 189969744
Stan domyślny: wyłączone dla wszystkich aplikacji.

Gdy włączona jest też usługa DOWNSCALED, włączenie tej zmiany w pakiecie wymusza na aplikacji przyjmowanie, że działa na wyświetlaczu z 65% rozdzielczością pionowej i poziomej rzeczywistego wyświetlacza.

DOWNSCALE_70

Identyfikator zmiany: 176926829
Stan domyślny: wyłączona dla wszystkich aplikacji.

Gdy włączona jest też usługa DOWNSCALED, włączenie tej zmiany w pakiecie wymusza na aplikacji przyjmowanie, że działa na wyświetlaczu z 70% rozdzielczości pionowej i poziomej rzeczywistego wyświetlacza.

DOWNSCALE_75

Identyfikator zmiany: 189969779
Stan domyślny: wyłączona dla wszystkich aplikacji.

Gdy włączona jest też usługa DOWNSCALED, włączenie tej zmiany w pakiecie wymusza na aplikacji przyjmowanie, że działa na wyświetlaczu z 75% rozdzielczości pionowej i poziomej rzeczywistego wyświetlacza.

DOWNSCALE_80

Identyfikator zmiany: 176926753
Stan domyślny: wyłączone dla wszystkich aplikacji.

Gdy włączona jest też usługa DOWNSCALED, włączenie tej zmiany w pakiecie wymusza na aplikacji przyjmowanie, że działa na wyświetlaczu z 80% rozdzielczości pionowej i poziomej rzeczywistego wyświetlacza.

DOWNSCALE_85

Identyfikator zmiany: 189969734
Stan domyślny: wyłączone dla wszystkich aplikacji.

Gdy włączona jest również usługa DOWNSCALED, włączenie tej zmiany w pakiecie wymusza na aplikacji przyjmowanie, że działa ona na wyświetlaczu z rozdzielczością pionową i poziomą rzeczywistego wyświetlacza.

DOWNSCALE_90

Identyfikator zmiany: 182811243
Stan domyślny: wyłączona dla wszystkich aplikacji.

Gdy włączona jest też usługa DOWNSCALED, włączenie tej zmiany w pakiecie wymusza na aplikacji przyjmowanie, że działa na wyświetlaczu z 90% rozdzielczości pionowej i poziomej rzeczywistego wyświetlacza.

DO_NOT_DOWNSCALE_TO_1080P_ON_TV

Identyfikator zmiany: 157629738
Stan domyślny: włączony w przypadku aplikacji kierowanych na Androida 12 (poziom API 31) lub nowszy.

Aplikacje na Androida TV kierowane na Androida 12 (poziom interfejsu API 31) i nowsze powinny obsługiwać okna o dowolnych rozmiarach, w tym większych niż 1080p. Aplikacje kierowane na starsze wersje Androida nie spodziewają się, że trafią do systemu Windows o rozdzielczości większej niż 1080p. W razie potrzeby system Windows zostanie przeskalowany do rozdzielczości 1080p.

DROP_CLOSE_SYSTEM_DIALOGS

Identyfikator zmiany: 174664120
Stan domyślny: włączony dla wszystkich aplikacji.

Aby zapewnić użytkownikom większą kontrolę podczas korzystania z aplikacji i systemu, w Androidzie 12 wycofaliśmy działanie intencji ACTION_CLOSE_SYSTEM_DIALOGS.

Więcej informacji o tej zmianie znajdziesz w artykule Aplikacje nie mogą zamknąć okien dialogowych w systemie.

ENABLE_CHECKS_FOR_PRIVATE_FILES

Identyfikator zmiany: 172100307
Stan domyślny: włączony w przypadku aplikacji kierowanych na Androida 12 (poziom API 31) lub nowszy.

Aplikacje kierowane na Androida 12 (poziom interfejsu API 31) i nowsze wersje nie mogą wstawiać ani aktualizować plików prywatnych za pomocą dostawcy multimediów.

ENABLE_DEFERRED_SCAN

Identyfikator zmiany: 180326732
Stan domyślny: włączony w przypadku aplikacji kierowanych na Androida 12 (poziom API 31) lub nowszy.

Włącz tę opcję, aby odroczyć skanowanie aktywowane w ramach funkcji MediaProvider#update().

ENABLE_GET_CALL_STATE_PERMISSION_PROTECTION

Identyfikator zmiany: 157233955
Stan domyślny: włączony w przypadku aplikacji kierowanych na Androida 12 (poziom API 31) lub nowszy.

W przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) lub nowszego włącza ochronę READ_PHONE_STATE w przypadku zapytań interfejsów API i powiadomień o stanie wywołania, np. TelecomManager#getCallState, TelephonyManager.getCallStateForSubscription() i TelephonyCallback.CallStateListener.

ENABLE_GET_PHONE_ACCOUNT_PERMISSION_PROTECTION

Identyfikator zmiany: 183407956
Stan domyślny: włączony w przypadku aplikacji kierowanych na Androida 12 (poziom API 31) lub nowszy.

W przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) lub nowszego włącz zabezpieczenia READ_PHONE_NUMBERS lub READ_PRIVILEGED_PHONE_STATE w getPhoneAccount(PhoneAccountHandle).

ENABLE_INCLUDE_ALL_VOLUMES

Identyfikator zmiany: 182734110
Stan domyślny: włączony w przypadku aplikacji kierowanych na Androida 12 (poziom API 31) lub nowszy.

Włącz tę opcję, aby uwzględnić wiersze bazy danych z plikami z ostatnio odłączonego woluminu w usłudze MediaProvider#query.

ENABLE_RAW_MANAGE_EXTERNAL_STORAGE_ACCESS

Identyfikator zmiany: 178209446
Stan domyślny: włączony w przypadku aplikacji kierowanych na Androida 12 (poziom API 31) lub nowszy.

Włącz tę opcję, aby zezwolić aplikacjom z uprawnieniem Manifest.permission.MANAGE_EXTERNAL_STORAGE na wysyłanie próśb o dostęp do nieprzetworzonej pamięci zewnętrznej.

ENFORCE_MINIMUM_WINDOW_ON_INEXACT_ALARMS

Identyfikator zmiany: 185199076
Stan domyślny: włączony w przypadku aplikacji kierowanych na Androida 12 (poziom API 31) lub nowszy.

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

ENFORCE_NATIVE_SHARED_LIBRARY_DEPENDENCIES

Identyfikator zmiany: 142191088
Stan domyślny: włączony w przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) lub nowszy.

Aplikacje kierowane na Androida 12 (poziom interfejsu API 31) i nowsze muszą zadeklarować zależności od publicznych bibliotek udostępnionych przez producenta urządzenia za pomocą tagu uses-native-library w elemencie AndroidManifest.xml. Jeśli któraś z zależności jest niespełniona (na przykład jedna z zależności 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 udostępnia tylko natywne biblioteki udostępnione, które są określone w pliku manifestu. Wywołanie funkcji dlopen w natywnej udostępnianej bibliotece, która nie pojawia się w pliku manifestu aplikacji, nie powiedzie się, nawet jeśli faktycznie istnieje na urządzeniu.

ENFORCE_STRICT_QUERY_BUILDER

Identyfikator zmiany: 143231523
Stan domyślny: wyłączony dla wszystkich aplikacji.

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

FGS_BG_START_RESTRICTION_CHANGE_ID

Identyfikator zmiany: 170668199
Stan domyślny: włączony w przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) lub nowszy.

W przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) lub nowszego określa, kiedy aplikacje mogą uruchamiać usługi na pierwszym planie podczas działania w tle.

FGS_START_EXCEPTION_CHANGE_ID

Identyfikator zmiany: 174041399
Stan domyślny: włączony w przypadku aplikacji kierowanych na Androida 12 (poziom API 31) lub nowszy.

W przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) i nowsze wersje umożliwia systemowi wywoływanie funkcji IllegalStateException, gdy aplikacja próbuje uruchomić usługę na pierwszym planie podczas działania w tle.

FINISH_INPUT_NO_FALLBACK_CONNECTION

Identyfikator zmiany: 156215187
Stan domyślny: wyłączone dla wszystkich aplikacji.

W przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) lub nowszego ukończ InputConnection, gdy urządzenie zmieni się na non-interactive.

Jeśli zasada jest włączona przez obecny tryb input method, obecne połączenie wejściowe będzie finished, gdy urządzenia nie będą interaktywne.

Jeśli ta opcja nie jest włączona, bieżące połączenie wejściowe będzie dyskretnie dezaktywowane, gdy urządzenia staną się nieinteraktywne, 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 dla wszystkich aplikacji.

Wymuszaj wyłączenie przez aplikację obsługi multimediów HEVC. Aplikacje powinny zadeklarować obsługiwane możliwości multimediów w pliku manifestu, ale można użyć tej flagi, aby wymusić brak obsługi HEVC, co wymaga transkodowania na potrzeby dostępu do multimediów zakodowanego w HEVC. Ustawienie tej flagi zastępuje wszystkie wartości domyślne na poziomie systemu operacyjnego dla aplikacji. Domyślnie jest wyłączona, co oznacza, że pierwszeństwo mają domyślne ustawienia 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 dla wszystkich aplikacji.

Wymuszaj włączenie w aplikacji obsługi funkcji multimediów HEVC, aby aplikacje mogły zadeklarować obsługiwane możliwości multimediów w pliku manifestu. Tej flagi można użyć do wymuszenia obsługi HEVC, przez co unikasz transkodowania przy dostępie do multimediów zakodowanego w HEVC. Ustawienie tej flagi powoduje zastąpienie wszystkich wartości domyślnych na poziomie systemu operacyjnego dla aplikacji. Domyślnie jest ona wyłączona, co oznacza, że pierwszeństwo mają domyślne ustawienia 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 dla wszystkich aplikacji.

Wymusza możliwość zmiany rozmiaru pakietów, do których jest stosowany.

FORCE_RESIZE_APP

Identyfikator zmiany: 174042936
Stan domyślny: wyłączone dla wszystkich aplikacji.

Wymusza możliwość zmiany rozmiaru pakietów, do których jest stosowany. Zezwalamy na zmianę rozmiaru tylko w trybie pełnego ekranu. Nie wymuszamy w aplikacji trybu wielu okien z możliwością zmiany rozmiaru.

HIDE_PROP_ICUBINARY_DATA_PATH

Identyfikator zmiany: 171979766
Stan domyślny: włączony w przypadku aplikacji kierowanych na Androida 12 (poziom API 31) lub nowszy.

W przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) i nowsze wersje otrzymują dostęp do usługi android.icu.impl.ICUBinary.dataPath.

IGNORE_ALLOW_BACKUP_IN_D2D

Identyfikator zmiany: 183147249
Stan domyślny: włączony w przypadku aplikacji kierowanych na Androida 12 (poziom API 31) lub nowszy.

W przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) lub nowszego funkcja android:allowBackup jest ignorowana w przypadku aplikacji podczas migracji między urządzeniami (D2D).

IGNORE_FULL_BACKUP_CONTENT_IN_D2D

Identyfikator zmiany: 180523564
Stan domyślny: włączony w przypadku aplikacji kierowanych na Androida 12 (poziom API 31) lub nowszy.

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

IME_AUTOFILL_DEFAULT_SUPPORTED_LOCALES_IS_EMPTY

Identyfikator zmiany: 169273070
Stan domyślny: włączony w przypadku aplikacji kierowanych na Androida 12 (poziom API 31) lub nowszy.

W przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) lub nowszego getSupportedLocales() zwraca teraz pustą listę języków, jeśli nie jest ona ustawiona, zamiast domyślnych ustawień regionalnych systemu.

IS_BACKUP_SERVICE_ACTIVE_ENFORCE_PERMISSION_IN_SERVICE

Identyfikator zmiany: 158482162
Stan domyślny: włączony w przypadku aplikacji kierowanych na Androida 12 (poziom API 31) lub nowszy.

W przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) lub nowszego uprawnienie BACKUP wymagane przez zasadę isBackupServiceActive() jest wymuszane po stronie usługi, a nie po stronie klienta w BackupManager.

KEYSTORE_OPERATION_CREATION_MAY_FAIL

Identyfikator zmiany: 169897160
Stan domyślny: wyłączona dla wszystkich aplikacji.

Gdy ta opcja jest włączona, tworzenie operacji magazynu kluczy może się nie udać zgodnie z nową strategią przycinania. Magazyn kluczy działał przy założeniu, że operacje kryptograficzne są zawsze udane. Backend KeyMint ma jednak tylko ograniczoną liczbę przedziałów operacji.

Aby zachować wygląd „nieskończonych” przedziałów operacji, demon magazynu kluczy odrzucałby najmniej ostatnio używane operacje, jeśli nie było dostępnego przedziału operacji. W związku z tym prawidłowe operacje mogą zostać przedwcześnie zakończone. W rezultacie AndroidKeystore ograniczył ataki DoS (DoS) i niezamierzoną blokadę transmisji na żywo. Jeśli na przykład w wyniku optymalizacji zarządzania energią wiele aplikacji wybudzi się jednocześnie i próbuje przeprowadzić operacje związane z kryptowalutami, zaczną kończyć swoje operacje bez wykonywania żadnych działań.

Aby wyeliminować blokady ruchu i zniechęcić ich do wykonywania prób DoS, zmieniliśmy strategię przycinania w taki sposób, aby kierowała użytkowników na klientów, którzy na krótki czas korzystają z nielicznych przedziałów operacji. W rezultacie pojedyncze operacje, które nie pozostaną nieaktywne przez ponad 5 sekund, prawie zawsze będą prawie zawsze niezakłócone przez strategię przycinania. Istnieją jeszcze pewne operacje związane z szyfrowaniem systemu plików, które mogą nawet je skrócić, jednak takie przypadki są niezwykle rzadkie. Efektem ubocznym tej nowej operacji przycinania może być teraz niepowodzenie utworzenia, jeśli klient ma mniejszą moc przycinania niż wszystkie istniejące operacje.

Strategia przycinania: w celu znalezienia odpowiedniego kandydata obliczamy złośliwe oprogramowanie dla elementu wywołującego i każdej istniejącej operacji. Argument malus to odwrotność mocy przycinania (wywoływanie) lub oporu na przycinanie (istniejąca operacja). Aby element wywołujący mógł przyciąć operację, musi znaleźć operację, w której parametr malus jest wyższy niż własny. Więcej informacji o strategii przycinania znajdziesz w artykule o implementacji tagu operation.rs. W Androidzie 11 (poziom interfejsu API 30) i starszych wersjach KeyStore2 odpytuje demona magazynu kluczy pod kątem przedziału bezpłatnej operacji. W przypadku aplikacji kierowanych na Androida 11 (poziom interfejsu API 30) lub starszego nadal będzie ono wyglądać tak, jakby inicjowanie obiektu podpisu i mechanizmu szyfrowania zawsze się powiodło, jednak może to potrwać dłużej. Wszystkie wersje Androida korzystają z bardziej sprawiedliwego planowania przedziałów operacji i zwiększają szanse na pomyślne zakończenie operacji.

LOCK_DOWN_CLOSE_SYSTEM_DIALOGS

Identyfikator zmiany: 174664365
Stan domyślny: włączony w przypadku aplikacji kierowanych na Androida 12 (poziom API 31) lub nowszy.

W przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) lub nowszego nie można wysyłać Intent.ACTION_CLOSE_SYSTEM_DIALOGS, chyba że aplikacja ma też uprawnienie android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS. Jest to bardziej restrykcyjna wersja #DROP_CLOSE_SYSTEM_DIALOGS. Po uruchomieniu aplikacji na Androida 12 (poziom interfejsu API 31) lub nowszego aplikacja przestaje wysyłać intencję Intent.ACTION_CLOSE_SYSTEM_DIALOGS.

LOCK_DOWN_COLLAPSE_STATUS_BAR

Identyfikator zmiany: 173031413
Stan domyślny: włączony w przypadku aplikacji kierowanych na Androida 12 (poziom API 31) lub nowszy.

Ze względów bezpieczeństwa w przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) lub nowszego do zwijania paneli paska stanu wymagane jest uprawnienie Manifest.permission.STATUS_BAR. Złośliwe oprogramowanie zostało wykorzystane do uniemożliwienia użytkownikowi dostępu do powiadomień o znaczeniu krytycznym.

LOW_POWER_EXCEPTIONS

Identyfikator zmiany: 168936375
Stan domyślny: włączony w przypadku aplikacji kierowanych na Androida 12 (poziom API 31) lub nowszy.

W przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) lub nowszego wszystkie obiekty LocationRequest oznaczone jako wyjątki o małej mocy, jeśli wywołujące nie mają uprawnienia LOCATION_HARDWARE, zamiast dyskretnie pomijać część żądania o małej mocy.

MISSING_EXPORTED_FLAG

Identyfikator zmiany: 150232615
Stan domyślny: włączony w przypadku aplikacji kierowanych na Androida 12 (poziom API 31) lub nowszy.

W przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) lub nowszego atrybut android:exported musi mieć określoną wartość, gdy zdefiniowany jest filtr intencji.

Więcej informacji na temat tej zmiany znajdziesz w artykule Bezpieczniejszy eksport komponentów.

NATIVE_HEAP_POINTER_TAGGING_APP_ZYGOTE

Identyfikator zmiany: 207557677
Stan domyślny: włączony w przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 32) lub nowszy.

W przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 32) lub nowszego natywne alokacje stosu w procesie AppZygote oraz ich elementy podrzędne używają tagu niezerowego w najważniejszym bajcie.

Więcej informacji o tej zmianie znajdziesz w artykule Oznaczenie tagami.

NATIVE_HEAP_ZERO_INIT

Identyfikator zmiany: 178038272
Stan domyślny: wyłączone dla wszystkich aplikacji.

Włącz automatyczne rozpoczynanie bez inicjowania alokacji pamięci natywnej sterty.

NATIVE_MEMTAG_ASYNC

Identyfikator zmiany: 135772972
Stan domyślny: wyłączone dla wszystkich aplikacji.

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

NATIVE_MEMTAG_SYNC

Identyfikator zmiany: 177438394
Stan domyślny: wyłączone dla wszystkich aplikacji.

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

NEVER_SANDBOX_DISPLAY_APIS

Identyfikator zmiany: 184838306
Stan domyślny: wyłączone dla wszystkich aplikacji.

Gdy ta opcja jest włączona, zapobiega stosowaniu piaskownicy interfejsu Display API do aktywności letterbox lub SCM. Interfejsy Display API nadal będą dostarczać wartości graniczne obszaru DisplayArea.

Więcej informacji o tej zmianie znajdziesz w sekcji na temat zmian w działaniu Androida 12 w sekcji poświęconej wycofanym metodom wyświetlania.

NOTIFICATION_CANCELLATION_REASONS

Identyfikator zmiany: 175319604
Stan domyślny: włączony w przypadku aplikacji kierowanych na Androida 12 (poziom API 31) lub nowszy.

Umożliwia słuchaczom powiadomień poznawanie nowych, bardziej szczegółowych powodów anulowania.

NOTIFICATION_TRAMPOLINE_BLOCK

Identyfikator zmiany: 167676448
Stan domyślny: włączony w przypadku aplikacji kierowanych na Androida 12 (poziom API 31) lub nowszy.

Aby zwiększyć wydajność i wygodę użytkowników, aplikacje kierowane na Androida 12 nie mogą używać usług ani odbiorników jako trampolin.

Więcej informacji na temat tej zmiany znajdziesz w artykule Nie można tworzyć trampolin z poziomu usług ani odbiorników.

NULL_TELEPHONY_THROW_NO_CB

Identyfikator zmiany: 182185642
Stan domyślny: włączony w przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) lub nowszy.

Służy do sprawdzania, czy docelowa wersja pakietu SDK w bieżącym procesie to Android 12 (poziom interfejsu API 31) lub nowszy.

Ma zastosowanie do tych metod:

OVERRIDE_MIN_ASPECT_RATIO

Identyfikator zmiany: 174042980
Stan domyślny: wyłączone dla wszystkich aplikacji.

Ta zmiana decyduje o wszystkich zmianach, które wymuszają określony minimalny współczynnik proporcji. Włączenie tej zmiany umożliwia stosowanie tych minimalnych współczynników proporcji:

Gdy ta zmiana jest włączona w przypadku pakietu aplikacji, minimalny współczynnik proporcji podany w pliku manifestu zostanie zastąpiony najdłuższym włączonym współczynnikiem proporcji, chyba że wartość w pliku manifestu aplikacji jest wyższa.

OVERRIDE_MIN_ASPECT_RATIO_LARGE

Identyfikator zmiany: 180326787
Stan domyślny: wyłączone dla wszystkich aplikacji.

Gdy włączona jest też usługa OVERRIDE_MIN_ASPECT_RATIO, włączenie tej zmiany w pakiecie powoduje ustawienie minimalnego współczynnika proporcji aktywności na dużą wartość zdefiniowaną w OVERRIDE_MIN_ASPECT_RATIO_LARGE_VALUE.

OVERRIDE_MIN_ASPECT_RATIO_MEDIUM

Identyfikator zmiany: 180326845
Stan domyślny: wyłączone dla wszystkich aplikacji.

Gdy włączona jest też usługa OVERRIDE_MIN_ASPECT_RATIO, włączenie tej zmiany w pakiecie powoduje ustawienie minimalnego współczynnika proporcji aktywności na średnią wartość określoną w OVERRIDE_MIN_ASPECT_RATIO_MEDIUM_VALUE.

PENDING_INTENT_EXPLICIT_MUTABILITY_REQUIRED

Identyfikator zmiany: 160794467
Stan domyślny: włączony w przypadku aplikacji kierowanych na Androida 12 (poziom API 31) lub nowszy.

W przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) i nowsze wersje 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 artykule Intencje oczekujące muszą zadeklarować zmienność.

PREVENT_SETTING_PASSWORD_QUALITY_ON_PARENT

Identyfikator zmiany: 165573442
Stan domyślny: włączony w przypadku aplikacji kierowanych na Androida 12 (poziom API 31) lub nowszy.

Aplikacje administracyjne kierowane na Androida 12 (poziom interfejsu API 31) i nowsze nie mogą używać DevicePolicyManager.setPasswordQuality(ComponentName, int) do ustawiania jakości haseł w instancji DevicePolicyManager uzyskanej przez wywołanie DevicePolicyManager.getParentProfileInstance(ComponentName). Zamiast tego powinni oni używać zasady DevicePolicyManager.setRequiredPasswordComplexity(int) do ustawiania ogólnych wymagań dotyczących haseł na całym urządzeniu.

RATE_LIMIT_TOASTS

Identyfikator zmiany: 174840628
Stan domyślny: tej zmiany nie można przełączyć. Jest rejestrowane tylko przez platformę zgodności.

Umożliwia ograniczenie liczby wywołań funkcji Toast.show(), aby nie obciążać użytkownika zbyt dużą liczbą tostów w krótkim czasie. Próba wyświetlenia większej liczby tostów niż jest dozwolona w danym przedziale czasu spowoduje odrzucenie tego powiadomienia.

REQUIRE_EXACT_ALARM_PERMISSION

Identyfikator zmiany: 171306433
Stan domyślny: włączony w przypadku aplikacji kierowanych na Androida 12 (poziom API 31) lub nowszy.

W przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) lub nowszego aplikacje muszą mieć uprawnienie Manifest.permission.SCHEDULE_EXACT_ALARM, aby można było 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łączony w przypadku aplikacji kierowanych na Androida 12 (poziom API 31) lub nowszy.

W przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) lub nowszego aplikacje muszą mieć uprawnienie Manifest.permission.READ_PHONE_STATE, aby móc wywoływać metodę TelephonyCallback.ActiveDataSubscriptionIdListener.

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_CELL_INFO

Identyfikator zmiany: 184323934
Stan domyślny: włączony w przypadku aplikacji kierowanych na Androida 12 (poziom API 31) lub nowszy.

W przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) lub nowszego aplikacje muszą mieć uprawnienie Manifest.permission.READ_PHONE_STATE, aby móc wywoływać metodę TelephonyCallback.CellInfoListener.

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_DISPLAY_INFO

Identyfikator zmiany: 183164979
Stan domyślny: włączony w przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) lub nowszy.

W przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) lub nowszego aplikacje muszą mieć uprawnienie Manifest.permission.READ_PHONE_STATE, aby móc wywoływać metodę TelephonyCallback.DisplayInfoListener.

RESTRICT_ADB_BACKUP

Identyfikator zmiany: 171032338
Stan domyślny: włączony w przypadku aplikacji kierowanych na Androida 12 (poziom API 31) lub nowszy.

W przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) lub nowszego usługa adb backup jest automatycznie włączona dla aplikacji możliwych do debugowania (w przypadku elementów android:debuggable ma wartość true) i niedostępnych dla innych aplikacji.

RESTRICT_DOMAINS

Identyfikator zmiany: 175408749
Stan domyślny: włączony w przypadku aplikacji kierowanych na Androida 12 (poziom API 31) lub nowszy.

W przypadku aplikacji kierowanych na Androida 12 (poziom API 31) lub nowszego wymagana jest zaktualizowana forma interfejsu API do weryfikacji linków aplikacji. Ten wymóg oznacza, że aplikacja musi zadeklarować domeny w filtrze intencji, który obejmuje:

  • 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 poprzednich wersjach Androida funkcja Intent.CATEGORY_BROWSABLE nie była wymagana, a inne schematy były dozwolone, a ustawienie wartości autoVerify na true w dowolnym filtrze intencji powodowało udawanie, że wszystkie filtry intencji były ustawione na autoVerify="true".

SECURITY_EXCEPTION_ON_INVALID_ATTRIBUTION_TAG_CHANGE

Identyfikator zmiany: 151105954
Stan domyślny: włączony w przypadku aplikacji kierowanych na Androida 12 (poziom API 31) lub nowszy.

W przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) lub nowszego wymuszane jest, aby wszystkie żądania attributionTags wysyłane do elementów noteOp(String, int, String), noteProxyOp(String, String) i startOp(String, int, String) były zdefiniowane w pliku manifestu pakietu, który jest określony jako parametr metod.

Aby można było włączyć tę zmianę, trzeba włączyć tę zmianę 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łączony w przypadku aplikacji kierowanych na Androida 12 (poziom API 31) lub nowszy.

W przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) i nowsze włączone są najnowsze zmiany w SELinux. Wyłączenie tej zmiany w aplikacji kierowanej na Androida 12 (poziom interfejsu API 31) lub nowszego nie jest możliwe. Nie będzie to miało wpływu na aplikacje, które używają współdzielonego identyfikatora użytkownika.

SETTINGS_API_V2

Identyfikator zmiany: 178111421
Stan domyślny: włączony dla wszystkich aplikacji.

W obecnej wersji testowej platformy nowy interfejs API preferencji użytkowników do weryfikowania domen oznaczonych jako autoVerify=true w filtrach intencji AndroidManifest.xml nie jest jeszcze zaimplementowany. Na razie możesz wyświetlić podgląd nowych preferencji użytkowników, włączając ten identyfikator zmiany i używając poleceń adb shell pm set-app-links-user-selection i podobnych.

USE_SHORT_FGS_USAGE_INTERACTION_TIME

Identyfikator zmiany: 183972877
Stan domyślny: włączony w przypadku aplikacji kierowanych na Androida 12 (poziom API 31) lub nowszy.

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