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 każdą zmianę działania powiązaną ze schematem zgodności w Androidzie 12 (poziom API 31). Użyj tej listy w połączeniu z opcjami programisty i poleceniami ADB, aby przetestować i debugować aplikację w ramach przygotowań do wprowadzenia jej na rynek i kierowania na Androida 12.

Oto niektóre czynności, które można wykonać za pomocą narzędzi platformy zgodności:

  • Przetestuj docelowe zmiany bez zmiany wartości targetSdkVersion w aplikacji. Za pomocą przełączników możesz wymusić włączenie określonych docelowych zmian działania i ocenić ich wpływ na istniejącą aplikację.
  • Skup się na testowaniu tylko konkretnych zmian. Zamiast wprowadzać wszystkie docelowe zmiany jednocześnie, przełączniki pozwalają wyłączyć wszystkie docelowe zmiany z wyjątkiem tych, które chcesz przetestować.
  • Zarządzanie przełącznikami w narzędziu adb Za pomocą poleceń adb możesz włączać i wyłączać przełączane zmiany w automatycznym środowisku testowym.
  • Szybsze debugowanie przy użyciu standardowych identyfikatorów zmian Każda z możliwością przełączania zmian ma unikalny identyfikator i nazwę, które pozwalają 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 Narzędzia platformy zgodności.

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

Lista w tej sekcji opisuje wszystkie zmiany w działaniu uwzględnione w platformie zgodności w Androidzie 12.

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

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

ALWAYS_SANDBOX_DISPLAY_APIS

Identyfikator zmiany: 185004937
Stan domyślny: wyłączony w przypadku wszystkich aplikacji.

Gdy ta opcja jest włączona, interfejs Display API jest objęty piaskownicą interfejsu Display API do pakietu niezależnie od trybu okna. Interfejsy Display API zawsze podają granice aplikacji.

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

AUTOFILL_NON_TEXT_REQUIRES_ON_RECEIVE_CONTENT_LISTENER

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

Od Androida 12 platforma może wyświetlać sugestie inne niż tekstowe (np. obrazy) przy użyciu rozszerzonej platformy autouzupełniania (patrz Usługi autouzupełniania). Aby aplikacja mogła obsługiwać te sugestie, musi normalnie implementować interfejs API OnReceiveContentListener.

Aby usprawnić wdrożenie tego interfejsu API w aplikacjach, które miały wcześniej zaimplementowany interfejs API InputConnection.commitContent(InputContentInfo, int, Bundle), używamy go jako kreacji zastępczej, jeśli aplikacja OnReceiveContentListener nie została jeszcze zaimplementowana. Ta funkcja zastępcza jest włączona tylko w Androidzie 12 (poziom API 31). Ten identyfikator zmiany wyłącza działanie zastępcze, przez co aplikacje kierowane na Androida 12 (poziom interfejsu API 32) i nowszego muszą zaimplementować interfejs API OnReceiveContentListener, aby akceptować sugestie inne niż tekstowe.

BLOCK_FLAG_SLIPPERY

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

W przypadku aplikacji działających na Androidzie 12 (poziom interfejsu API 31) sprawdza, czy pole FLAG_SLIPPERY jest używane w żadnych oknach w aplikacji. Spodziewamy się, że ta flaga będzie prawdopodobnie używana tylko przez komponenty systemu, ponieważ jest to nieobsługiwane pole. W takiej sytuacji dostęp do tych treści będzie ograniczony.

BLOCK_GPS_STATUS_USAGE

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

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

BLOCK_IMMUTABLE_PENDING_INTENTS

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

W przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) i nowszego, stałe PendingIntentobiekty przekazywane do interfejsów API lokalizacji generują IllegalArgumentException.

BLOCK_PENDING_INTENT_SYSTEM_API_USAGE

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

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

BLOCK_UNTRUSTED_TOUCHES

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

Aby zapewnić bezpieczeństwo systemu i wygodę użytkowników, Android 12 blokuje aplikacjom zdarzenia dotyku, w przypadku których nakładka blokuje aplikację w niebezpieczny sposób.

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

CALL_ACTIVITY_RESULT_BEFORE_RESUME

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

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

CAMERA_MIC_INDICATORS_NOT_PRESENT

Identyfikator zmiany: 162547999
Stan domyślny: wyłączona w przypadku wszystkich aplikacji.

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

CANNOT_INSTALL_WITH_BAD_PERMISSION_GROUPS

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

W przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 32) i nowsze wersje menedżer pakietów nie zainstaluje pakietu z nieprawidłowymi grupami uprawnień. Grupy uprawnień powinny być współdzielone tylko przez aplikacje, które współdzielą certyfikat. Jeśli uprawnienie należy do grupy, ta grupa musi być zdefiniowana.

CHANGE_ID_AUTH_STATE_DENIED

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

W przypadku aplikacji klienckich kierowanych na Androida 12 (poziom interfejsu API 31) i nowsze wersje, gdy znajdować się będą w stanie odmowy autoryzacji i próbują wysłać wiadomość do nanoaplikacji, zgłaszany jest żądanie SecurityException.

CHANGE_ID_SAMPLING_RATE_SENSORS_PERMISSION

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

W przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) i nowsze wersje, gdy nie mają one uprawnienia HIGH_SAMPLING_RATE_SENSORS, są uruchamiane w trybie debugowania i żądają częstotliwości próbkowania powyżej 200 Hz, zgłaszana jest właściwość SecurityException.

DELIVER_HISTORICAL_LOCATIONS

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

W przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) i nowsze wersje klienty lokalizacji mogą w niektórych przypadkach otrzymywać dane historyczne o lokalizacjach sprzed bieżącej daty.

DISPLAY_INFO_NR_ADVANCED_SUPPORTED

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

Aplikacje kierowane na Androida 12 (poziom interfejsu API 31) i nowsze wersje zapewniają zgodność wsteczną w przypadku zmian w TelephonyDisplayInfo.

DISPLAY_MODE_RETURNS_PHYSICAL_REFRESH_RATE

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

W przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) i nowsze wersje, platforma może zmniejszyć liczbę klatek w aplikacji do dzielnika częstotliwości odświeżania, jeśli jest to bardziej preferowane (na przykład gdy aplikacja wywołuje funkcję Surface.setFrameRate(float, int)). W przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) i przy zmniejszonej liczbie klatek aplikacja może wywoływać Choreographer.postFrameCallback(Choreographer.FrameCallback) wywołania zwrotnego i prężania wstecznego. Aplikacje korzystają z zasad Display.getRefreshRate() i Display.Mode.getRefreshRate(), by określić częstotliwość odświeżania ekranu. Aby aplikacje mogły prawidłowo ustawić częstotliwość odświeżania, Display.getRefreshRate() zawsze zwraca liczbę klatek aplikacji, a nie częstotliwość odświeżania fizycznego ekranu. Display.Mode.getRefreshRate() zwraca liczbę klatek aplikacji skompilowaną do poprzedniej wersji, a po skompilowaniu od Androida 12 (poziom interfejsu API 31) zwraca częstotliwość odświeżania fizycznego wyświetlacza.

DOWNSCALED

Identyfikator zmiany: 168419799
Stan domyślny: wyłączony w przypadku wszystkich aplikacji.

Ta zmiana umożliwia obserwowanie wszystkich zmian skalowania buforów w buforze aplikacji. Włączenie tej zmiany umożliwia zastosowanie tych współczynników skalowania:

Gdy ta zmiana zostanie włączona dla pakietu aplikacji, rozmiar aplikacji zostanie wymuszony na najwyższym, włączonym współczynniku skalowania. Na przykład wartość 80% jest używana, jeśli włączone jest zarówno 80%, jak i 70% (DOWNSCALE_80 i DOWNSCALE_70).

DOWNSCALE_30

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

Jeśli dodatkowo włączona jest opcja DOWNSCALED, włączenie tej zmiany w pakiecie wymusza na aplikacji zakładanie, że działa na ekranie, który ma 30% rozdzielczości pionowej i poziomej rzeczywistego wyświetlacza.

DOWNSCALE_35

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

Jeśli dodatkowo włączona jest opcja DOWNSCALED, włączenie tej zmiany w pakiecie wymusza na aplikacji zakładanie, że działa na ekranie, który ma 35% rozdzielczości pionowej i poziomej rzeczywistego wyświetlacza.

DOWNSCALE_40

Identyfikator zmiany: 189970038
Stan domyślny: wyłączony w przypadku wszystkich aplikacji.

Jeśli dodatkowo włączona jest opcja DOWNSCALED, włączenie tej zmiany w pakiecie wymusza na aplikacji zakładanie, że działa na wyświetlaczu, który ma 40% rozdzielczości obrazu w pionie i poziomie rzeczywistego ekranu.

