Platforma Android 11 zawiera zmiany zachowania, które mogą mieć wpływ na Twoją aplikację. Te zmiany zachowania dotyczą wszystkich aplikacji, które działają na Androidzie 11, niezależnie od targetSdkVersion
. Należy przetestować aplikację, a następnie zmodyfikować ją w taki sposób, aby w odpowiednich przypadkach zapewniała prawidłowe działanie tych funkcji.
Zapoznaj się też z listą zmian zachowania, które dotyczą tylko aplikacji kierowanych na Androida 11.
Prywatność
Android 11 wprowadza zmiany i ograniczenia, które zwiększają prywatność użytkowników. Są to m.in.:
- Uprawnienia jednorazowe: pozwalają użytkownikom na tymczasowy dostęp do lokalizacji, mikrofonu i aparatu.
- Widoczność okna z prośbą o uprawnienia: wielokrotne odmowy udzielenia uprawnień oznaczają „nie pytaj ponownie”.
- Sprawdzanie dostępu do danych: uzyskaj informacje o tym, gdzie aplikacja uzyskuje dostęp do danych prywatnych, zarówno w kodzie aplikacji, jak i w kodzie bibliotek zależnych.
- Uprawnienia dla okna alertu systemowego: niektóre klasy aplikacji automatycznie otrzymują uprawnienia
SYSTEM_ALERT_WINDOW
na żądanie. Ponadto intencje zawierające działanie intencyjneACTION_MANAGE_OVERLAY_PERMISSION
zawsze otwierają ekran w ustawieniach systemu. - Stały identyfikator karty SIM: w Androidzie 11 i nowszych dostęp do stałych identyfikatorów ICCID za pomocą metody
getIccId()
jest ograniczony. Metoda zwraca niepusty, pusty ciąg znaków. Aby jednoznacznie zidentyfikować zainstalowaną kartę SIM na urządzeniu, użyj metodygetSubscriptionId()
. Identyfikator subskrypcji zawiera wartość indeksu (zaczyna się od 1) do jednoznacznego identyfikowania zainstalowanych kart SIM, w tym fizycznych i elektronicznych. Wartość tego identyfikatora jest stała dla danej karty SIM, chyba że urządzenie zostanie przywrócone do ustawień fabrycznych.
Więcej informacji znajdziesz na stronie Prywatność.
Powiadomienia o narażeniu na kontakt
Android 11 aktualizuje platformę pod kątem systemu powiadomień o narażeniu na kontakt. Użytkownicy mogą teraz uruchamiać aplikacje powiadomień o narażeniu na kontakt na Androidzie 11 bez konieczności włączania ustawienia lokalizacji urządzenia. Jest to wyjątek tylko w przypadku systemu powiadomień o narażeniu na kontakt, ponieważ został on zaprojektowany w taki sposób, aby aplikacje z jego użyciem nie mogły określać lokalizacji urządzenia przez skanowanie Bluetooth.
Ze względu na ochronę prywatności użytkownika żadne inne aplikacje nie mogą wykonywać skanowania Bluetooth, chyba że ustawienie lokalizacji urządzenia jest włączone, a użytkownik przyznał im dostęp do lokalizacji. Więcej informacji znajdziesz w naszym poście Aktualizacja dotycząca powiadomień o narażeniu na kontakt.
Bezpieczeństwo
Domyślnie gniazda SSL używają mechanizmu SSL Conscrypt
Domyślna implementacja SSLSocket
na Androidzie opiera się na Conscrypt.
Od Androida 11 ta implementacja jest wewnętrznie budowana na podstawie biblioteki SSLEngine
firmy Conscrypt.
Allocator Scudo Hardened
Android 11 używa wewnętrznie przydzielanego alokacji Scudo Hardened do alokacji sterty usług. Scudo może wykrywać i niwelować niektóre rodzaje naruszeń zasad bezpieczeństwa pamięci. Jeśli w raportach o awariach natywnych występują awarie związane ze Scudo (np. Scudo ERROR:
), zapoznaj się z dokumentacją rozwiązywania problemów ze Scudo.
Statystyki użycia aplikacji
Aby lepiej chronić użytkowników, Android 11 przechowuje statystyki dotyczące korzystania z aplikacji przez każdego użytkownika w zaszyfrowanym magazynie danych. Dlatego ani system, ani aplikacje nie mają dostępu do tych danych, chyba że funkcja isUserUnlocked()
zwraca wartość true
, co następuje po wykonaniu jednej z tych czynności:
- Użytkownik odblokowuje urządzenie po raz pierwszy po uruchomieniu systemu.
- Użytkownik przełącza się na swoje konto na urządzeniu.
Jeśli Twoja aplikacja jest już powiązana z instancją UsageStatsManager
, sprawdź, czy wywołujesz metody tego obiektu po odblokowaniu urządzenia przez użytkownika.
W przeciwnym razie interfejs API zwraca wartość null lub pustą.
Obsługa 5G w emulatorze
Android 11 zawiera interfejsy API 5G, które umożliwiają dodawanie do aplikacji najnowocześniejszych funkcji. Aby testować funkcje podczas ich dodawania, możesz skorzystać z nowych możliwości emulatora pakietu Android SDK. Nowa funkcja została dodana w wersji emulatora 30.0.22. Wybór ustawienia sieci 5G spowoduje zmianę
TelephonyDisplayInfo
na OVERRIDE_NETWORK_TYPE_NR_NSA
,
zmiana szacowanej przepustowości i ustawienie pomiaru wykorzystania limitu w celu sprawdzenia, czy aplikacja prawidłowo reaguje na zmiany stanu NET_CAPABILITY_TEMPORARILY_NOT_METERED
.
Wydajność i debugowanie
Debugowanie limitów wywołań interfejsu JobScheduler API
Android 11 zapewnia obsługę debugowania aplikacji w celu identyfikowania potencjalnych wywołań interfejsu API JobScheduler
, które przekroczyły określone limity liczby żądań.
Deweloperzy mogą korzystać z tego narzędzia, aby wykrywać potencjalne problemy z wydajnością. W przypadku aplikacji, w których atrybut pliku manifestu debuggable
ma wartość true, JobScheduler
wywołania interfejsu API, które przekraczają limity częstotliwości, zwracają wartość RESULT_FAILURE
.
Limity są ustawiane w taki sposób, aby nie wpływać na uzasadnione przypadki użycia.
Dezynfektor deskryptorów plików (fdsan)
Android 10 wprowadził fdsan
(oczyszczanie deskryptorów plików).
fdsan
wykrywa nieprawidłowe obchodzenie się z własnością opisu pliku, na przykład użycie po zamknięciu i podwójne zamknięcie. Domyślny tryb aplikacji fdsan
zmienia się w Androidzie 11. Teraz funkcja fdsan
przerywa działanie po wykryciu błędu. Poprzednim działaniem było zarejestrowanie ostrzeżenia i kontynuowanie. Jeśli aplikacja ulega awarii z powodu fdsan
, zapoznaj się z artykułem fdsan documentation
.
Ograniczenia interfejsu innego niż SDK
Android 11 zawiera zaktualizowane listy ograniczonych interfejsów innych niż SDK, które zostały opracowane we współpracy z deweloperami Androida i na podstawie 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 wymaga interfejsów innych niż SDK, zacznij planować migrację na alternatywne wersje 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.
Usunięto bibliotekę udostępnianą Map Google w wersji 1
Wersja 1. biblioteki udostępnionej Map została całkowicie usunięta w Androidzie 11. Ta biblioteka została wycofana i przestała działać w przypadku aplikacji na Androida 10. Aplikacje, które wcześniej korzystały z tej wspólnej biblioteki na urządzeniach z Androidem 9 (poziom interfejsu API 28) lub niższym, powinny zamiast tego używać pakietu SDK Map na Androida.
Interakcje z innymi aplikacjami
Udostępnianie identyfikatorów URI treści
Jeśli Twoja aplikacja udostępnia identyfikator URI treści innej aplikacji, intencja musi przyznawać uprawnienia dostępu do identyfikatora URI przez ustawienie co najmniej jednego z tych flag intencji:
FLAG_GRANT_READ_URI_PERMISSION
i
FLAG_GRANT_WRITE_URI_PERMISSION
.
Dzięki temu, jeśli inna aplikacja jest kierowana na Androida 11, nadal będzie miała dostęp do identyfikatora URI treści. Aplikacja musi zawierać flagi intencji, nawet jeśli identyfikator URI treści jest powiązany z dostawcą treści, którego aplikacja nie jest właścicielem.
Jeśli Twoja aplikacja jest właścicielem dostawcy treści powiązanego z URI treści, sprawdź, czy dostawca treści nie został wyeksportowany. Już zalecamy tę sprawdzoną metodę dotyczącą bezpieczeństwa.
Wczytywanie biblioteki
Wczytywanie wspólnej biblioteki ICU za pomocą ścieżki bezwzględnej
Aplikacje kierowane na interfejs API na poziomie 28 lub niższym nie mogą używać funkcji dlopen(3)
do wczytywania funkcji libicuuc
z ścieżką bezwzględną „/system/lib/libicuuc.so”. W przypadku tych aplikacji funkcja dlopen("/system/lib/libicuuc.so", ...)
zwróci wartość null.
Aby załadować bibliotekę, użyj nazwy biblioteki jako nazwy pliku, na przykład dlopen("libicuuc.so", ...)
.