Podobnie jak w przypadku wcześniejszych wersji, Android 11 zawiera zmiany zachowania, które mogą mieć wpływ na Twoją aplikację. Poniższe zmiany zachowania mają zastosowanie wyłącznie do aplikacji kierowanych na Androida 11 lub nowszego. Jeśli Twoja aplikacja ustawia wartość targetSdkVersion
na 30
, musisz ją odpowiednio zmodyfikować, aby obsługiwała te zachowania.
Zapoznaj się też z listą zmian zachowania, które mają wpływ na wszystkie aplikacje działające na Androidzie 11.
Prywatność
Android 11 wprowadza zmiany i ograniczenia, które mają zwiększyć prywatność użytkowników. Oto niektóre z nich:
- Ograniczenia dotyczące miejsca na dane: dostęp do katalogów zewnętrznego miejsca na dane jest ograniczony do katalogu konkretnej aplikacji i konkretnych typów multimediów utworzonych przez tę aplikację.
- Automatyczne resetowanie uprawnień: jeśli użytkownicy nie korzystają z aplikacji przez kilka miesięcy, system automatycznie resetuje jej uprawnienia dotyczące dostępu do danych wrażliwych.
- Dostęp do lokalizacji w tle: użytkownicy muszą zostać przekierowani do ustawień systemu, aby przyznać aplikacjom dostęp do lokalizacji w tle.
- Widoczność pakietu: gdy aplikacja wysyła zapytanie o listę zainstalowanych aplikacji na urządzeniu, zwracana lista jest filtrowana.
Więcej informacji znajdziesz na stronie Prywatność.
Bezpieczeństwo
Tagowanie wskaźnika stosu
Szczegóły zmian
Zmień nazwę: NATIVE_HEAP_POINTER_TAGGING
Identyfikator zmiany: 135754954
Jak włączyć lub wyłączyć
Podczas testowania zgodności aplikacji z Androidem 11 możesz włączyć lub wyłączyć tę zmianę, korzystając z tych poleceń ADB:
adb shell am compat enable (135754954|NATIVE_HEAP_POINTER_TAGGING) PACKAGE_NAME
adb shell am compat disable (135754954|NATIVE_HEAP_POINTER_TAGGING) PACKAGE_NAME
Więcej informacji o ramach zgodności i zmianach w przełączaniu znajdziesz w artykule Testowanie i debugowanie zmian w zachowaniu platformy w aplikacji.
Wskaźniki stosu mają teraz tag inny niż zero w najistotniejszym bajcie (MSB). Aplikacje, które nieprawidłowo używają wskaźników, w tym te, które modyfikują MSB, mogą teraz ulec awarii lub mieć inne problemy. Ta zmiana jest konieczna do obsługi przyszłego sprzętu z włączonym rozszerzeniem Memory Tagging Extension (MTE) dla architektury ARM. Więcej informacji znajdziesz w artykule Tagowane wskaźniki.
Aby wyłączyć tę funkcję, zapoznaj się z dokumentacją dotyczącą pliku allowNativeHeapPointerTagging
manifestu.
Zmiany w powiadomieniach
Niestandardowe powiadomienia z tła są blokowane
Ze względów bezpieczeństwa i dla zapewnienia wygody użytkowników system blokuje powiadomienia, które zawierają widoki niestandardowe, jeśli są one wysyłane w tle przez aplikację przeznaczoną na Androida 11 lub nowszego. Pamiętaj, że nadal dozwolone są komunikaty tekstowe, czyli komunikaty utworzone za pomocą funkcji Toast.makeText()
, które nie wywołują funkcji setView()
.
Jeśli aplikacja próbuje wyświetlić toast zawierający widok niestandardowy w tle, system nie wyświetla tego komunikatu użytkownikowi. Zamiast tego system rejestruje w logcat następującą wiadomość:
W/NotificationService: Blocking custom toast from package \ <package> due to package not in the foreground
Wywołania zwrotne toast
Jeśli chcesz otrzymywać powiadomienia o pojawianiu się i znikaniu komunikatu (tekstowego lub niestandardowego), użyj metody addCallback()
, która została dodana w Androidzie 11.
Zmiany w interfejsie Text Toast API
Aplikacje kierowane na Androida 11 lub nowszego mają następujące skutki uboczne w przypadku komunikatów tekstowych:
- Metoda
getView()
zwracanull
. - Wartości zwracane przez te metody nie odzwierciedlają rzeczywistych wartości, dlatego nie należy się na nich w aplikacji opierać:
- Poniższe metody są niepotrzebne, więc aplikacja nie powinna ich używać:
Łączność
Ograniczony dostęp z możliwością odczytu do bazy danych APN
Szczegóły zmian
Zmień nazwę: APN_READING_PERMISSION_CHANGE_ID
Identyfikator zmiany: 124107808
Jak włączyć lub wyłączyć
Podczas testowania zgodności aplikacji z Androidem 11 możesz włączyć lub wyłączyć tę zmianę, korzystając z tych poleceń ADB:
adb shell am compat enable (124107808|APN_READING_PERMISSION_CHANGE_ID) PACKAGE_NAME
adb shell am compat disable (124107808|APN_READING_PERMISSION_CHANGE_ID) PACKAGE_NAME
Więcej informacji o ramach zgodności i zmianach w przełączaniu znajdziesz w artykule Testowanie i debugowanie zmian w zachowaniu platformy w aplikacji.
Aplikacje kierowane na Androida 11 wymagają teraz uprzywilejowanego uprawnienia Manifest.permission.WRITE_APN_SETTINGS
do odczytu lub dostępu do bazy danych APN telekomunikacji dostawcy. Próba uzyskania dostępu do bazy danych APN bez tego uprawnienia powoduje wyjątek zabezpieczeń.
Ułatwienia dostępu
Zadeklaruj interakcję z silnikami TTS w pliku manifestu
Ze względu na zmiany w widoczności pakietu aplikacje na Androida 11, które współpracują z silnikiem zamiany tekstu na mowę, muszą dodać do swoich plików manifestu element <queries>
:
<queries> <intent> <action android:name="android.intent.action.TTS_SERVICE" /> </intent> </queries>
Zadeklaruj użycie przycisku ułatwień dostępu w pliku metadanych
Szczegóły zmian
Zmień nazwę: REQUEST_ACCESSIBILITY_BUTTON_CHANGE
Identyfikator zmiany: 136293963
Jak włączyć lub wyłączyć
Podczas testowania zgodności aplikacji z Androidem 11 możesz włączyć lub wyłączyć tę zmianę, korzystając z tych poleceń ADB:
adb shell am compat enable (136293963|REQUEST_ACCESSIBILITY_BUTTON_CHANGE) PACKAGE_NAME
adb shell am compat disable (136293963|REQUEST_ACCESSIBILITY_BUTTON_CHANGE) PACKAGE_NAME
Więcej informacji o ramach zgodności i zmianach w przełączaniu znajdziesz w artykule Testowanie i debugowanie zmian w zachowaniu platformy w aplikacji.
Od Androida 11 usługa ułatwień dostępu nie może deklarować w czasie działania, że jest powiązana z przyciskiem ułatwień dostępu systemu. Jeśli dodasz AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON
do właściwości flags
obiektu AccessibilityServiceInfo
, framework nie przekaże do usługi zdarzeń wywołania przycisku ułatwień dostępu.
Aby otrzymywać wywołania zwrotne obsługi ułatwień dostępu w usłudze ułatwień dostępu, w pliku metadanych usługi ułatwień dostępu zadeklaruj powiązanie usługi z przyciskiem ułatwień dostępu. Uwzględnij wartość flagRequestAccessibilityButton
w definicji atrybutu accessibilityFlags
. Plik z metadanymi usługi ułatwień dostępu jest zwykle dostępny pod adresem res/raw/accessibilityservice.xml
.
Aparat
Działania związane z intencją dotyczącą multimediów wymagają domyślnej kamery systemu
Od Androida 11 tylko wstępnie zainstalowane aplikacje aparatu mogą odpowiadać na te działania intencyjne:
android.media.action.VIDEO_CAPTURE
android.media.action.IMAGE_CAPTURE
android.media.action.IMAGE_CAPTURE_SECURE
Jeśli dostępnych jest kilka wstępnie zainstalowanych aplikacji aparatu, system wyświetli użytkownikowi okno dialogowe z prośbą o wybranie aplikacji. Jeśli chcesz, aby Twoja aplikacja używała konkretnej aplikacji aparatu innej firmy do wykonywania zdjęć lub nagrywania filmów w imieniu użytkownika, możesz jawnie określić te intencje, ustawiając nazwę pakietu lub komponent dla danej intencji.
Pakowanie i instalowanie aplikacji
skompresowane pliki zasobów,
Szczegóły zmian
Zmień nazwę: RESOURCES_ARSC_COMPRESSED
Identyfikator zmiany: 132742131
Jak włączyć lub wyłączyć
Podczas testowania zgodności aplikacji z Androidem 11 możesz włączyć lub wyłączyć tę zmianę, korzystając z tych poleceń ADB:
adb shell am compat enable (132742131|RESOURCES_ARSC_COMPRESSED) PACKAGE_NAME
adb shell am compat disable (132742131|RESOURCES_ARSC_COMPRESSED) PACKAGE_NAME
Więcej informacji o ramach zgodności i zmianach w przełączaniu znajdziesz w artykule Testowanie i debugowanie zmian w zachowaniu platformy w aplikacji.
Aplikacje kierowane na Androida 11 (poziom interfejsu API 30) lub nowszego nie mogą być instalowane, jeśli zawierają skompresowany plik resources.arsc
lub jeśli ten plik nie jest wyrównany co 4 bajty. System nie może przypisać tego pliku do pamięci, jeśli spełniony jest jeden z tych warunków. Tabele zasobów, których nie można mapować w pamięci, muszą być odczytywane do bufora w pamięci RAM, co powoduje niepotrzebne obciążenie pamięci w systemie i znaczne zwiększenie wykorzystania pamięci RAM na urządzeniu.
Jeśli wcześniej używałeś/używałaś skompresowanego pliku resources.arsc
, wypróbuj alternatywne strategie, takie jak skracanie zasobów aplikacji lub inne metody skracania, zaciemniania i optymalizowania aplikacji.
Wymagany schemat podpisywania plików APK w wersji 2
Aplikacje przeznaczone na Androida 11 (poziom interfejsu API 30), które są obecnie podpisane tylko przy użyciu schematu podpisu APK w wersji 1, muszą być teraz podpisane również przy użyciu schematu podpisu APK w wersji 2 lub nowszej. Użytkownicy nie mogą instalować ani aktualizować aplikacji podpisanych tylko za pomocą schematu podpisu APK w wersji 1 na urządzeniach z Androidem 11.
Aby sprawdzić, czy aplikacja jest podpisana przy użyciu schematu podpisu APK w wersji 2 lub nowszej, możesz użyć Android Studio lub narzędzia apksigner
w wierszu poleceń.
Firebase
Firebase JobDispatcher i GCMNetworkManager
Jeśli Twoja aplikacja jest kierowana na poziom interfejsu API 30 lub wyższy, wywołania interfejsu JobDispatcher i GcmNetworkManager w Firebase są wyłączone na urządzeniach z Androidem 6.0 (poziom interfejsu API 23) lub nowszym. Informacje o migracji znajdziesz w artykułach Migracja z Firebase JobDispatcher do WorkManager i Migracja z GCMNetworkManager do WorkManager.
Rozpoznawanie mowy
Z powodu zmian w widoczności pakietu aplikacje przeznaczone na Androida 11, które współpracują z usługą rozpoznawania mowy, muszą dodać do swoich plików manifestu element <queries>
:
<queries> <intent> <action android:name="android.speech.RecognitionService" /> </intent> </queries>
Zmiany wywołania zwrotnego w przypadku OnSharedPreferenceChangeListener
Szczegóły zmian
Zmień nazwę: CALLBACK_ON_CLEAR_CHANGE
Identyfikator zmiany: 119147584
Jak włączyć lub wyłączyć
Podczas testowania zgodności aplikacji z Androidem 11 możesz włączyć lub wyłączyć tę zmianę, korzystając z tych poleceń ADB:
adb shell am compat enable (119147584|CALLBACK_ON_CLEAR_CHANGE) PACKAGE_NAME
adb shell am compat disable (119147584|CALLBACK_ON_CLEAR_CHANGE) PACKAGE_NAME
Więcej informacji o ramach zgodności i zmianach w przełączaniu znajdziesz w artykule Testowanie i debugowanie zmian w zachowaniu platformy w aplikacji.
W przypadku aplikacji kierowanych na Androida 11 (poziom API 30) wywołanie funkcji Editor.clear
powoduje wywołanie funkcji wywołania zwrotnego OnSharedPreferenceChangeListener.onSharedPreferenceChanged
z kluczem null
.
Ograniczenia interfejsu innego niż SDK
Android 11 zawiera zaktualizowane listy ograniczonych interfejsów innych niż SDK na podstawie współpracy z deweloperami Androida i najnowszych testów wewnętrznych. Zawsze, gdy to możliwe, sprawdzamy, czy dostępne są publiczne alternatywy, zanim zaczniemy ograniczać interfejsy inne niż SDK.
Jeśli Twoja aplikacja nie jest kierowana na Androida 11, niektóre z tych zmian mogą nie mieć na nią wpływu od razu. Obecnie możesz używać niektórych interfejsów spoza pakietu SDK (w zależności od docelowego poziomu interfejsu API aplikacji), ale korzystanie z metod lub pól spoza pakietu SDK zawsze wiąże się z wysokim ryzykiem awarii aplikacji.
Jeśli nie masz pewności, czy Twoja aplikacja używa interfejsów innych niż SDK, możesz przetestować ją, aby się tego dowiedzieć. Jeśli Twoja aplikacja korzysta z interfejsów spoza pakietu SDK, zaplanuj migrację do alternatywnych pakietów SDK. Zdajemy sobie jednak sprawę, że w niektórych przypadkach interfejsy inne niż SDK mogą być przydatne. Jeśli nie możesz znaleźć alternatywy dla interfejsu spoza pakietu SDK, który jest używany w funkcji Twojej aplikacji, poproś o nowy publiczny interfejs API.
Więcej informacji o zmianach w tej wersji Androida znajdziesz w artykule Zmiany ograniczeń interfejsu niebędącego interfejsem pakietu SDK w Androidzie 11. Więcej informacji o interfejsach innych niż SDK znajdziesz w artykule Ograniczenia dotyczące interfejsów innych niż SDK.