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

Na tej stronie opisujemy każdą zmianę zachowania wpływającej na aplikację, która została dodana do systemu sprawdzania zgodności w Androidzie 11 (poziom interfejsu API 30). Używaj tej listy w połączeniu z opcjami programisty i poleceniami ADB, aby testować i debugować aplikację podczas przygotowywania jej do działania na Androidzie 11.

ADD_CONTENT_OBSERVER_FLAGS

Identyfikator zmiany: 150939131

Stan domyślny: włączone w przypadku aplikacji kierowanych na Androida 11 (poziom API 30) lub nowszego.

W przypadku aplikacji kierowanych na Androida 11 dostępny jest nowy publiczny interfejs API onChange(boolean, Uri, int), który zawiera argument liczby całkowitej flags.

Ta nowa metoda jest publiczną alternatywą dla aplikacji, które używają przeciążonej metody onChange(), która nie jest częścią pakietu SDK i zawiera argument liczby całkowitej userId.

ADMIN_APP_PASSWORD_COMPLEXITY

Identyfikator zmiany: 123562444

Stan domyślny: włączone w przypadku aplikacji kierowanych na Androida 11 (poziom API 30) lub nowszego.

W przypadku aplikacji administratora kierowanych na Androida 11 zgłaszaj błąd, gdy aplikacja ustawia wymaganie dotyczące hasła, które nie jest istotne dla aktualnie przypisanej jakości hasła. Jeśli na przykład jakość hasła jest ustawiona na DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED, aplikacja nie może ustawić minimalnej długości hasła. W takim przypadku przed próbą ustawienia minimalnej długości hasła aplikacja powinna najpierw wywołać metodę setPasswordQuality(), a dopiero potem metodę setPasswordMinimumLength().

Dodatkowo, gdy aplikacja administratora kierowana na Androida 11 obniża jakość hasła, wszystkie dotychczasowe wymagania dotyczące hasła, które nie mają już zastosowania, są resetowane do wartości domyślnych.

APP_DATA_DIRECTORY_ISOLATION

Identyfikator zmiany: 143937733

Stan domyślny: włączone w przypadku aplikacji kierowanych na Androida 11 (poziom API 30) lub nowszego.

Aplikacje kierowane na Androida 11 nie mają już dostępu do plików w prywatnych katalogach danych żadnej aplikacji, niezależnie od wersji pakietu SDK, na którą jest kierowana inna aplikacja.

Więcej informacji znajdziesz w artykule Dostęp do katalogów prywatnych.

APN_READING_PERMISSION_CHANGE_ID

Identyfikator zmiany: 124107808

Stan domyślny: włączone w przypadku aplikacji kierowanych na Androida 11 (poziom API 30) lub nowszego.

W przypadku aplikacji kierowanych na Androida 11 dostęp do bazy danych APN wymaga teraz uprawnienia Manifest.permission.WRITE_APN_SETTINGS.

Więcej informacji o tej zmianie znajdziesz w artykule Ograniczony dostęp do odczytu bazy danych APN.

BACKGROUND_RATIONALE_CHANGE_ID

Identyfikator zmiany: 147316723

Stan domyślny: włączone w przypadku aplikacji kierowanych na Androida 11 (poziom API 30) lub nowszego.

Aplikacje muszą teraz podawać prawidłowe uzasadnienie za każdym razem, gdy proszą o dostęp do lokalizacji urządzenia w tle.

Więcej informacji o tej zmianie znajdziesz w przewodniku na temat dostępu do lokalizacji w tle w Androidzie 11, w którym omawiamy zmiany dotyczące prywatności związane z lokalizacją w Androidzie 11.

CALLBACK_ON_CLEAR_CHANGE

Identyfikator zmiany: 119147584

Stan domyślny: włączone w przypadku aplikacji kierowanych na Androida 11 (poziom API 30) lub nowszego.

Za każdym razem, gdy wywoływana jest funkcja Editor.clear, wywołanie zwrotne jest teraz wykonywane do OnSharedPreferenceChangeListener.onSharedPreferenceChanged z kluczem null.

Więcej informacji o tej zmianie znajdziesz w artykule Zmiany wywołań zwrotnych w OnSharedPreferenceChangeListener.