DOWNSCALE_45

Identyfikator zmiany: 189969782
Stan domyślny: wyłączona w przypadku wszystkich aplikacji.

Jeśli dodatkowo włączona jest opcja DOWNSCALED, włączenie tej zmiany w pakiecie wymusza na aplikacji zakładanie, że działa na ekranie, który ma 45% rozdzielczości pionowej i poziomej rzeczywistego wyświetlacza.

DOWNSCALE_50

Identyfikator zmiany: 176926741
Stan domyślny: wyłączony w przypadku wszystkich aplikacji.

Jeśli dodatkowo włączona jest opcja DOWNSCALED, włączenie tej zmiany w pakiecie wymusza na aplikacji zakładanie, że działa na wyświetlaczu mającym 50% rozdzielczości pionowego i poziomego ekranu rzeczywistego.

DOWNSCALE_55

Identyfikator zmiany: 189970036
Stan domyślny: wyłączony w przypadku wszystkich aplikacji.

Jeśli dodatkowo włączona jest opcja DOWNSCALED, włączenie tej zmiany w pakiecie wymusza na aplikacji zakładanie, że działa na ekranie, który ma 55% rozdzielczości obrazu w pionie i poziomie rzeczywistego ekranu.

DOWNSCALE_60

Identyfikator zmiany: 176926771
Stan domyślny: wyłączony w przypadku wszystkich aplikacji.

Jeśli dodatkowo włączona jest opcja DOWNSCALED, włączenie tej zmiany w pakiecie wymusza na aplikacji zakładanie, że działa na wyświetlaczu, który ma 60% rozdzielczości obrazu w pionie i poziomie rzeczywistego wyświetlacza.

DOWNSCALE_65

Identyfikator zmiany: 189969744
Stan domyślny: wyłączona w przypadku wszystkich aplikacji.

Jeśli dodatkowo włączona jest opcja DOWNSCALED, włączenie tej zmiany w pakiecie wymusza na aplikacji zakładanie, że działa na ekranie, który ma 65% rozdzielczości obrazu w pionie i poziomie rzeczywistego wyświetlacza.

DOWNSCALE_70

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

Jeśli dodatkowo włączona jest opcja DOWNSCALED, włączenie tej zmiany w pakiecie wymusza na aplikacji zakładanie, że działa na ekranie, który ma 70% rozdzielczości pionowej i poziomej rzeczywistego wyświetlacza.

DOWNSCALE_75

Identyfikator zmiany: 189969779
Stan domyślny: wyłączony w przypadku wszystkich aplikacji.

Jeśli dodatkowo włączona jest opcja DOWNSCALED, włączenie tej zmiany w pakiecie wymusza na aplikacji zakładanie, że działa na ekranie, który ma 75% rozdzielczości pionowego i poziomego ekranu rzeczywistego.

DOWNSCALE_80

Identyfikator zmiany: 176926753
Stan domyślny: wyłączony w przypadku wszystkich aplikacji.

Jeśli dodatkowo włączona jest opcja DOWNSCALED, włączenie tej zmiany w pakiecie wymusza na aplikacji zakładanie, że działa na wyświetlaczu, który ma 80% rozdzielczości rzeczywistego wyświetlacza w pionie i poziomie.

DOWNSCALE_85

Identyfikator zmiany: 189969734
Stan domyślny: wyłączona w przypadku wszystkich aplikacji.

Jeśli dodatkowo włączona jest opcja DOWNSCALED, włączenie tej zmiany w pakiecie wymusza na aplikacji zakładanie, że działa na ekranie, który ma 85% rozdzielczości pionowego i poziomego ekranu rzeczywistego.

DOWNSCALE_90

Identyfikator zmiany: 182811243
Stan domyślny: wyłączony w przypadku wszystkich aplikacji.

Jeśli dodatkowo włączona jest opcja DOWNSCALED, włączenie tej zmiany w pakiecie wymusza na aplikacji zakładanie, że działa na ekranie, który ma 90% rozdzielczości pionowego i poziomego ekranu rzeczywistego.

DO_NOT_DOWNSCALE_TO_1080P_ON_TV

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

Aplikacje na Androida TV kierowane na Androida 12 (poziom interfejsu API 31) i nowsze powinny obsługiwać wszystkie rozmiary okna, w tym te większe niż 1080p. Aplikacje kierowane na wcześniejsze wersje Androida nie spodziewają się, że otrzymają system Windows w rozdzielczości większej niż 1080p, dlatego w razie potrzeby zostanie zmniejszona do 1080p.

