Zmiany platformy zgodności (Android 11)

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). Użyj tej listy w połączeniu z opcjami programisty i poleceniami ADB, aby testować i debugować aplikację podczas przygotowań do kierowania aplikacji na Androida 11.

ADD_CONTENT_OBSERVER_FLAGS

Identyfikator zmiany: 150939131

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

W przypadku aplikacji kierowanych na Androida 11 występuje nowe publiczne przeciążenie interfejsu API onChange(boolean, Uri, int), które obejmuje liczbę całkowitą flags.

Ta nowa metoda jest alternatywą dla publicznego pakietu SDK w przypadku aplikacji korzystających z przeciążonej metody onChange() spoza pakietu SDK, która zawiera argument liczby całkowitej userId.

ADMIN_APP_PASSWORD_COMPLexitY

Identyfikator zmiany: 123562444

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

W przypadku aplikacji administracyjnych kierowanych na Androida 11 za każdym razem, gdy aplikacja ustawia wymóg związany z hasłem, który nie ma zastosowania do obecnie przypisanej jakości hasła, zgłasza błąd. 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, zanim spróbujesz ustawić minimalną długość hasła, aplikacja powinna najpierw wywołać metodę setPasswordQuality(), a potem dopiero metodę setPasswordMinimumLength().

Ponadto gdy aplikacja administratora kierowana na Androida 11 obniża jakość haseł, wszystkie dotychczasowe wymagania dotyczące haseł, które nie są już stosowane, zostaną zresetowane do wartości domyślnych.

APP_DATA_DIRECTORY_ISOLATION

Identyfikator zmiany: 143937733

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

Aplikacje kierowane na Androida 11 nie mają już dostępu do plików w prywatnych katalogach danych żadnej aplikacji, niezależnie od docelowej wersji pakietu SDK tej aplikacji.

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

Identyfikator APN_READING_PERMISSION_CHANGE_ID

Identyfikator zmiany: 124107808

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

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

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

BACKGROUND_RATIONALE_CHANGE_ID

Identyfikator zmiany: 147316723

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

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 po uzyskiwaniu dostępu do lokalizacji w tle na Androidzie 11, w którym omawiamy zmiany w ochronie prywatności związane z lokalizacją w Androidzie 11.

CALLBACK_ON_CLEAR_CHANGE

Identyfikator zmiany: 119147584

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

Każde wywołanie metody Editor.clear powoduje teraz wywołanie zwrotne metody OnSharedPreferenceChangeListener.onSharedPreferenceChanged z kluczem null.

Więcej informacji o tej zmianie znajdziesz w artykule Zmiany wywołania zwrotnego dla OnSharedPreferenceChangeListener.

CALLBACK_ON_MORE_ERROR_CODE_CHANGE

Identyfikator zmiany: 130595455

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

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

CALL_BACK_ON_CHANGED_LISTENER_WITH_SWITCHED_OP_CHANGE

Identyfikator zmiany: 148180766

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

To subtelna zmiana działania w startWatchingMode(String, String, AppOpsManager.OnOpChangedListener). Przed tą zmianą system wywołał dla operacji przełączonej. Po wprowadzeniu zmiany system będzie oddzwonił do operacji faktycznie żądanej lub wszystkich operacji przełączania, jeśli nie określono żadnej operacji.

IDENTYFIKATOR_ZMIAN_CAMERA_MICROPHONE_CAPABILITY_CHANGE_ID

Identyfikator zmiany: 136219221

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

W przypadku aplikacji kierowanych na Androida 11 usługi działające na pierwszym planie otrzymują uprawnienia kamery i mikrofonu tylko wtedy, gdy element R.attr.foregroundServiceType jest skonfigurowany odpowiednio w pliku manifestu jako ServiceInfo.FOREGROUND_SERVICE_TYPE_CAMERA i ServiceInfo.FOREGROUND_SERVICE_TYPE_MICROPHONE. We wcześniejszych wersjach Androida usługi na pierwszym planie automatycznie otrzymywały możliwości aparatu i mikrofonu.

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

ZMIEŃ_BACKGROUND_CUSTOM_TOAST_BLOCK

Identyfikator zmiany: 128611929

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

Aplikacje nie mogą już publikować niestandardowych komunikatów w tle. W tle aplikacje nadal mogą jednak publikować tosty, korzystając z metody Toast.makeText(Context, CharSequence, int) i jej wariantów.

Więcej informacji o tej zmianie znajdziesz w artykule Blokowanie niestandardowych widoków toast.

CHANGE_RESTRICT_SAW_INTENT,

Identyfikator zmiany: 135920175

Stan domyślny: tej zmiany nie można przełączyć. Jest logowana tylko przez platformę 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, w którym można zarządzać powiązanymi uprawnieniami. Zamiast tego użytkownik jest kierowany na ekran, na którym może zarządzać wszystkimi aplikacjami, które poprosiły o przyznanie uprawnień.

