Podobnie jak w poprzednich wersjach Android 11 zawiera zmiany w działaniu aplikacji, które mogą mieć wpływ na Twoją aplikację. Poniższe zmiany w działaniu dotyczą tylko aplikacji kierowanych na Androida 11 lub nowszego. Jeśli Twoja aplikacja ustawia targetSdkVersion
na 30
, zmodyfikuj aplikację, aby w razie potrzeby prawidłowo obsługiwała te zachowania.
Zapoznaj się też z listą zmian w działaniu, które wpływają na wszystkie aplikacje na Androidzie 11.
Prywatność
Android 11 wprowadza zmiany i ograniczenia mające na celu zwiększenie prywatności użytkowników. Oto niektóre z nich:
- Wymuszanie zakresu miejsca na dane: dostęp do zewnętrznych katalogów pamięci masowej jest ograniczony do katalogu danej aplikacji i utworzonych przez nią typów multimediów.
- Automatyczne resetowanie uprawnień: jeśli użytkownicy nie korzystają 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ą być przekierowywani do ustawień systemu.
- 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ść.
Zabezpieczenia
Tagowanie wskaźnika sterty
Szczegóły zmian
Zmiana nazwy: NATIVE_HEAP_POINTER_TAGGING
Zmień identyfikator: 135754954
Jak przełączać
Jeśli testujesz zgodność aplikacji z Androidem 11, możesz włączyć lub wyłączyć tę zmianę, używając 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łączanie zmian znajdziesz w artykule o testowaniu i debugowaniu zmian w działaniu platformy w aplikacji.
Wskaźniki sterty mają teraz tag o wartości innej niż 0 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 napotkać inne problemy. Ta zmiana jest niezbędna, aby zapewnić obsługę przyszłego sprzętu z włączonym rozszerzeniem ARM Memory Tagging Extension (MTE). Więcej informacji znajdziesz w sekcji Otagowane wskaźniki.
Aby wyłączyć tę funkcję, zapoznaj się z dokumentacją allowNativeHeapPointerTagging
w pliku manifestu.
Aktualizacje powiadomień
Niestandardowe powiadomienia z tle są blokowane
Ze względów bezpieczeństwa i w trosce o wygodę użytkowników system blokuje powiadomienia zawierające widoki niestandardowe, jeśli są one wysyłane w tle przez aplikację kierowaną na Androida 11 lub nowszego. Pamiętaj, że powiadomienia tekstowe są nadal dozwolone. Są to powiadomienia utworzone za pomocą funkcji Toast.makeText()
, które nie wywołują setView()
.
Jeśli aplikacja mimo to próbuje opublikować toast z widokiem niestandardowym w tle, system nie wyświetli go 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
Jeśli chcesz otrzymywać powiadomienia, gdy pojawi się lub zniknie powiadomienie (tekstowe lub niestandardowe), użyj metody addCallback()
dodanej w Androidzie 11.
Zmiany interfejsu API powiadomień tekstowych
Aplikacje kierowane na Androida 11 lub nowszego mogą zaobserwować te efekty uboczne powiadomień tekstowych:
- Metoda
getView()
zwracanull
. - Wartości zwracane przez poniższe metody nie odzwierciedlają wartości rzeczywistych, dlatego nie należy polegać na nich w swojej aplikacji:
- Te metody nie działają, więc aplikacja nie powinna z nich korzystać:
Połączenia
Ograniczony dostęp z możliwością odczytu do bazy danych APN
Szczegóły zmian
Zmiana nazwy: APN_READING_PERMISSION_CHANGE_ID
Zmień identyfikator: 124107808
Jak przełączać
Jeśli testujesz zgodność aplikacji z Androidem 11, możesz włączyć lub wyłączyć tę zmianę, używając 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łączanie zmian znajdziesz w artykule o testowaniu i debugowaniu zmian w działaniu platformy w aplikacji.
Aplikacje kierowane na Androida 11 wymagają teraz uprawnień Manifest.permission.WRITE_APN_SETTINGS
do odczytu bazy danych APN dostawcy usług telefonicznych i uzyskiwania do niej dostępu. Próba uzyskania dostępu do bazy danych APN bez tego uprawnienia spowoduje wygenerowanie wyjątku od zabezpieczeń.
Ułatwienia dostępu
Zadeklarowanie interakcji z mechanizmami zamiany tekstu na mowę w pliku manifestu
Ze względu na zmiany w widoczności pakietu aplikacje kierowane na Androida 11 i korzystające z mechanizmu 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
Zmiana nazwy: REQUEST_ACCESSIBILITY_BUTTON_CHANGE
Zmień identyfikator: 136293963
Jak przełączać
Jeśli testujesz zgodność aplikacji z Androidem 11, możesz włączyć lub wyłączyć tę zmianę, używając 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łączanie zmian znajdziesz w artykule o testowaniu i debugowaniu 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 aplikacji, że ma 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 przekaże do Twojej usługi zdarzeń wywołania zwrotnego przycisku ułatwień dostępu.
Aby otrzymywać zdarzenia wywołań zwrotnych ułatwień dostępu w usłudze ułatwień dostępu, użyj pliku metadanych usługi ułatwień dostępu i zadeklaruj powiązanie usługi z przyciskiem ułatwień dostępu. Umieść 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 związane z intencją multimediów wymagają domyślnego aparatu systemu
Począwszy od Androida 11 tylko wstępnie zainstalowane systemowe 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 systemowego, system wyświetla okno, w którym użytkownik może wybrać aplikację. Jeśli chcesz, aby aplikacja używała konkretnej aplikacji aparatu innej firmy do robienia zdjęć i filmów w jej imieniu, możesz określić te intencje, określając nazwę pakietu lub komponent.
Opakowanie i instalacja aplikacji
Skompresowane pliki zasobów
Szczegóły zmian
Zmiana nazwy: RESOURCES_ARSC_COMPRESSED
Zmień identyfikator: 132742131
Jak przełączać
Jeśli testujesz zgodność aplikacji z Androidem 11, możesz włączyć lub wyłączyć tę zmianę, używając 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łączanie zmian znajdziesz w artykule o testowaniu i debugowaniu zmian w działaniu platformy w aplikacji.
Aplikacji kierowanych na Androida 11 (poziom interfejsu API 30) lub nowszego nie można instalować, jeśli zawierają skompresowany plik resources.arsc
lub ten plik nie jest wyrównany na 4-bajtowej granicy. System nie może zmapować tego pliku w pamięci, jeśli występuje jeden z tych warunków. Tabele zasobów, których nie można mapować w pamięci, muszą być odczytywane w buforze w ramach pamięci RAM, co powoduje niepotrzebne obciążenie pamięci i znacznie zwiększone wykorzystanie pamięci RAM przez urządzenie.
Jeśli wcześniej był używany skompresowany plik resources.arsc
, wypróbuj alternatywne strategie, takie jak zmniejszanie zasobów aplikacji lub inne metody zmniejszania, zaciemniania i optymalizowania aplikacji.
Teraz wymagany schemat podpisu pliku APK w wersji 2
Aplikacje kierowane na Androida 11 (poziom interfejsu API 30), które są obecnie podpisane tylko z użyciem schematu podpisu pliku APK w wersji 1, muszą teraz być też podpisane przy użyciu schematu podpisu pliku APK w wersji 2 lub nowszej. Użytkownicy nie mogą instalować ani aktualizować aplikacji podpisanych tylko przy użyciu schematu podpisu w wersji 1 pliku APK na urządzeniach z Androidem 11.
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
Firebase JobDispatcher i GCMNetworkManager
Jeśli Twoja aplikacja jest kierowana na interfejs API na poziomie 30 lub wyższym, wywołania interfejsu Firebase JobDispatcher i GcmNetworkManager API są wyłączone na urządzeniach z Androidem 6.0 (poziom interfejsu API 23) lub nowszym. Informacje o migracji znajdziesz w sekcjach 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 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łań zwrotnych dla OnSharedPreferenceChangeListener
Szczegóły zmian
Zmiana nazwy: CALLBACK_ON_CLEAR_CHANGE
Zmień identyfikator: 119147584
Jak przełączać
Jeśli testujesz zgodność aplikacji z Androidem 11, możesz włączyć lub wyłączyć tę zmianę, używając 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łączanie zmian znajdziesz w artykule o testowaniu i debugowaniu zmian w działaniu platformy w aplikacji.
W przypadku aplikacji kierowanych na Androida 11 (poziom interfejsu API 30) każde wywołanie Editor.clear
powoduje teraz wywołanie zwrotne do OnSharedPreferenceChangeListener.onSharedPreferenceChanged
z kluczem null
.
Ograniczenia interfejsu spoza SDK
Android 11 zawiera zaktualizowane listy ograniczonych interfejsów spoza pakietu SDK przygotowane na podstawie współpracy z deweloperami aplikacji na Androida i najnowszych testów wewnętrznych. W miarę możliwości dbamy o to, aby dostępne były publiczne alternatywy, zanim ograniczymy dostęp do interfejsów innych niż SDK.
Jeśli Twoja aplikacja nie jest kierowana na Androida 11, niektóre z tych zmian mogą nie od razu Cię dotyczyć. Mimo że obecnie można korzystać z niektórych interfejsów innych niż SDK (w zależności od docelowego poziomu interfejsu API aplikacji), 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 korzysta z interfejsów innych niż SDK, możesz to przetestować. Jeśli Twoja aplikacja wymaga interfejsów innych niż SDK, zacznij planować migrację na alternatywne wersje pakietów SDK. Zdajemy sobie jednak sprawę, że niektóre aplikacje mogą prawidłowo korzystać z interfejsów innych niż SDK. Jeśli nie możesz znaleźć w swojej aplikacji interfejsu innego niż interfejs SDK, musisz poprosić o nowy publiczny interfejs API.
Więcej informacji o zmianach wprowadzonych w tej wersji Androida znajdziesz w artykule Aktualizacje ograniczeń interfejsu 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.