CALLBACK_ON_MORE_ERROR_CODE_CHANGE

Identyfikator zmiany: 130595455

Stan domyślny: włączone w przypadku aplikacji kierowanych na Androida 11 (poziom API 30) lub nowszego.

Kody błędów zostały rozszerzone o updateAvailableNetworks(List, Executor, Consumer) i setPreferredOpportunisticDataSubscription(int, boolean, Executor, Consumer).

CALL_BACK_ON_CHANGED_LISTENER_WITH_SWITCHED_OP_CHANGE

Identyfikator zmiany: 148180766

Stan domyślny: włączone w przypadku aplikacji kierowanych na Androida 11 (poziom API 30) lub nowszego.

To niewielka zmiana w działaniu startWatchingMode(String, String, AppOpsManager.OnOpChangedListener). Przed tą zmianą system wywoływał funkcję zwrotną dla przełączonej operacji. Po zmianie system będzie wywoływać funkcję zwrotną dla faktycznie żądanej operacji lub wszystkich przełączonych operacji, jeśli nie określono żadnej operacji.

CAMERA_MICROPHONE_CAPABILITY_CHANGE_ID

Identyfikator zmiany: 136219221

Stan domyślny: włączone w przypadku aplikacji kierowanych na Androida 11 (poziom API 30) lub nowszego.

W przypadku aplikacji kierowanych na Androida 11 usługi działające na pierwszym planie mają dostęp do aparatu i mikrofonu tylko podczas używania, gdy w pliku manifestu skonfigurowano odpowiednio R.attr.foregroundServiceType jako ServiceInfo.FOREGROUND_SERVICE_TYPE_CAMERA i ServiceInfo.FOREGROUND_SERVICE_TYPE_MICROPHONE. W starszych wersjach Androida usługi na pierwszym planie automatycznie otrzymywały dostęp do aparatu i mikrofonu.

Więcej informacji o tej zmianie znajdziesz w artykule o rodzajach usług działających na pierwszym planie w Androidzie 11.

CHANGE_BACKGROUND_CUSTOM_TOAST_BLOCK

Identyfikator zmiany: 128611929

Stan domyślny: włączone w przypadku aplikacji kierowanych na Androida 11 (poziom API 30) lub nowszego.

Aplikacje nie mogą już wyświetlać niestandardowych powiadomień w tle. Aplikacje mogą jednak nadal wyświetlać wyskakujące powiadomienia w tle, korzystając z metody Toast.makeText(Context, CharSequence, int) i jej wariantów.

Więcej informacji o tej zmianie znajdziesz w artykule Niestandardowe widoki powiadomień są blokowane.

CHANGE_RESTRICT_SAW_INTENT

Identyfikator zmiany: 135920175

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

Intencje korzystające z działania android.settings.MANAGE_APP_OVERLAY_PERMISSION i schematu identyfikatora URI danych package nie kierują już użytkownika na ekran aplikacji, na którym można zarządzać powiązanymi uprawnieniami. Zamiast tego użytkownik jest przekierowywany na ekran, na którym może zarządzać wszystkimi aplikacjami, które poprosiły o uprawnienia.

CHANGE_TEXT_TOASTS_IN_THE_SYSTEM

Identyfikator zmiany: 147798919

Stan domyślny: włączone w przypadku aplikacji kierowanych na Androida 11 (poziom API 30) lub nowszego.

Powiadomienia tekstowe są teraz renderowane przez interfejs systemu, a nie w aplikacji. Zapobiega to obchodzeniu przez aplikacje ograniczeń dotyczących publikowania niestandardowych powiadomień w tle.

DEFAULT_SCOPED_STORAGE

Identyfikator zmiany: 149924527

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

Wszystkie aplikacje kierowane na Androida 11 domyślnie korzystają teraz z wydzielonej pamięci i nie mogą już zrezygnować z tej funkcji.

Możesz jednak przetestować aplikację bez ograniczonego dostępu do miejsca na dane, niezależnie od docelowej wersji pakietu SDK i wartości flagi manifestu, wyłączając tę zmianę.