CHANGE_TEXT_TOASTS_IN_THE_SYSTEM

Identyfikator zmiany: 147798919

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

Komunikaty tekstowe są teraz renderowane przez interfejs SystemUI, a nie w aplikacji. Zapobiega to obchodzeniu ograniczeń dotyczących publikowania niestandardowych komunikatów w tle.

DEFAULT_SCOPED_STORAGE

Identyfikator zmiany: 149924527

Stan domyślny: włączone dla wszystkich aplikacji.

Wszystkie aplikacje kierowane na Androida 11 domyślnie korzystają z miejsca na dane i nie mogą już zrezygnować z niego.

Możesz jednak przetestować aplikację bez ograniczonego miejsca na dane, niezależnie od docelowych wersji pakietu SDK i flag pliku manifestu, wyłączając tę zmianę.

Więcej informacji o zmianach dotyczących miejsca na dane w Androidzie 11 znajdziesz w sekcji Ograniczone miejsce na dane na stronie z informacjami o zmianach dotyczących miejsca na dane w Androidzie 11.

EMPTY_INTENT_ACTION_CATEGORY

Identyfikator zmiany: 151163173

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

W przypadku aplikacji kierowanych na Androida 11 system zgłasza teraz błąd, jeśli action lub category filtra intencji to pusty ciąg znaków. Błąd na platformie sprzed Androida 11 umożliwił przekazanie zgłoszenia bez zgłaszania błędu. Pamiętaj, że nie obejmuje to przypadków, w których atrybut ma wartość null lub nie ma go wcale, ponieważ zawsze powoduje to błąd.

FILTER_APPLICATION_QUERY

Identyfikator zmiany: 135549675

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

Aby uzyskać informacje o innych aplikacjach na urządzeniu, aplikacje muszą teraz zadeklarować pakiety i intencje, których zamierzają użyć. Takie deklaracje należy składać za pomocą tagu <queries> w pliku manifestu aplikacji.

Więcej informacji o tym, jak wysyłać zapytania do innych zainstalowanych aplikacji w Androidzie 11 i korzystać z nich, znajdziesz na stronie prywatności dotyczącej widoczności pakietów.

FORCE_ENABLE_SCOPED_STORAGE

Change ID (Identyfikator zmiany): wartość: 132649864

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

Wszystkie aplikacje kierowane na Androida 11 domyślnie korzystają z miejsca na dane i nie mogą już zrezygnować z niego.

Jeśli jednak Twoja aplikacja jest nadal kierowana na Androida 10 (poziom interfejsu API 29) lub niższy, możesz ją przetestować z ograniczonym miejscem na dane – niezależnie od docelowych wersji pakietu SDK i wartości flagi manifestu.

Więcej informacji o zmianach dotyczących miejsca na dane w Androidzie 11 znajdziesz w sekcji Ograniczone miejsce na dane na stronie z informacjami o zmianach dotyczących miejsca na dane w Androidzie 11.

GET_DATA_CONNECTION_STATE_R_VERSION

Identyfikator zmiany: 148535736

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

Aby sprawdzić wersję pakietu SDK PreciseDataConnectionState#getDataConnectionState.

GET_DATA_STATE_R_VERSION

Identyfikator zmiany: 148534348

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

Aby sprawdzić wersję pakietu SDK getDataState():

GET_PROVIDER_Security_EXCEPTIONS (wyjątki_dostawcy_BEZPIECZEŃSTWA)

Identyfikator zmiany: 150935354

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

W przypadku aplikacji kierowanych na Androida 11 (poziom interfejsu API 30) lub nowszego narzędzie getProvider(String) nie zgłasza już żadnych wyjątków dotyczących zabezpieczeń.

GET_TARGET_SDK_VERSION_CODE_CHANGE

Identyfikator zmiany: 145147528

Stan domyślny: włączona w przypadku aplikacji kierowanych na Androida 10 (poziom API 29) lub nowszy.

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

GWP_ASAN

Identyfikator zmiany: 135634846

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

Umożliwia wykrywanie błędów w pamięci natywnej w aplikacjach.

Więcej informacji na temat tej zmiany znajdziesz w przewodniku po GWP-ASan.

HIDE_MAXTARGETSDK_P_HIDDEN_APIS

Identyfikator zmiany: 149997251

Stan domyślny: włączona w przypadku aplikacji kierowanych na Androida 10 (poziom API 29) lub nowszy.

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

HIDE_MAXTARGETSDK_Q_HIDDEN_APIS

Identyfikator zmiany: 149994052

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

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

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

LISTEN_CODE_CHANGE

Identyfikator zmiany: 147600208

Stan domyślny: włączona w przypadku aplikacji kierowanych na Androida 10 (poziom API 29) lub nowszy.

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

