Podobnie jak w przypadku poprzednich wersji Androida, w Androidzie 11 wprowadziliśmy zmiany w działaniu, które mogą mieć wpływ na Twoją aplikację. Poniższe zmiany w działaniu dotyczą wyłącznie aplikacji kierowanych na Androida 11 lub nowszego. Jeśli Twoja aplikacja ustawia targetSdkVersion na 30, zmodyfikuj ją, aby w odpowiednich przypadkach prawidłowo obsługiwała te działania.
Zapoznaj się też z listą zmian w działaniu, które wpływają na wszystkie aplikacje działające na Androidzie 11.
Prywatność
Android 11 wprowadza zmiany i ograniczenia, które zwiększają prywatność użytkowników, takie jak:
- Egzekwowanie ograniczonego dostępu do miejsca na dane: dostęp do katalogów w pamięci zewnętrznej jest ograniczony do katalogu aplikacji i określonych typów multimediów utworzonych przez aplikację.
- Automatyczne resetowanie uprawnień: jeśli użytkownicy nie korzystali z aplikacji przez kilka miesięcy, system automatycznie resetuje jej uprawnienia newralgiczne.
- Dostęp do lokalizacji w tle: użytkownicy muszą zostać przekierowani do ustawień systemowych, aby przyznać aplikacjom uprawnienia do lokalizacji w tle.
- Widoczność pakietów: gdy aplikacja wysyła zapytanie o listę aplikacji zainstalowanych na urządzeniu, zwrócona lista jest filtrowana.
Więcej informacji znajdziesz na stronie Prywatność.
Bezpieczeństwo
Tagowanie wskaźników sterty
Szczegóły zmian
Zmień nazwę: NATIVE_HEAP_POINTER_TAGGING
Identyfikator zmiany: 135754954
Jak przełączać
Podczas testowania zgodności 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_NAMEadb shell am compat disable (135754954|NATIVE_HEAP_POINTER_TAGGING) PACKAGE_NAME
Więcej informacji o systemie sprawdzania zgodności i przełączaniu zmian znajdziesz w artykule Testowanie i debugowanie zmian w działaniu platformy w aplikacji.
Wskaźniki sterty mają teraz niezerowy tag w najbardziej znaczącym bajcie (MSB). Aplikacje, które nieprawidłowo używają wskaźników, w tym te, które modyfikują MSB, mogą teraz ulegać awariom lub powodować inne problemy. Ta zmiana jest konieczna, aby obsługiwać przyszły sprzęt z włączonym rozszerzeniem Memory Tagging Extension (MTE) ARM. Więcej informacji znajdziesz w artykule Tagged Pointers (Wskaźniki ze znacznikami).
Aby wyłączyć tę funkcję, zapoznaj się z dokumentacją pliku manifestu allowNativeHeapPointerTagging.
Aktualizacje powiadomień
Niestandardowe powiadomienia wyskakujące w tle są blokowane
Ze względów bezpieczeństwa i w celu zapewnienia użytkownikom wygody system blokuje wyskakujące powiadomienia zawierające widoki niestandardowe, jeśli są one wysyłane w tle przez aplikację kierowaną na Androida 11 lub nowszego. Pamiętaj, że wyskakujące powiadomienia tekstowe są nadal dozwolone. Są to powiadomienia utworzone za pomocą Toast.makeText(), które nie wywołują setView().
Jeśli aplikacja spróbuje opublikować powiadomienie wyskakujące zawierające widok niestandardowy z poziomu tła, system nie wyświetli wiadomości użytkownikowi. Zamiast tego system rejestruje w logcat ten komunikat:
W/NotificationService: Blocking custom toast from package \ <package> due to package not in the foreground
Wywołania zwrotne dotyczące wyskakujących powiadomień
Jeśli chcesz otrzymywać powiadomienia, gdy pojawi się lub zniknie powiadomienie toast (tekstowe lub niestandardowe), użyj metody addCallback(), która została dodana w Androidzie 11.
Zmiany w interfejsie API powiadomień tekstowych
W przypadku aplikacji kierowanych na Androida 11 lub nowszego występują te efekty uboczne związane z powiadomieniami tekstowymi:
getView()zwracanull.- Wartości zwracane przez te metody nie odzwierciedlają rzeczywistych wartości, więc nie należy na nich polegać w aplikacji:
- Te metody nie wykonują żadnych operacji, więc aplikacja nie powinna ich używać:
Połączenia
Ograniczony dostęp do odczytu bazy danych APN
Szczegóły zmian
Zmień nazwę: APN_READING_PERMISSION_CHANGE_ID
Identyfikator zmiany: 124107808
Jak przełączać
Podczas testowania zgodności 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_NAMEadb shell am compat disable (124107808|APN_READING_PERMISSION_CHANGE_ID) PACKAGE_NAME
Więcej informacji o systemie sprawdzania zgodności i przełączaniu zmian znajdziesz w artykule Testowanie i debugowanie zmian w działaniu platformy w aplikacji.
Aplikacje kierowane na Androida 11 wymagają teraz uprawnienia uprzywilejowanego Manifest.permission.WRITE_APN_SETTINGS, aby odczytywać bazę danych APN dostawcy Telephony lub uzyskiwać do niej dostęp. Próba uzyskania dostępu do bazy danych APN bez tego uprawnienia powoduje wyjątek zabezpieczeń.
Ułatwienia dostępu
Deklarowanie interakcji z silnikami TTS w pliku manifestu
Ze względu na zmiany w widoczności pakietów aplikacje kierowane na Androida 11 i wchodzące w interakcję 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>
Deklarowanie użycia przycisku ułatwień dostępu w pliku metadanych
Szczegóły zmian
Zmień nazwę: REQUEST_ACCESSIBILITY_BUTTON_CHANGE
Identyfikator zmiany: 136293963
Jak przełączać
Podczas testowania zgodności 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_NAMEadb shell am compat disable (136293963|REQUEST_ACCESSIBILITY_BUTTON_CHANGE) PACKAGE_NAME
Więcej informacji o systemie sprawdzania zgodności i przełączaniu zmian znajdziesz w artykule Testowanie i debugowanie zmian w działaniu platformy w aplikacji.
Począwszy od Androida 11, usługa ułatwień dostępu nie może deklarować w czasie działania, że jest powiązana z systemowym przyciskiem ułatwień dostępu. Jeśli do właściwości flags obiektu AccessibilityServiceInfo dołączysz AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON, platforma nie będzie przekazywać do Twojej usługi zdarzeń wywołania zwrotnego przycisku ułatwień dostępu.
Aby otrzymywać zdarzenia wywołania zwrotnego ułatwień dostępu w usłudze ułatwień dostępu, użyj pliku metadanych usługi ułatwień dostępu, aby zadeklarować powiązanie usługi z przyciskiem ułatwień dostępu. Uwzględnij wartość flagRequestAccessibilityButton w definicji atrybutu accessibilityFlags. Typowa lokalizacja pliku metadanych usługi ułatwień dostępu to res/raw/accessibilityservice.xml.
Aparat
Działania związane z intencją multimedialną wymagają domyślnego aparatu systemowego
Od Androida 11 tylko fabrycznie zainstalowane systemowe aplikacje aparatu mogą reagować na te działania intencji:
android.media.action.VIDEO_CAPTUREandroid.media.action.IMAGE_CAPTUREandroid.media.action.IMAGE_CAPTURE_SECURE
Jeśli dostępna jest więcej niż 1 fabrycznie zainstalowana systemowa aplikacja aparatu, system wyświetla okno, w którym użytkownik może wybrać aplikację. Jeśli chcesz, aby Twoja aplikacja używała określonej aplikacji aparatu innej firmy do robienia zdjęć lub nagrywania filmów, możesz wyraźnie określić te intencje, ustawiając nazwę pakietu lub komponent intencji.
Pakowanie i instalowanie pakietów aplikacji
Skompresowane pliki zasobów
Szczegóły zmian
Zmień nazwę: RESOURCES_ARSC_COMPRESSED
Identyfikator zmiany: 132742131
Jak przełączać
Podczas testowania zgodności 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_NAMEadb shell am compat disable (132742131|RESOURCES_ARSC_COMPRESSED) PACKAGE_NAME
Więcej informacji o systemie sprawdzania zgodności i przełączaniu zmian znajdziesz w artykule Testowanie i debugowanie zmian w działaniu platformy w aplikacji.
Aplikacji kierowanych na Androida 11 (poziom interfejsu API 30) lub nowszego 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. Jeśli wystąpi którykolwiek z tych warunków, system nie będzie mógł zmapować tego pliku w pamięci. Tabele zasobów, których nie można zmapować w pamięci, muszą zostać odczytane do bufora w pamięci RAM, co powoduje niepotrzebne obciążenie pamięci systemu i znacznie zwiększa wykorzystanie pamięci RAM na urządzeniu.
Jeśli wcześniej używałeś(-aś) skompresowanego pliku resources.arsc, wypróbuj inne strategie, takie jak zmniejszanie zasobów aplikacji lub inne metody zmniejszania, zaciemniania i optymalizowania aplikacji.
Schemat podpisu plików APK w wersji 2 jest teraz wymagany
Aplikacje kierowane na Androida 11 (poziom interfejsu API 30), które są obecnie podpisane tylko przy użyciu schematu podpisu plików APK w wersji 1, muszą być teraz podpisane również przy użyciu schematu podpisu plików 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 podpisywana 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
Firebase JobDispatcher i GCMNetworkManager
Jeśli aplikacja jest kierowana na interfejs API na poziomie 30 lub wyższym, wywołania interfejsów API Firebase JobDispatcher i GcmNetworkManager są wyłączone na urządzeniach z Androidem 6.0 (interfejs API na poziomie 23) lub nowszym. Informacje o migracji znajdziesz w artykułach Migracja z Firebase JobDispatcher do WorkManager i Migracja z GCMNetworkManager do WorkManager.
Rozpoznawanie mowy
Ze względu na zmiany w widoczności pakietów aplikacje kierowane na Androida 11, które korzystają z usługi rozpoznawania mowy, muszą dodać do swoich 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łączać
Podczas testowania zgodności 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_NAMEadb shell am compat disable (119147584|CALLBACK_ON_CLEAR_CHANGE) PACKAGE_NAME
Więcej informacji o systemie sprawdzania zgodności i przełączaniu zmian znajdziesz w artykule Testowanie i debugowanie zmian w działaniu platformy w aplikacji.
W przypadku aplikacji kierowanych na Androida 11 (API na poziomie 30) za każdym razem, gdy wywoływana jest metoda Editor.clear, wywołanie zwrotne jest teraz wykonywane do metody OnSharedPreferenceChangeListener.onSharedPreferenceChanged z kluczem null.
Ograniczenia interfejsów innych niż SDK
Android 11 zawiera zaktualizowane listy ograniczonych interfejsów spoza pakietu SDK, które powstały we współpracy z programistami aplikacji na Androida i na podstawie najnowszych testów wewnętrznych. Zanim ograniczymy dostęp do interfejsów innych niż SDK, staramy się zapewnić publiczne alternatywy.
Jeśli Twoja aplikacja nie jest kierowana na Androida 11, niektóre z tych zmian mogą nie mieć na nią natychmiastowego wpływu. Obecnie możesz używać niektórych interfejsów spoza pakietu SDK (w zależności od docelowego poziomu interfejsu API aplikacji), ale użycie dowolnej metody lub pola spoza pakietu SDK zawsze wiąże się z dużym ryzykiem uszkodzenia aplikacji.
Jeśli nie masz pewności, czy Twoja aplikacja używa interfejsów innych niż SDK, możesz ją przetestować, aby to sprawdzić. Jeśli Twoja aplikacja korzysta z interfejsów innych niż SDK, zacznij planować migrację do alternatywnych rozwiązań SDK. Rozumiemy jednak, że niektóre aplikacje mają uzasadnione przypadki użycia interfejsów spoza pakietu SDK. Jeśli nie możesz znaleźć alternatywy dla interfejsu spoza pakietu SDK w przypadku funkcji w aplikacji, poproś o nowy publiczny interfejs API.
Więcej informacji o zmianach w tej wersji Androida znajdziesz w artykule Aktualizacje ograniczeń interfejsów innych niż SDK w Androidzie 11. Więcej informacji o interfejsach spoza pakietu SDK znajdziesz w artykule Ograniczenia dotyczące interfejsów spoza pakietu SDK.