Więcej informacji o zmianach w ograniczonym dostępie do miejsca na dane w Androidzie 11 znajdziesz w sekcji Ograniczony dostęp do miejsca na dane na stronie poświęconej zmianom w pamięci Androida w Androidzie 11.

EMPTY_INTENT_ACTION_CATEGORY

Identyfikator zmiany: 151163173

Stan domyślny: włączone w przypadku aplikacji kierowanych na Androida 11 (poziom API 30) lub nowszego.

W przypadku aplikacji kierowanych na Androida 11 system zgłasza teraz błąd, jeśli action lub category filtra intencji jest pustym ciągiem znaków. Błąd na platformie przed Androidem 11 umożliwiał przejście tego przypadku bez zgłaszania błędu. Pamiętaj, że nie dotyczy to przypadków, gdy atrybut ma wartość null lub go brakuje, ponieważ zawsze powodowało to błąd.

FILTER_APPLICATION_QUERY

Identyfikator zmiany: 135549675

Stan domyślny: włączone w przypadku aplikacji kierowanych na Androida 11 (poziom API 30) lub nowszego.

Aplikacje muszą teraz zadeklarować pakiety i intencje, których zamierzają używać, zanim będą mogły uzyskać szczegółowe informacje o innych aplikacjach na urządzeniu. Takie deklaracje muszą być składane za pomocą tagu <queries> w pliku manifestu aplikacji.

Więcej informacji o tym, jak wysyłać zapytania do innych zainstalowanych aplikacji i wchodzić z nimi w interakcje w Androidzie 11, znajdziesz na stronie poświęconej prywatności i widoczności pakietów.

FORCE_ENABLE_SCOPED_STORAGE

Identyfikator zmiany: wartość: 132649864

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

Wszystkie aplikacje kierowane na Androida 11 domyślnie korzystają teraz z wydzielonej pamięci i nie mogą już zrezygnować z tej funkcji.

Jeśli jednak Twoja aplikacja nadal jest kierowana na Androida 10 (poziom API 29) lub starszego, możesz przetestować ją z ograniczonym dostępem do miejsca na dane, niezależnie od docelowej wersji pakietu SDK i wartości flagi manifestu, włączając tę zmianę.

Więcej informacji o zmianach w ograniczonym dostępie do miejsca na dane w Androidzie 11 znajdziesz w sekcji Ograniczony dostęp do miejsca na dane na stronie poświęconej zmianom w pamięci Androida w Androidzie 11.

GET_DATA_CONNECTION_STATE_R_VERSION

Identyfikator zmiany: 148535736

Stan domyślny: włączone w przypadku aplikacji kierowanych na Androida 11 (poziom API 30) lub nowszego.

Aby sprawdzić wersję pakietu SDK dla PreciseDataConnectionState#getDataConnectionState:

GET_DATA_STATE_R_VERSION

Identyfikator zmiany: 148534348

Stan domyślny: włączone w przypadku aplikacji kierowanych na Androida 11 (poziom API 30) lub nowszego.

Aby sprawdzić wersję pakietu SDK dla getDataState():

GET_PROVIDER_SECURITY_EXCEPTIONS

Identyfikator zmiany: 150935354

Stan domyślny: włączone w przypadku aplikacji kierowanych na Androida 11 (poziom API 30) lub nowszego.

W przypadku aplikacji kierowanych na Androida 11 (poziom API 30) lub nowszego metoda getProvider(String) nie zgłasza już wyjątków zabezpieczeń.

GET_TARGET_SDK_VERSION_CODE_CHANGE

Identyfikator zmiany: 145147528

Stan domyślny: włączone w przypadku aplikacji kierowanych na Androida 10 (API na poziomie 29) lub nowszego.

Aby sprawdzić wersję pakietu SDK dla metody SmsManager.sendResolverResult().

GWP_ASAN

Identyfikator zmiany: 135634846

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

Umożliwia wykrywanie błędów pamięci natywnej w aplikacjach na podstawie próbek.

Więcej informacji o tej zmianie znajdziesz w przewodniku po GWP-ASan.

HIDE_MAXTARGETSDK_P_HIDDEN_APIS

Identyfikator zmiany: 149997251