DROP_CLOSE_SYSTEM_DIALOGS

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

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

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łączona w przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) lub nowszego.

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

ENABLE_DEFERRED_SCAN

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

Włącz tę opcję, aby opóźnić skanowanie wywoływane w ramach funkcji MediaProvider#update().

ENABLE_GET_CALL_STATE_PERMISSION_PROTECTION

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

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

ENABLE_GET_PHONE_ACCOUNT_PERMISSION_PROTECTION

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

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

ENABLE_INCLUDE_ALL_VOLUMES

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

Włącz tę opcję, aby uwzględnić wiersze bazy danych zawierające pliki z niedawno odinstalowanego woluminu w: MediaProvider#query.

ENABLE_RAW_MANAGE_EXTERNAL_STORAGE_ACCESS

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

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łączona w przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) lub nowszego.

W przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) i nowsze wersje wszystkie alarmy nieprecyzyjne muszą mieć minimalny rozmiar okna, co zazwyczaj trwa kilka minut. Praktycznie 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 nieprecyzyjnych z krótszymi oknami okna te zostaną wydłużone przez system.

ENFORCE_NATIVE_SHARED_LIBRARY_DEPENDENCIES

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

Aplikacje kierowane na Androida 12 (poziom interfejsu API 31) i nowsze muszą zadeklarować zależności od publicznych natywnych bibliotek udostępnionych zdefiniowanych przez producenta urządzenia za pomocą tagu uses-native-library w dokumencie 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. Za pomocą atrybutu android:required w tagu możesz określić zależność jako opcjonalną. W takim przypadku niespełnienie tej zależności nie spowoduje przerwania instalacji.

Po zainstalowaniu aplikacji udostępniane są tylko natywne biblioteki udostępnione określone w pliku manifestu aplikacji. Wywołanie dlopen w natywnej bibliotece udostępnionej, która nie występuje w manifeście aplikacji, zakończy się niepowodzeniem, nawet jeśli rzeczywiście istnieje na urządzeniu.

ENFORCE_STRICT_QUERY_BUILDER

Identyfikator zmiany: 143231523
Stan domyślny: wyłączony w przypadku 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łączona w przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) lub nowszego.

W przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) i nowsze uprawnienia określa, kiedy aplikacje mogą uruchamiać usługi na pierwszym planie, gdy działają w tle.

FGS_START_EXCEPTION_CHANGE_ID

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

W przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) i nowszych, system może wysyłać żądanie IllegalStateException, jeśli aplikacja próbuje uruchomić usługę na pierwszym planie, gdy działa w tle.

FINISH_INPUT_NO_FALLBACK_CONNECTION

Identyfikator zmiany: 156215187
Stan domyślny: wyłączony w przypadku wszystkich aplikacji.

W przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) i nowszych wykonaj procedurę InputConnection, gdy urządzenie zmieni się na non-interactive.

Jeśli ta opcja zostanie włączona przez bieżącą zasadę input method, obecne połączenie wejściowe będzie miało wartość finished, gdy urządzenia przestaną być interaktywne.

Jeśli jej nie włączysz, obecne połączenie wejściowe zostanie dyskretnie dezaktywowane, gdy urządzenia przestaną być interaktywne, a gdy urządzenie znowu stanie się interaktywne, zostanie wysłana para onFinishInput() i onStartInput().

FORCE_DISABLE_HEVC_SUPPORT

Identyfikator zmiany: 174227820
Stan domyślny: wyłączony w przypadku wszystkich aplikacji.

Wymuszaj wyłączenie obsługi multimediów HEVC przez aplikację. Aplikacje powinny zadeklarować w pliku manifestu obsługiwane możliwości związane z multimediami, ale za pomocą tej flagi można wymusić brak obsługi HEVC, dlatego wymuszanie transkodowania podczas uzyskiwania dostępu do multimediów zakodowanych w HEVC. Ustawienie tej flagi zastępuje wszystkie domyślne ustawienia systemu operacyjnego dla aplikacji. 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łączony w przypadku wszystkich aplikacji.

