Podobnie jak we wcześniejszych wersjach, Android 11 wprowadza zmiany w działaniu, które mogą wpłynąć na Twoją aplikację. Poniższe zmiany w działaniu dotyczą tylko aplikacji kierowanych na Androida 11 lub nowszego. Jeśli aplikacja ustawia targetSdkVersion
na 30
, w stosownych przypadkach musisz ją zmodyfikować, aby prawidłowo obsługiwała te zachowania.
Zapoznaj się też z listą zmian w działaniu, które wpływają na wszystkie aplikacje działające na Androidzie 11.
prywatność
Aby zwiększyć prywatność użytkowników, wprowadzamy zmiany i ograniczenia w Androidzie 11 takie jak:
- Wymuszanie zakresu miejsca na dane: dostęp do katalogów w pamięci zewnętrznej jest ograniczony do katalogu związanego z aplikacją i konkretnych typów multimediów utworzonych przez tę aplikację.
- Automatyczne resetowanie uprawnień: jeśli użytkownicy nie korzystali z aplikacji przez kilka miesięcy, system automatycznie resetuje wrażliwe uprawnienia aplikacji.
- Dostęp do lokalizacji w tle: aby przyznać aplikacjom dostęp do lokalizacji w tle, użytkownicy muszą zostać przekierowani do ustawień systemu.
- Widoczność pakietów: gdy aplikacja wysyła zapytanie o listę aplikacji zainstalowanych na urządzeniu, zwracana lista jest filtrowana.
Więcej informacji znajdziesz na stronie Prywatność.
Zabezpieczenia
Tagowanie wskaźników sterty
Szczegóły zmian
Zmień nazwę: NATIVE_HEAP_POINTER_TAGGING
Identyfikator zmiany: 135754954
Jak przełączyć
Testując zgodność aplikacji z Androidem 11, możesz włączać i wyłączać tę zmianę za pomocą 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 platformie zgodności i przełączaniu zmian znajdziesz w artykule o testowaniu i debugowaniu zmian działania platformy w aplikacji.
Wskaźniki sterty mają teraz tag większy od zera w najważniejszym bajcie (MSB). Aplikacje, które używają wskaźników nieprawidłowo, w tym te, które modyfikują plik MSB, mogą teraz ulegać awariom lub napotykać inne problemy. Ta zmiana jest niezbędna do obsługi przyszłych urządzeń z włączonym rozszerzeniem ARM Memory Tagging Extension (MTE). Więcej informacji znajdziesz w artykule otagowane wskaźniki.
Aby wyłączyć tę funkcję, zapoznaj się z dokumentacją pliku manifestu allowNativeHeapPointerTagging
.
Powiadomienia o komunikatach
Niestandardowe powiadomienia typu toast są blokowane w tle
Ze względów bezpieczeństwa oraz dla wygody użytkowników system blokuje powiadomienia z widokami niestandardowymi, jeśli są one wysyłane w tle przez aplikację powiązaną z Androidem 11 lub nowszym. Pamiętaj, że toasty tekstowe nadal są dozwolone. Są to reklamy utworzone za pomocą parametru Toast.makeText()
, które nie wywołują metody setView()
.
Jeśli mimo to aplikacja spróbuje opublikować tosty z widokiem niestandardowym w tle, system nie wyświetli komunikatu użytkownikowi. Zamiast tego system zarejestruje w logcat następujący komunikat:
W/NotificationService: Blocking custom toast from package \ <package> due to package not in the foreground
Toast wywołania zwrotne
Jeśli chcesz otrzymywać powiadomienia, gdy pojawi się lub zniknie komunikat (tekstowy lub niestandardowy), użyj metody addCallback()
, która została dodana w Androidzie 11.
Zmiany interfejsu Text toast API
Aplikacje kierowane na Androida 11 lub nowszego mają takie efekty uboczne:
- Metoda
getView()
zwraca wartośćnull
. - Zwracane wartości poniższych metod nie odzwierciedlają rzeczywistych wartości, więc nie należy ich polegać w aplikacji:
- Te metody nie są obsługiwane, więc nie należy ich używać w aplikacji:
Połączenia
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 przełączyć
Testując zgodność aplikacji z Androidem 11, możesz włączać i wyłączać tę zmianę za pomocą 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 platformie zgodności i przełączaniu zmian znajdziesz w artykule o testowaniu i debugowaniu zmian działania platformy w aplikacji.
Aplikacje kierowane na Androida 11 wymagają teraz uprawnień Manifest.permission.WRITE_APN_SETTINGS
z podwyższonymi uprawnieniami do odczytu bazy danych APN dostawcy usług telefonicznych lub uzyskiwania do niej dostępu. Próba uzyskania dostępu do bazy danych APN bez tego uprawnienia generuje wyjątek zabezpieczeń.
Ułatwienia dostępu
Zadeklaruj w pliku manifestu interakcję z mechanizmami zamiany tekstu na mowę
Ze względu na zmiany w widoczności pakietu aplikacje kierowane na Androida 11 i obsługujące mechanizm przetwarzania tekstu na mowę muszą dodać do plików manifestu ten 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 przełączyć
Testując zgodność aplikacji z Androidem 11, możesz włączać i wyłączać tę zmianę za pomocą 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 platformie zgodności i przełączaniu zmian znajdziesz w artykule o testowaniu i debugowaniu zmian działania platformy w aplikacji.
Począwszy od Androida 11 usługa ułatwień dostępu nie może tworzyć deklaracji w czasie działania, w których jest powiązanie z systemowym przyciskiem ułatwień dostępu. Jeśli dołączysz AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON
do właściwości flags
obiektu AccessibilityServiceInfo
, platforma nie będzie przekazywać do Twojej usługi zdarzeń wywołania zwrotnego przycisku ułatwień dostępu.
Aby odbierać zdarzenia wywołania zwrotnego ułatwień dostępu w usłudze ułatwień dostępu, zadeklaruj powiązanie usługi z przyciskiem ułatwień dostępu w pliku metadanych tej usługi. Podaj wartość flagRequestAccessibilityButton
w swojej definicji atrybutu accessibilityFlags
. Częstą lokalizacją pliku metadanych usługi ułatwień dostępu jest res/raw/accessibilityservice.xml
.
Aparat
Działania dotyczące intencji związanych z multimediami wymagają domyślnej kamery systemu
Począwszy od Androida 11 tylko fabrycznie zainstalowane aplikacje aparatu mogą reagować na te działania intencji:
android.media.action.VIDEO_CAPTURE
android.media.action.IMAGE_CAPTURE
android.media.action.IMAGE_CAPTURE_SECURE
Jeśli dostępna jest więcej niż 1 zainstalowana fabrycznie aplikacja aparatu, system wyświetla użytkownikowi okno, w którym może wybrać aplikację. Jeśli chcesz, aby aplikacja używała określonej aplikacji aparatu innej firmy do robienia zdjęć lub filmów w jej imieniu, możesz wyraźnie wskazać te intencje, podając nazwę pakietu lub komponent na potrzeby danego zamiaru.
Pakowanie i instalacja aplikacji
Skompresowane pliki zasobów
Szczegóły zmian
Zmień nazwę: RESOURCES_ARSC_COMPRESSED
Identyfikator zmiany: 132742131
Jak przełączyć
Testując zgodność aplikacji z Androidem 11, możesz włączać i wyłączać tę zmianę za pomocą 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 platformie zgodności i przełączaniu zmian znajdziesz w artykule o testowaniu i debugowaniu zmian działania platformy w aplikacji.
Nie można zainstalować aplikacji kierowanych na Androida 11 (poziom interfejsu API 30) lub nowszego, jeśli zawierają skompresowany plik resources.arsc
lub nie jest on wyrównany na granicy 4-bajtowej. System nie może zmapować tego pliku na pamięć, jeśli występuje 1 z tych warunków. Tabele zasobów, których nie można zmapować na pamięć, muszą być odczytywane do bufora w pamięci RAM, co powoduje niepotrzebne obciążenie systemu i znacznie większe wykorzystanie pamięci RAM na urządzeniu.
Jeśli wcześniej używany był skompresowany plik resources.arsc
, wypróbuj inne strategie, takie jak zmniejszanie zasobów aplikacji lub inne metody zmniejszania, zaciemniania i optymalizowania aplikacji.
Schemat podpisu pliku APK w wersji 2 jest teraz wymagany
Aplikacje kierowane na Androida 11 (poziom interfejsu API 30), które są obecnie podpisane tylko z użyciem schematu podpisu APK w wersji 1, muszą być teraz podpisywane przy użyciu schematu podpisywania plików APK w wersji 2 lub nowszej. Na urządzeniach z Androidem 11 użytkownicy nie mogą instalować ani aktualizować aplikacji podpisanych tylko za pomocą schematu podpisu plików APK w wersji 1.
Aby sprawdzić, czy aplikacja jest podpisana za pomocą schematu podpisu plików APK w wersji 2 lub nowszej, możesz użyć Android Studio lub narzędzia apksigner
w wierszu poleceń.
Firebase
JobDispatcher i GCMNetworkManager
Jeśli Twoja aplikacja jest kierowana na interfejs API na poziomie 30 lub wyższym, wywołania interfejsów API Firebase JobDispatcher i GcmNetworkManager będą wyłączone na urządzeniach z Androidem 6.0 (poziom API 23) lub nowszym. Informacje o migracji znajdziesz w artykułach na temat migracji z Firebase JobDispatcher do WorkManagera i Migracja z GCMNetworkManager do WorkManagera.
Rozpoznawanie mowy
Ze względu na zmiany w widoczności pakietu aplikacje kierowane na Androida 11 i korzystające z usługi rozpoznawania mowy muszą dodać do plików manifestu ten element <queries>
:
<queries> <intent> <action android:name="android.speech.RecognitionService" /> </intent> </queries>
Zmiany wywołania zwrotnego dla OnSharedPreferenceChangeListener
Szczegóły zmian
Zmień nazwę: CALLBACK_ON_CLEAR_CHANGE
Identyfikator zmiany: 119147584
Jak przełączyć
Testując zgodność aplikacji z Androidem 11, możesz włączać i wyłączać tę zmianę za pomocą 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 platformie zgodności i przełączaniu zmian znajdziesz w artykule o testowaniu i debugowaniu zmian działania platformy w aplikacji.
W przypadku aplikacji kierowanych na Androida 11 (poziom interfejsu API 30) za każdym razem, gdy wywoływana jest metoda Editor.clear
, następuje wywołanie zwrotne do OnSharedPreferenceChangeListener.onSharedPreferenceChanged
z kluczem null
.
Ograniczenia interfejsu innego niż SDK
Android 11 zawiera zaktualizowane listy podlegających ograniczeniom interfejsów spoza pakietu SDK opracowane na podstawie współpracy z deweloperami aplikacji na Androida i najnowszych testów wewnętrznych. Zanim ograniczymy dostęp do interfejsów spoza SDK, dbamy o to, aby w miarę możliwości dostępne były publiczne alternatywy.
Jeśli Twoja aplikacja nie jest kierowana na Androida 11, niektóre z tych zmian mogą Cię nie dotyczyć. Mimo że obecnie możesz używać niektórych interfejsów spoza pakietu SDK (w zależności od docelowego poziomu interfejsu API aplikacji), korzystanie z dowolnych metod lub pól spoza pakietu SDK niesie ze sobą wysokie ryzyko awarii aplikacji.
Jeśli nie masz pewności, czy Twoja aplikacja korzysta z interfejsów innych niż SDK, możesz przetestować ją, aby to sprawdzić. Jeśli Twoja aplikacja korzysta z interfejsów innych niż SDK, zacznij planować migrację do alternatywnych pakietów SDK. Zdajemy sobie jednak sprawę, że niektóre aplikacje mają odpowiednie przypadki użycia w zakresie interfejsów spoza SDK. Jeśli nie możesz znaleźć alternatywy dla interfejsu innego niż SDK dla funkcji w aplikacji, poproś o nowy publiczny interfejs API.
Więcej informacji o zmianach w tej wersji Androida znajdziesz w artykule Aktualizacje ograniczeń interfejsu spoza pakietu SDK w Androidzie 11. Więcej informacji o interfejsach innych niż SDK znajdziesz w artykule Ograniczenia interfejsów innych niż SDK.