Stan domyślny: włączone w przypadku aplikacji kierowanych na Androida 10 (API na poziomie 29) lub nowszego.

W przypadku aplikacji kierowanych na Androida 10 (poziom API 29) lub nowszego usuwa dostęp do wszystkich interfejsów innych niż SDK, które znajdują się na max-target-p (greylist-max-p) liście dla Androida 10 (poziom API 29).

HIDE_MAXTARGETSDK_Q_HIDDEN_APIS

Identyfikator zmiany: 149994052

Stan domyślny: włączone w przypadku aplikacji kierowanych na Androida 11 (poziom API 30) lub nowszego.

W przypadku aplikacji kierowanych na Androida 11 (poziom API 30) lub nowszego usuwa dostęp do wszystkich interfejsów innych niż SDK, które znajdują się na max-target-q (greylist-max-q) liście dla Androida 11 (poziom API 30).

Więcej informacji o tej zmianie znajdziesz w artykule o interfejsach innych niż SDK, które są teraz blokowane w Androidzie 11.

LISTEN_CODE_CHANGE

Identyfikator zmiany: 147600208

Stan domyślny: włączone w przypadku aplikacji kierowanych na Androida 10 (API na poziomie 29) lub nowszego.

Aby sprawdzić wersję pakietu SDK dla TelephonyManager.listen(PhoneStateListener, int):

MISSING_APP_TAG

Identyfikator zmiany: 150776642

Stan domyślny: włączone w przypadku aplikacji kierowanych na Androida 11 (poziom API 30) lub nowszego.

W przypadku aplikacji kierowanych na Androida 11 błąd jest teraz zgłaszany, gdy w pliku manifestu aplikacji brakuje tagu application lub instrumentation.

NATIVE_HEAP_POINTER_TAGGING

Identyfikator zmiany: 135754954

Stan domyślny: włączone w przypadku aplikacji kierowanych na Androida 11 (poziom API 30) lub nowszego.

W przypadku aplikacji kierowanych na Androida 11 alokacje sterty natywnej mają teraz niezerowy tag w najbardziej znaczącym bajcie.

Więcej informacji znajdziesz w artykule o tagowaniu wskaźników sterty.

PHONE_STATE_LISTENER_LIMIT_CHANGE_ID

Identyfikator zmiany: 150880553

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

W przypadku aplikacji kierowanych na Androida 11 obowiązuje teraz limit liczby obiektów PhoneStateListener, które proces może zarejestrować za pomocą TelephonyManager.listen(PhoneStateListener, int). Domyślny limit to 50, ale można go zmienić, aktualizując konfigurację urządzenia zdalnego. Ten limit jest egzekwowany za pomocą błędu IllegalStateException zgłaszanego przez TelephonyManager.listen(PhoneStateListener, int), gdy proces, który narusza zasady, próbuje zarejestrować zbyt wiele obiektów nasłuchujących.

PREVENT_META_REFLECTION_BLACKLIST_ACCESS

Identyfikator zmiany: 142365358

Stan domyślny: włączone w przypadku aplikacji kierowanych na Androida 11 (poziom API 30) lub nowszego.

Aplikacje kierowane na Androida 11 nie mogą już używać dodatkowej warstwy refleksji, aby uzyskać dostęp do interfejsów spoza pakietu SDK, które są objęte ograniczeniami.

PROCESS_CAPABILITY_CHANGE_ID

Identyfikator zmiany: 136274596

Stan domyślny: włączone w przypadku aplikacji kierowanych na Androida 11 (poziom API 30) lub nowszego.

W przypadku aplikacji kierowanych na Androida 11 można teraz używać flagi Context.BIND_INCLUDE_CAPABILITIES do przekazywania uprawnień podczas używania z procesu klienta do powiązanej usługi.

REMOVE_ANDROID_TEST_BASE

Identyfikator zmiany: 133396946

Stan domyślny: włączone w przypadku aplikacji kierowanych na Androida 11 (poziom API 30) lub nowszego.

W przypadku aplikacji kierowanych na Androida 11 biblioteka android.test.base została usunięta, jeśli aplikacja nie jest zależna od android.test.runner (ponieważ jest zależna od klas z biblioteki android.test.base).