Wymuś włączenie obsługi funkcji multimediów HEVC w aplikacji. Aplikacje powinny zadeklarować obsługiwane możliwości multimediów w pliku manifestu, ale tej flagi można użyć do wymuszenia w aplikacji obsługi HEVC, dzięki czemu unikniesz transkodowania podczas korzystania z multimediów zakodowanych w HEVC. Ustawienie tej flagi zastępuje wszystkie domyślne ustawienia na poziomie systemu operacyjnego dla aplikacji. 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 zasada FORCE_DISABLE_HEVC_SUPPORT, system operacyjny ignoruje obie flagi.

FORCE_NON_RESIZE_APP

Identyfikator zmiany: 181136395
Stan domyślny: wyłączony w przypadku wszystkich aplikacji.

Wymusza, aby w pakietach, do których jest stosowany, nie można było zmieniać ich rozmiaru.

FORCE_RESIZE_APP

Identyfikator zmiany: 174042936
Stan domyślny: wyłączony w przypadku wszystkich aplikacji.

Wymusza zmianę rozmiaru pakietów, do których jest stosowany. Zmiana rozmiaru jest dozwolona tylko w trybie wyświetlania okien na pełnym ekranie. Aplikacja nie wymusza jednak przejścia w tryb wielu okien z możliwością zmiany rozmiaru.

HIDE_PROP_ICUBINARY_DATA_PATH

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

W przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) i nowsze uprawnienia 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łączona w przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) lub nowszego.

W przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) i nowszych, w przypadku aplikacji podczas migracji między urządzeniami (D2D) parametr android:allowBackup jest ignorowany.

IGNORE_FULL_BACKUP_CONTENT_IN_D2D

Identyfikator zmiany: 180523564
Stan domyślny: włączona w przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 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ą atrybutu android:fullBackupContent są ignorowane podczas przesyłania danych między urządzeniami.

IME_AUTOFILL_DEFAULT_SUPPORTED_LOCALES_IS_EMPTY

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

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

IS_BACKUP_SERVICE_ACTIVE_ENFORCE_PERMISSION_IN_SERVICE

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

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

KEYSTORE_OPERATION_CREATION_MAY_FAIL

Identyfikator zmiany: 169897160
Stan domyślny: wyłączony w przypadku wszystkich aplikacji.

Gdy ta opcja jest włączona, tworzenie operacji magazynu kluczy może się nie powieść zgodnie z nową strategią przycinania. Magazyn kluczy działał z założeniem, że zawsze kończy się tworzenie operacji kryptograficznych. Backend KeyMint ma jednak tylko ograniczoną liczbę przedziałów operacji.

Aby zachować wygląd „nieskończonych” przedziałów operacji, demon magazynu kluczy przycinałby najmniej ostatnio używane operacje, jeśli nie było dostępnego przedziału na operacje. W efekcie prawidłowe działania mogą zostać przerwane przedwcześnie. Dzięki temu magazyn AndroidKeystore został otwarty na ataki typu DoS i niezamierzoną blokadę Livelock. Jeśli na przykład w wyniku optymalizacji zarządzania energią kilka aplikacji wybudziło się w tym samym czasie i próbowało przeprowadzić operacje kryptograficzne, zaczynają one zakończyć się nawzajem bez postępów.

Aby wyeliminować blokady ruchu i zniechęcić do prób ataków DoS, zmieniliśmy strategię przycinania. Preferowane są klienty, które przez krótki czas używają niewielkiej liczby przedziałów operacji. W efekcie pojedyncze operacje, które nie pozostają nieaktywne przez ponad 5 sekund, są prawie zawsze realizowane bez ograniczeń przez strategię przycinania. Nadal możesz wykonać pewne operacje związane z szyfrowaniem systemu plików, które mogą nawet je wyciąć. Jednak takie przypadki są bardzo rzadkie. W ramach efektu ubocznego tej nowej strategii przycinania tworzenie może się teraz zakończyć niepowodzeniem, jeśli klient ma mniejszą moc przycinania niż wszystkie istniejące operacje.