BRAK_TAGU_APLIKACJI

Identyfikator zmiany: 150776642

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

W przypadku aplikacji kierowanych na Androida 11, gdy w pliku manifestu aplikacji brakuje tagu application lub instrumentation, błąd występuje teraz.

TAGOWANIE_PODATKOWE

Identyfikator zmiany: 135754954

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

W przypadku aplikacji kierowanych na Androida 11 natywne przydziały sterty mają teraz wartość niezerową w najważniejszym bajcie.

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

PHONE_STATE_LISTENER_LIMIT_CHANGE_ID (identyfikator: PHONE_STATE_LISTENER_LIMIT_CHANGE_ID)

Identyfikator zmiany: 150880553

Stan domyślny: włączone dla wszystkich aplikacji.

W przypadku aplikacji kierowanych na Androida 11 obowiązuje teraz limit liczby obiektów PhoneStateListener, które może zarejestrować dowolny proces za pomocą TelephonyManager.listen(PhoneStateListener, int). Domyślny limit to 50 i może zostać on zmieniony przez aktualizacje konfiguracji urządzenia zdalnego. Ten limit jest egzekwowany za pomocą IllegalStateException zwracanego przez TelephonyManager.listen(PhoneStateListener, int), gdy proces naruszający próbuje zarejestrować o 1 zbyt wielu detektorów.

ZAPOBIEGANIE_META_REFLECTION_BLACKLIST_DOSTĘPU

Identyfikator zmiany: 142365358

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

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

IDENTYFIKATOR_PROCESU_CAPABILITY_CHANGE_ID

Identyfikator zmiany: 136274596

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

W przypadku aplikacji kierowanych na Androida 11 flaga Context.BIND_INCLUDE_CAPABILITIES może teraz służyć do przekazywania używanych funkcji z procesu klienta do powiązanej usługi.

REMOVE_ANDROID_TEST_BASE

Identyfikator zmiany: 133396946

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

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

REQUEST_ACCESSIBILITY_BUTTON_CHANGE

Identyfikator zmiany: 136293963

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

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 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łączona w przypadku aplikacji kierowanych na Androida 11 (poziom API 30) lub nowszy.

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

Więcej informacji o tej zmianie znajdziesz w artykule Skompresowane pliki zasobów.

RESTRICT_STORAGE_ACCESS_FRAMEWORK

Identyfikator zmiany: 141600225

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

Jeśli Twoja aplikacja jest kierowana na Androida 11 i korzysta z Storage Access Framework (SAF), nie możesz już uzyskać dostępu do niektórych katalogów za pomocą intencji ACTION_OPEN_DOCUMENT i ACTION_OPEN_DOCUMENT_TREE. Więcej informacji o tych zmianach znajdziesz w sekcji Ograniczenia dostępu do dokumentu na stronie, która zawiera informacje o aktualizacjach prywatności związanych z miejscem na dane w Androidzie 11.

SELINUX_LATEST_CHANGES

Identyfikator zmiany: 143539591

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

Ta zmiana blokuje dostęp aplikacji do domeny untrusted_app_R-targetSDk SELinux. To jedna z podstawowych zmian w platformie zgodności, które pozwalają aplikacjom na przełączanie innych zmian objętych ograniczeniami przez targetSdkVersion bez zmiany identyfikatora targetSDKVersion aplikacji. Dlatego nie należy wyłączać tej zmiany w aplikacjach kierowanych na Androida 11, ponieważ w przeciwnym razie aplikacja nie będzie działać.

Ta zmiana nie wpływa na aplikacje, które korzystają z udostępnianego identyfikatora użytkownika.

THROW_BEZPIECZEŃSTWO

Identyfikator zmiany: 147340954

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

W wersjach starszych niż 11 interfejs API SecurityException był wywoływany przez interfejsy API setEnabled tylko w przypadku błędu uprawnień. W Androidzie 11 już to nie obowiązuje, a SecurityException może być zgłaszany z dowolnej liczby powodów, ale żaden z nich nie jest dostępny dla rozmówcy.

Aby zachować dotychczasowe działanie interfejsu API, jeśli w przypadku aplikacji, która nie jest kierowana na Androida 11, wystąpi błąd związany ze starszymi uprawnieniami lub błąd egzekwowania uprawnień przez użytkownika, wyjątek jest przekształcany w element IllegalStateException, który istniał w źródle sprzed Androida 11.

USE_SET_LOCATION_ENABLED

Identyfikator zmiany: 117835097

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

Aplikacje administracyjne kierowane na Androida 11 nie mogą już używać elementu DevicePolicyManager.setSecureSetting(ComponentName, String, String) do zmiany wycofanego ustawienia Settings.Secure.LOCATION_MODE. Zamiast niego powinien używać DevicePolicyManager.setLocationEnabled(ComponentName, boolean).