REQUEST_ACCESSIBILITY_BUTTON_CHANGE

Identyfikator zmiany: 136293963

Stan domyślny: włączone w przypadku aplikacji kierowanych na Androida 11 (poziom API 30) lub nowszego.

W przypadku usług ułatwień dostępu kierowanych na Androida 11 w pliku metadanych usługi ułatwień dostępu należy teraz określić flagę FLAG_REQUEST_ACCESSIBILITY_BUTTON. W przeciwnym razie flaga zostanie zignorowana.

Więcej informacji o tej zmianie znajdziesz w artykule Deklarowanie użycia przycisku ułatwień dostępu w pliku metadanych.

RESOURCES_ARSC_COMPRESSED

Identyfikator zmiany: 132742131

Stan domyślny: włączone w przypadku aplikacji kierowanych na Androida 11 (poziom API 30) lub nowszego.

Aplikacji kierowanych na Androida 11 (poziom interfejsu API 30) nie można zainstalować, jeśli zawierają skompresowany plik resources.arsc lub jeśli ten plik nie jest wyrównany do granicy 4 bajtów.

Więcej informacji o tej zmianie znajdziesz w artykule na temat skompresowanych plików zasobów.

RESTRICT_STORAGE_ACCESS_FRAMEWORK

Identyfikator zmiany: 141600225

Stan domyślny: włączone w przypadku aplikacji kierowanych na Androida 11 (poziom API 30) lub nowszego.

Jeśli Twoja aplikacja jest kierowana na Androida 11 i korzysta z Storage Access Framework (SAF), nie możesz już uzyskiwać dostępu do niektórych katalogów za pomocą działań intencji ACTION_OPEN_DOCUMENT i ACTION_OPEN_DOCUMENT_TREE. Więcej informacji o tych zmianach znajdziesz w sekcji dotyczącej ograniczeń dostępu do dokumentów na stronie poświęconej aktualizacjom prywatności związanym z pamięcią masową w Androidzie 11.

SELINUX_LATEST_CHANGES

Identyfikator zmiany: 143539591

Stan domyślny: włączone w przypadku aplikacji kierowanych na Androida 11 (poziom API 30) lub nowszego.

Ta zmiana ogranicza dostęp aplikacji do domeny SELinux untrusted_app_R-targetSDk. Jest to jedna z podstawowych zmian w systemie sprawdzania zgodności, która umożliwia aplikacjom przełączanie innych zmian, które są ograniczone przez targetSdkVersion, bez zmiany targetSDKVersion aplikacji. Z tego powodu nie należy wyłączać tej zmiany w aplikacji kierowanej na Androida 11, ponieważ aplikacja nie będzie działać.

Ta zmiana nie ma wpływu na aplikacje, które używają wspólnego identyfikatora użytkownika.

THROW_SECURITY_EXCEPTIONS

Identyfikator zmiany: 147340954

Stan domyślny: włączone w przypadku aplikacji kierowanych na Androida 11 (poziom API 30) lub nowszego.

Przed Androidem 11 interfejsy API setEnabled zgłaszały błąd SecurityException tylko w przypadku błędu uprawnień. W Androidzie 11 już tak nie jest i wyjątek SecurityException może zostać zgłoszony z różnych powodów, z których żaden nie jest ujawniany elementowi wywołującemu.

Aby zachować dotychczasowe działanie interfejsu API, jeśli w aplikacji, która nie jest kierowana na Androida 11, wystąpi błąd uprawnień starszego typu lub błąd egzekwowania uprawnień podmiotu, wyjątek jest wymuszany w IllegalStateException, który istniał w źródle przed Androidem 11.

USE_SET_LOCATION_ENABLED

Identyfikator zmiany: 117835097

Stan domyślny: włączone w przypadku aplikacji kierowanych na Androida 11 (poziom API 30) lub nowszego.

Aplikacje administratora kierowane na Androida 11 nie mogą już używać metody DevicePolicyManager.setSecureSetting(ComponentName, String, String) do zmiany wycofanego ustawienia Settings.Secure.LOCATION_MODE. Zamiast tego powinni używać DevicePolicyManager.setLocationEnabled(ComponentName, boolean).