Strategia przycinania: aby znaleźć odpowiednią propozycję, obliczamy malus dla elementu wywołującego i każdej istniejącej operacji. Argument malus to odwrotność siły przycinania (wywołującej) lub odporności na przycinanie (istniejącej operacji). Aby element wywołujący mógł przyciąć operację, musi znaleźć operację z błędem o wyższym priorytecie. Więcej informacji o strategii przycinania znajdziesz w opisie wdrożenia operation.rs. W Androidzie 11 (poziom interfejsu API 30) i starszym KeyStore2 sonduje demona magazynu kluczy w poszukiwaniu wolnego przedziału czasu na operację. W przypadku aplikacji kierowanych na Androida 11 (poziom interfejsu API 30) i starszych nadal będzie to wyglądało tak, jakby inicjowanie obiektu podpisu było możliwe, jednak wykonanie tej operacji może potrwać dłużej. Wszystkie wersje Androida korzystają z bardziej sprawiedliwego harmonogramu przedziałów operacji i mają większą szansę na pomyślne zakończenie operacji.

LOCK_DOWN_CLOSE_SYSTEM_DIALOGS

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

W przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) i nowsze wersje nie można wysłać elementu Intent.ACTION_CLOSE_SYSTEM_DIALOGS, chyba że aplikacja ma też uprawnienie android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS. Pamiętaj, że jest to bardziej restrykcyjna wersja #DROP_CLOSE_SYSTEM_DIALOGS, w której aplikacja przestanie wysyłać intencję Intent.ACTION_CLOSE_SYSTEM_DIALOGS po rozpoczęciu kierowania na Androida 12 (poziom interfejsu API 31) lub nowszego.

LOCK_DOWN_COLLAPSE_STATUS_BAR

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

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

LOW_POWER_EXCEPTIONS

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

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

MISSING_EXPORTED_FLAG

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

W przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) i nowsze wersje za każdym razem, gdy zdefiniowany jest filtr intencji, należy podać jawną wartość atrybutu android:exported.

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łączona w przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 32) lub nowszego.

W przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 32) i nowsze wersje natywne alokacji sterty w procesie AppZygote i jego elementach podrzędnych używają tagu o najwyższym znaczeniu, który jest inny niż 0.

Więcej informacji o tej zmianie znajdziesz w artykule Otagowane wskaźniki.

NATIVE_HEAP_ZERO_INIT

Identyfikator zmiany: 178038272
Stan domyślny: wyłączony w przypadku wszystkich aplikacji.

Włącz automatyczne inicjowanie bez inicjowania natywnych alokacji pamięci sterty.

NATIVE_MEMTAG_ASYNC

Identyfikator zmiany: 135772972
Stan domyślny: wyłączona w przypadku wszystkich aplikacji.

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

NATIVE_MEMTAG_SYNC

Identyfikator zmiany: 177438394
Stan domyślny: wyłączony w przypadku 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 rozszerzenie ARM Memory Tagging Extension (MTE). Jeśli włączona jest 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łączony w przypadku wszystkich aplikacji.

Gdy ta opcja jest włączona, nie można stosować piaskownicy Display API do działań typu letterbox ani SCM. Interfejsy Display API nadal będą określać granice DisplayArea.

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

NOTIFICATION_CANCELLATION_REASONS

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

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

NOTIFICATION_TRAMPOLINE_BLOCK

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

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

Aby dowiedzieć się więcej o tej zmianie, przeczytaj artykuł Trampki z powiadomieniami nie mogą być tworzone za pomocą usług ani odbiorników.

NULL_TELEPHONY_THROW_NO_CB

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

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łączony w przypadku wszystkich aplikacji.

Ta zmiana to strażnik wszystkich zmian, które wymuszają użycie danego minimalnego współczynnika proporcji. Włączenie tej zmiany umożliwia stosowanie tych minimalnych formatów obrazu:

Po włączeniu tej zmiany w przypadku pakietu aplikacji minimalny współczynnik proporcji podany w pliku manifestu aplikacji zostanie zastąpiony największym włączonym współczynnikiem, chyba że wartość w pliku manifestu aplikacji jest wyższa.

OVERRIDE_MIN_ASPECT_RATIO_LARGE

Identyfikator zmiany: 180326787
Stan domyślny: wyłączony w przypadku wszystkich aplikacji.

Jeśli dodatkowo włączona jest opcja OVERRIDE_MIN_ASPECT_RATIO, włączenie tej zmiany w pakiecie powoduje ustawienie minimalnego współczynnika proporcji działania na dużą wartość zdefiniowaną przez OVERRIDE_MIN_ASPECT_RATIO_LARGE_VALUE.

OVERRIDE_MIN_ASPECT_RATIO_MEDIUM

Identyfikator zmiany: 180326845
Stan domyślny: wyłączony w przypadku wszystkich aplikacji.

