Na tej stronie opisujemy każdą zmianę w działaniu aplikacji, która została dodana do platformy zgodności w Androidzie 11 (poziom API 30). Korzystaj z 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łączony 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 z przeciążeniem
onChange(boolean, Uri, int)
zawierający argument flags
typu integer.
Ta nowa metoda jest publiczną alternatywą SDK dla aplikacji, które używają przeciążonej metody spoza SDKonChange()
, która zawiera argument całkowity userId
.
ADMIN_APP_PASSWORD_COMPLEXITY
Identyfikator zmiany: 123562444
Stan domyślny: włączony w przypadku aplikacji kierowanych na Androida 11 (poziom API 30) lub nowszego.
W przypadku aplikacji administracyjnych kierowanych na Androida 11 zgłaszaj błąd, gdy aplikacja ustawi wymaganie dotyczące hasła, które nie jest istotne w przypadku aktualnie przypisanej jakości hasła. Jeśli na przykład jakość hasła jest ustawiona na DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED
, aplikacja nie będzie mogła 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 potem metodę setPasswordMinimumLength()
.
Dodatkowo, gdy aplikacja administracyjna kierowana na Androida 11 obniża jakość hasła, wszystkie dotychczasowe wymagania dotyczące haseł, które nie mają już zastosowania, są resetowane do wartości domyślnych.
APP_DATA_DIRECTORY_ISOLATION
Identyfikator zmiany: 143937733
Stan domyślny: włączony w przypadku aplikacji kierowanych na Androida 11 (poziom API 30) lub nowszego.
Aplikacje przeznaczone 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 ona kierowana.
Więcej informacji znajdziesz w artykule Dostęp do prywatnych katalogów.
APN_READING_PERMISSION_CHANGE_ID
Identyfikator zmiany: 124107808
Stan domyślny: włączony 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 Ograniczenie dostępu do odczytu bazy danych APN.
BACKGROUND_RATIONALE_CHANGE_ID
Identyfikator zmiany: 147316723
Stan domyślny: włączony w przypadku aplikacji kierowanych na Androida 11 (poziom API 30) lub nowszego.
Aplikacje muszą teraz podawać 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 Dostęp do lokalizacji w tle na Androidzie 11, w którym omawiamy zmiany w zakresie prywatności związane z lokalizacją na Androidzie 11.
CALLBACK_ON_CLEAR_CHANGE
Identyfikator zmiany: 119147584
Stan domyślny: włączony w przypadku aplikacji kierowanych na Androida 11 (poziom API 30) lub nowszego.
Za każdym razem, gdy wywoływana jest funkcja
Editor.clear
, wywoływane jest teraz wywołanie zwrotne do funkcji
OnSharedPreferenceChangeListener.onSharedPreferenceChanged
z kluczem null
.
Więcej informacji o tej zmianie znajdziesz w sekcji Zmiany wywołań zwrotnych w przypadku OnSharedPreferenceChangeListener.
CALLBACK_ON_MORE_ERROR_CODE_CHANGE
Identyfikator zmiany: 130595455
Stan domyślny: włączony w przypadku aplikacji kierowanych na Androida 11 (poziom API 30) lub nowszego.
Kody błędów zostały rozwinięte w przypadku 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łączony w przypadku aplikacji kierowanych na Androida 11 (poziom API 30) lub nowszego.
To subtelna zmiana w działaniu startWatchingMode(String, String,
AppOpsManager.OnOpChangedListener)
.
Przed tą zmianą system wywoływał zwrotnie przełączoną operację. Po zmianie system będzie wywoływał zwrotnie operację, o którą faktycznie poproszono, lub wszystkie przełączone operacje, jeśli nie określono żadnej operacji.
CAMERA_MICROPHONE_CAPABILITY_CHANGE_ID
Identyfikator zmiany: 136219221
Stan domyślny: włączony 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 otrzymują uprawnienia do korzystania z kamery i mikrofonu tylko wtedy, gdy w pliku manifestu skonfigurowano odpowiednio R.attr.foregroundServiceType
jako ServiceInfo.FOREGROUND_SERVICE_TYPE_CAMERA
i ServiceInfo.FOREGROUND_SERVICE_TYPE_MICROPHONE
. We wcześniejszych wersjach Androida usługi działające na pierwszym planie automatycznie otrzymywały dostęp do kamery i mikrofonu.
Więcej informacji o tej zmianie znajdziesz w artykule Rodzaje usług działających na pierwszym planie w Androidzie 11.
CHANGE_BACKGROUND_CUSTOM_TOAST_BLOCK
Identyfikator zmiany: 128611929
Stan domyślny: włączony w przypadku aplikacji kierowanych na Androida 11 (poziom API 30) lub nowszego.
Aplikacje nie mogą już publikować niestandardowych powiadomień w tle. Aplikacje mogą jednak nadal wyświetlać powiadomienia typu toast za pomocą metody Toast.makeText(Context, CharSequence,
int)
i jej wariantów, gdy działają w tle.
Więcej informacji o tej zmianie znajdziesz w artykule Blokowanie niestandardowych widoków powiadomień.
CHANGE_RESTRICT_SAW_INTENT
Identyfikator zmiany: 135920175
Stan domyślny: tej zmiany nie można przełączać. Jest ona rejestrowana tylko przez system sprawdzania zgodności.
Intencje korzystające z działania android.settings.MANAGE_APP_OVERLAY_PERMISSION
i schematu URI danych package
nie kierują już użytkownika do ekranu 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 to uprawnienie.
CHANGE_TEXT_TOASTS_IN_THE_SYSTEM
Identyfikator zmiany: 147798919
Stan domyślny: włączony w przypadku aplikacji kierowanych na Androida 11 (poziom API 30) lub nowszego.
Tekstowe powiadomienia są teraz renderowane przez interfejs SystemUI, 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łączony w przypadku wszystkich aplikacji.
Wszystkie aplikacje kierowane na Androida 11 domyślnie korzystają z pamięci o ograniczonym zakresie i nie mogą już zrezygnować z tej funkcji.
Możesz jednak przetestować aplikację bez pamięci o ograniczonym zakresie, niezależnie od wersji pakietu SDK, na którą jest kierowana, i wartości flagi manifestu, wyłączając tę zmianę.
Więcej informacji o zmianach w zakresie pamięci w Androidzie 11 znajdziesz w sekcji Zakres pamięci na stronie poświęconej zmianom w pamięci Androida w Androidzie 11.
EMPTY_INTENT_ACTION_CATEGORY
Identyfikator zmiany: 151163173
Stan domyślny: włączony 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 w wersji starszej niż Android 11 umożliwiał przejście tego przypadku bez zgłaszania błędu. Pamiętaj, że nie obejmuje to przypadków, w których atrybut ma wartość null lub nie występuje, ponieważ zawsze powodowało to błąd.
FILTER_APPLICATION_QUERY
Identyfikator zmiany: 135549675
Stan domyślny: włączony w przypadku aplikacji kierowanych na Androida 11 (poziom API 30) lub nowszego.
Aplikacje muszą teraz deklarować 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ć podawane za pomocą tagu <queries>
w pliku manifestu aplikacji.
Więcej informacji o tym, jak w Androidzie 11 wysyłać zapytania do innych zainstalowanych aplikacji i wchodzić z nimi w interakcje, znajdziesz na stronie dotyczącej prywatności w zakresie widoczności pakietów.
FORCE_ENABLE_SCOPED_STORAGE
Identyfikator zmiany: wartość: 132649864
Stan domyślny: wyłączony we wszystkich aplikacjach.
Wszystkie aplikacje kierowane na Androida 11 domyślnie korzystają z pamięci o ograniczonym zakresie i nie mogą już zrezygnować z tej funkcji.
Jeśli jednak aplikacja jest nadal kierowana na Androida 10 (poziom API 29) lub starszego, możesz przetestować ją z zakresem pamięci, niezależnie od docelowej wersji pakietu SDK i wartości flagi w pliku manifestu, włączając tę zmianę.
Więcej informacji o zmianach w zakresie pamięci w Androidzie 11 znajdziesz w sekcji Zakres pamięci 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łączony w przypadku aplikacji kierowanych na Androida 11 (poziom API 30) lub nowszego.
Aby sprawdzić wersję pakietu SDK, wykonaj te czynności:PreciseDataConnectionState#getDataConnectionState
GET_DATA_STATE_R_VERSION
Identyfikator zmiany: 148534348
Stan domyślny: włączony w przypadku aplikacji kierowanych na Androida 11 (poziom API 30) lub nowszego.
Aby sprawdzić wersję pakietu SDK w przypadku
getDataState()
.
GET_PROVIDER_SECURITY_EXCEPTIONS
Identyfikator zmiany: 150935354
Stan domyślny: włączony w przypadku aplikacji kierowanych na Androida 11 (poziom API 30) lub nowszego.
W przypadku aplikacji kierowanych na Androida 11 (poziom interfejsu API 30) lub nowszego
getProvider(String)
nie zgłasza już żadnych wyjątków związanych z bezpieczeństwem.
GET_TARGET_SDK_VERSION_CODE_CHANGE
Identyfikator zmiany: 145147528
Stan domyślny: włączony 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łączony we wszystkich aplikacjach.
Umożliwia wykrywanie w aplikacjach błędów pamięci natywnej 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łączony w przypadku aplikacji kierowanych na Androida 10 (API na poziomie 29) lub nowszego.
W przypadku aplikacji kierowanych na Androida 10 (poziom 29 interfejsu API) lub nowszego usuwa dostęp do wszystkich interfejsów innych niż SDK, które są częścią max-target-p
(greylist-max-p
) na Androida 10 (poziom 29 interfejsu API).
HIDE_MAXTARGETSDK_Q_HIDDEN_APIS
Identyfikator zmiany: 149994052
Stan domyślny: włączony 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 są częścią max-target-q
(greylist-max-q
) na Androidzie 11 (poziom API 30).
Więcej informacji o tej zmianie znajdziesz w artykule Interfejsy inne niż SDK, które są teraz blokowane na Androidzie 11.
LISTEN_CODE_CHANGE
Identyfikator zmiany: 147600208
Stan domyślny: włączony 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łączony w przypadku aplikacji kierowanych na Androida 11 (poziom API 30) lub nowszego.
W przypadku aplikacji kierowanych na Androida 11, gdy w pliku manifestu aplikacji brakuje tagu application
lub instrumentation
, pojawia się błąd.
NATIVE_HEAP_POINTER_TAGGING
Identyfikator zmiany: 135754954
Stan domyślny: włączony 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 Tagowanie wskaźników sterty.
PHONE_STATE_LISTENER_LIMIT_CHANGE_ID
Identyfikator zmiany: 150880553
Stan domyślny: włączony w przypadku wszystkich aplikacji.
W przypadku aplikacji kierowanych na Androida 11 obowiązuje teraz limit liczby obiektów PhoneStateListener
, które każdy proces może zarejestrować za pomocą funkcji TelephonyManager.listen(PhoneStateListener, int)
.
Domyślny limit to 50, ale można go zmienić za pomocą aktualizacji konfiguracji urządzenia zdalnego.
Ten limit jest egzekwowany za pomocą wyjątku IllegalStateException
zgłaszanego przez TelephonyManager.listen(PhoneStateListener, int)
, gdy proces naruszający limit próbuje zarejestrować zbyt wielu odbiorców.
PREVENT_META_REFLECTION_BLACKLIST_ACCESS
Identyfikator zmiany: 142365358
Stan domyślny: włączony 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 do uzyskiwania dostępu do interfejsów spoza SDK, które są objęte ograniczeniami.
PROCESS_CAPABILITY_CHANGE_ID
Identyfikator zmiany: 136274596
Stan domyślny: włączony 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 funkcji używanych podczas korzystania z aplikacji z procesu klienta do powiązanej usługi.
REMOVE_ANDROID_TEST_BASE
Identyfikator zmiany: 133396946
Stan domyślny: włączony 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łączony 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 musi być teraz określona flaga
FLAG_REQUEST_ACCESSIBILITY_BUTTON
.
W przeciwnym razie flaga jest ignorowana.
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łączony w przypadku aplikacji kierowanych na Androida 11 (poziom API 30) lub nowszego.
Aplikacji kierowanych na Androida 11 (poziom API 30) nie można zainstalować, jeśli zawierają skompresowany plik resources.arsc
lub jeśli ten plik nie jest wyrównany do 4-bajtowej granicy.
Więcej informacji o tej zmianie znajdziesz w sekcji Skompresowane pliki zasobów.
RESTRICT_STORAGE_ACCESS_FRAMEWORK
Identyfikator zmiany: 141600225
Stan domyślny: włączony 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, na której omawiamy aktualizacje dotyczące prywatności związane z pamięcią w Androidzie 11.
SELINUX_LATEST_CHANGES
Identyfikator zmiany: 143539591
Stan domyślny: włączony 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 ramach zgodności, która umożliwia aplikacjom włączanie innych zmian ograniczonych przez targetSdkVersion
bez zmiany targetSDKVersion
aplikacji. Z tego powodu nie należy wyłączać tej zmiany w przypadku aplikacji kierowanej na Androida 11, ponieważ w przeciwnym razie nie będzie ona działać.
Ta zmiana nie ma wpływu na aplikacje, które używają udostępnionego identyfikatora użytkownika.
THROW_SECURITY_EXCEPTIONS
Identyfikator zmiany: 147340954
Stan domyślny: włączony w przypadku aplikacji kierowanych na Androida 11 (poziom API 30) lub nowszego.
Przed Androidem 11 błąd SecurityException
był zgłaszany przez interfejsy API setEnabled
tylko w przypadku błędu uprawnień. W Androidzie 11 nie jest to już prawdą i wyjątek SecurityException
może być zgłaszany z różnych powodów, z których żaden nie jest widoczny dla wywołującego.
Aby zachować dotychczasowe działanie interfejsu API, w przypadku aplikacji, która nie jest kierowana na Androida 11, jeśli wystąpi błąd związany z uprawnieniami starszego typu lub błąd związany z wymuszaniem działania przez podmiot, wyjątek jest przekształcany w IllegalStateException
, który istniał w kodzie źródłowym przed Androidem 11.
USE_SET_LOCATION_ENABLED
Identyfikator zmiany: 117835097
Stan domyślny: włączony w przypadku aplikacji kierowanych na Androida 11 (poziom API 30) lub nowszego.
Aplikacje administracyjne kierowane na Androida 11 nie mogą już używać
DevicePolicyManager.setSecureSetting(ComponentName, String, String)
do zmiany wycofanego ustawienia Settings.Secure.LOCATION_MODE
. Zamiast tego powinny używać znacznika DevicePolicyManager.setLocationEnabled(ComponentName, boolean)
.