Podobnie jak w przypadku wcześniejszych wersji Androida, w Androidzie 11 wprowadziliśmy zmiany w działaniu, które mogą mieć wpływ na Twoją aplikację. Poniższe zmiany dotyczą wyłącznie aplikacji kierowanych na Androida 11 lub nowszego. Jeśli Twoja aplikacja ustawia wartość targetSdkVersion
na 30
, musisz ją zmodyfikować, aby w odpowiednich przypadkach prawidłowo obsługiwała te zachowania.
Zapoznaj się też z listą zmian w zachowaniu, które mają wpływ na wszystkie aplikacje działające na Androidzie 11.
Prywatność
Android 11 wprowadza zmiany i ograniczenia, które zwiększają prywatność użytkowników. Obejmują one m.in.:
- Wymuszanie korzystania z zakresowego miejsca na dane: dostęp do katalogó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 korzystają z aplikacji przez kilka miesięcy, system automatycznie resetuje jej uprawnienia dostępu do danych wrażliwych.
- Dostęp do lokalizacji w tle: użytkownicy muszą być kierowani do ustawień systemu, aby przyznać aplikacjom uprawnienia 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ź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_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 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ą starszy bit, mogą teraz ulegać awariom lub powodować inne problemy. Ta zmiana jest konieczna, aby obsługiwać przyszłe urządzenia z włączonym rozszerzeniem Memory Tagging Extension (MTE) architektury ARM. Więcej informacji znajdziesz w artykule Wskaźniki z tagami.
Aby wyłączyć tę funkcję, zapoznaj się z allowNativeHeapPointerTagging
dokumentacją pliku manifestu.
Zmiany w powiadomieniach
Niestandardowe powiadomienia z tła są blokowane
Ze względów bezpieczeństwa i w celu zapewnienia użytkownikom komfortu system blokuje wysyłane w tle przez aplikacje kierowane na Androida 11 lub nowszego komunikaty typu toast zawierające niestandardowe widoki. Pamiętaj, że nadal dozwolone są wyskakujące wiadomości tekstowe. Są to wiadomości utworzone za pomocą Toast.makeText()
, które nie wywołują setView()
.
Jeśli aplikacja spróbuje opublikować toast zawierający widok niestandardowy w tle, system nie wyświetli użytkownikowi tego komunikatu. Zamiast tego system rejestruje w logcat następujący komunikat:
W/NotificationService: Blocking custom toast from package \ <package> due to package not in the foreground
Wywołania zwrotne dotyczące powiadomień
Jeśli chcesz otrzymywać powiadomienia o wyświetlaniu lub zamykaniu wyskakujących okienek (tekstowych lub niestandardowych), użyj metody addCallback()
, która została dodana w Androidzie 11.
Zmiany w interfejsie API powiadomień tekstowych
Aplikacje kierowane na Androida 11 lub nowszego mają następujące efekty uboczne w przypadku toastów tekstowych:
- Metoda
getView()
zwracanull
. - Wartości zwracane przez te metody nie odzwierciedlają rzeczywistych wartości, więc nie należy na nich polegać w aplikacji:
- Poniższe metody nie wykonują żadnych działań, 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 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_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 Testowanie i debugowanie zmian w działaniu platformy w aplikacji.
Aplikacje kierowane na Androida 11 wymagają teraz uprawnienia Manifest.permission.WRITE_APN_SETTINGS
z poziomu uprzywilejowanego, aby odczytywać bazę danych APN dostawcy telefonii lub uzyskiwać do niej dostęp. Próba uzyskania dostępu do bazy danych APN bez tego uprawnienia powoduje wyjątek bezpieczeństwa.
Ułatwienia dostępu
Deklarowanie interakcji z silnikami TTS w pliku manifestu
Ze względu na zmiany w widoczności pakietów aplikacje, które są przeznaczone na Androida 11 i korzystają z silnika zamiany tekstu na mowę, muszą dodać do plików manifestu ten 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_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 Testowanie i debugowanie zmian w działaniu 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 systemowym przyciskiem ułatwień dostępu. Jeśli do właściwości flags
obiektu AccessibilityServiceInfo
dodasz 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ć w usłudze ułatwień dostępu zdarzenia wywołania zwrotnego związane z ułatwieniami dostępu, użyj pliku metadanych usługi ułatwień dostępu, aby zadeklarować powiązanie usługi z przyciskiem ułatwień dostępu. W definicji atrybutu accessibilityFlags
uwzględnij wartość flagRequestAccessibilityButton
. Typowa lokalizacja pliku metadanych usługi ułatwień dostępu to res/raw/accessibilityservice.xml
.
Aparat
Działania związane z intencją multimediów wymagają domyślnej kamery systemowej
Od Androida 11 tylko wstępnie zainstalowane aplikacje systemowe aparatu mogą odpowiadać na te działania intencji:
android.media.action.VIDEO_CAPTURE
android.media.action.IMAGE_CAPTURE
android.media.action.IMAGE_CAPTURE_SECURE
Jeśli dostępnych jest więcej niż jedna wstępnie zainstalowana systemowa aplikacja aparatu, system wyświetla okno dialogowe, w którym użytkownik może wybrać aplikację. Jeśli chcesz, aby Twoja aplikacja używała konkretnej aplikacji aparatu innej firmy do robienia zdjęć lub nagrywania filmów w jej imieniu, możesz określić te intencje, ustawiając nazwę pakietu lub komponent intencji.
Pakowanie i instalowanie 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_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 Testowanie i debugowanie zmian w działaniu platformy w aplikacji.
Aplikacji kierowanych na Androida 11 (poziom 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-bajtowej. System nie może mapować tego pliku do pamięci, jeśli występuje którykolwiek 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 systemu i znacznie zwiększa wykorzystanie pamięci RAM na urządzeniu.
Jeśli wcześniej używasz skompresowanego pliku resources.arsc
, wypróbuj inne strategie, np. zmniejszanie zasobów aplikacji lub inne metody zmniejszania, zaciemniania i optymalizowania aplikacji.
Schemat podpisywania plików APK w wersji 2 jest teraz wymagany
Aplikacje, których docelowy poziom interfejsu API to Android 11 (poziom API 30) i 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, które są podpisane tylko przy użyciu 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ć Androida Studio lub narzędzia apksigner
w wierszu poleceń.
Firebase
Firebase JobDispatcher i GCMNetworkManager
Jeśli Twoja aplikacja jest kierowana na interfejs API na poziomie 30 lub wyższym, wywołania interfejsów API FirebaseJobDispatcher i GcmNetworkManager 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 WorkManagera i Migracja z GCMNetworkManager do WorkManagera.
Rozpoznawanie mowy
Ze względu na zmiany w widoczności pakietu aplikacje, które są przeznaczone na Androida 11 i korzystają 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 w przypadku 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_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 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 funkcja
Editor.clear
, wywoływane jest wywołanie zwrotne do funkcji
OnSharedPreferenceChangeListener.onSharedPreferenceChanged
z kluczem null
.
Ograniczenia interfejsu innego niż SDK
Android 11 zawiera zaktualizowane listy ograniczonych interfejsów innych niż SDK, które powstały w wyniku współpracy z programistami Androida i najnowszych testów wewnętrznych. W miarę możliwości przed ograniczeniem interfejsów innych niż SDK udostępniamy 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 SDK (w zależności od docelowego poziomu interfejsu API aplikacji), ale korzystanie z dowolnej metody lub pola spoza 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 to sprawdzić, testując ją. Jeśli Twoja aplikacja korzysta z interfejsów spoza SDK, zacznij planować migrację na alternatywne rozwiązania SDK. Rozumiemy jednak, że w przypadku niektórych aplikacji używanie interfejsów innych niż SDK jest uzasadnione. Jeśli nie możesz znaleźć alternatywy dla używania interfejsu innego niż 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 innych niż SDK znajdziesz w artykule Ograniczenia dotyczące interfejsów innych niż SDK.