Jeśli dodatkowo włączona jest opcja OVERRIDE_MIN_ASPECT_RATIO, włączenie tej zmiany dla pakietu powoduje ustawienie minimalnego współczynnika proporcji działania na średnią wartość określoną przez OVERRIDE_MIN_ASPECT_RATIO_MEDIUM_VALUE.

PENDING_INTENT_EXPLICIT_MUTABILITY_REQUIRED

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

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

PREVENT_SETTING_PASSWORD_QUALITY_ON_PARENT

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

Aplikacje administracyjne kierowane na Androida 12 (poziom interfejsu API 31) i nowsze wersje nie mogą używać interfejsu DevicePolicyManager.setPasswordQuality(ComponentName, int) do ustawiania jakości haseł w instancji DevicePolicyManager uzyskanych przez wywołanie metody DevicePolicyManager.getParentProfileInstance(ComponentName). Zamiast tego powinni używać funkcji DevicePolicyManager.setRequiredPasswordComplexity(int), aby określić szczegółowe 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 rejestrowany tylko przez platformę zgodności.

Umożliwia ograniczenie liczby wywołań Toast.show(), aby zapobiec nadmiernemu obciążeniu użytkownika zbyt dużą liczbą powiadomień w ograniczonym czasie. Każda próba wyświetlenia większej liczby powiadomień niż dozwolona w określonym przedziale czasu powoduje odrzucenie komunikatu.

REQUIRE_EXACT_ALARM_PERMISSION

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

W przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) i nowsze wersje aplikacje muszą mieć uprawnienie Manifest.permission.SCHEDULE_EXACT_ALARM, aby używać interfejsów API do ustawiania alarmów precyzyjnych, takich jak setExactAndAllowWhileIdle(int, long, PendingIntent) czy setAlarmClock(AlarmClockInfo, PendingIntent).

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_ACTIVE_DATA_SUB_ID

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

Aplikacje kierowane na Androida 12 (poziom interfejsu API 31) i nowsze wersje muszą mieć uprawnienie Manifest.permission.READ_PHONE_STATE, aby móc wywołać TelephonyCallback.ActiveDataSubscriptionIdListener.

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_CELL_INFO

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

Aplikacje kierowane na Androida 12 (poziom interfejsu API 31) i nowsze wersje muszą mieć uprawnienie Manifest.permission.READ_PHONE_STATE, aby móc wywołać TelephonyCallback.CellInfoListener.

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_DISPLAY_INFO

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

Aplikacje kierowane na Androida 12 (poziom interfejsu API 31) i nowsze wersje muszą mieć uprawnienie Manifest.permission.READ_PHONE_STATE, aby móc wywołać TelephonyCallback.DisplayInfoListener.

RESTRICT_ADB_BACKUP

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

W przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) i nowsze wersje: zasada adb backup jest automatycznie włączona dla aplikacji działających jako możliwa do debugowania (wartość android:debuggable ma wartość true) i nie jest dostępna dla żadnych innych aplikacji.

RESTRICT_DOMAINS

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

W przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) i nowsze wersje wymagany jest zaktualizowany interfejs API do weryfikacji linków 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 i/lub IntentFilter.SCHEME_HTTPS, bez innych schematów

W poprzednich wersjach Androida funkcja Intent.CATEGORY_BROWSABLE nie była wymagana, inne schematy były dozwolone, a ustawienie autoVerify na true w dowolnym filtrze intencji powodowałoby sugerowanie, że wszystkie filtry intencji były ustawione na autoVerify="true".

SECURITY_EXCEPTION_ON_INVALID_ATTRIBUTION_TAG_CHANGE

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

W przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) i nowszego wymusza, aby wszystkie attributionTags wysyłane do 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 wprowadzić tę zmianę, musi ona być 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łączona w przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) lub nowszego.

W przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) i nowsze wersje można włączyć najnowsze zmiany SELinux. Wyłączenie tej zmiany w przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) lub nowszego jest niedozwolone. Nie ma wpływu na aplikacje, które korzystają z udostępnianego identyfikatora użytkownika.

SETTINGS_API_V2

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

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

USE_SHORT_FGS_USAGE_INTERACTION_TIME

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

W przypadku aplikacji kierowanych na Androida 12 (poziom interfejsu API 31) i nowszego określ, czy używany ma być krótszy czas oczekiwania, zanim podniesie on zasobnik gotowości do ACTIVE, gdy aplikacje uruchamiają usługę na pierwszym planie.