Platforma Android 11 obejmuje zmiany w działaniu, które mogą mieć wpływ na Twoją aplikację. Poniższe zmiany w działaniu mają zastosowanie do wszystkich aplikacji działających na Androidzie 11 niezależnie od wersji targetSdkVersion
. Przetestuj aplikację, a następnie w razie potrzeby zmodyfikuj ją, aby obsługiwała te funkcje.
Przejrzyj też listę zmian w działaniu, które dotyczą tylko aplikacji kierowanych na Androida 11.
Prywatność
Android 11 wprowadza zmiany i ograniczenia mające na celu zwiększenie prywatności użytkowników. Oto niektóre z nich:
- Uprawnienia jednorazowe: pozwala użytkownikom na tymczasowy dostęp do lokalizacji, mikrofonu i aparatu.
- Widoczność okna uprawnień: powtarzające się odmowy przyznania uprawnień oznaczają, że nie pytaj ponownie.
- Kontrola dostępu do danych: dowiedz się, gdzie Twoja aplikacja uzyskuje dostęp do danych prywatnych – zarówno w kodzie samej aplikacji, jak i w kodzie bibliotek zależnych.
- Uprawnienia okna alertu systemowego: niektóre klasy aplikacji automatycznie otrzymują uprawnienie
SYSTEM_ALERT_WINDOW
na żądanie. Dodatkowo intencje zawierające działanie z zamiaremACTION_MANAGE_OVERLAY_PERMISSION
zawsze powodują wyświetlenie ekranu w ustawieniach systemu. - Trwałe identyfikatory SIM:
Na Androidzie 11 i nowszych dostęp do identyfikatorów ICCID, których nie można zresetować, za pomocą metody
getIccId()
jest ograniczony. Ta metoda zwraca pusty ciąg znaków, który nie jest pusty. 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 z powiadomieniami 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ł zaprojektowany w taki sposób, że korzystające z niego aplikacje nie mogą określić lokalizacji urządzenia za pomocą skanowania 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.
Zabezpieczenia
Gniazda SSL domyślnie używają mechanizmu SSL Conscrypt
Domyślna implementacja SSLSocket
na Androidzie opiera się na Conscrypt.
Od Androida 11 ta implementacja jest wewnętrznie wbudowana w zasadę SSLEngine
Conscrypt.
Alokator o wzmocnieniu Scudo
Android 11 używa wewnętrznie przydzielanego alokacji Scudo Hardened do alokacji sterty usług. Scudo może wykrywać i łagodzić niektóre typy naruszeń 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żytkowania aplikacji
Aby lepiej chronić użytkowników, Android 11 przechowuje statystyki użytkowania aplikacji każdego użytkownika w pamięci zaszyfrowanej z danymi uwierzytelniającymi. Dlatego ani system, ani aplikacje nie mają dostępu do tych danych, chyba że isUserUnlocked()
zwróci wartość true
, która ma miejsce, gdy wystąpi jedna z tych sytuacji:
- 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 dla tego obiektu, gdy użytkownik odblokuje urządzenie.
W przeciwnym razie interfejs API zwraca teraz puste wartości.
Obsługa emulatora sieci 5G
Android 11 dodaje interfejsy API 5G, dzięki którym Twoje aplikacje mogą korzystać z najnowocześniejszych funkcji. Aby testować funkcje podczas ich dodawania, możesz skorzystać z nowych możliwości emulatora pakietu Android SDK. Nowe funkcje zostały dodane w emulatorze w wersji 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ń.
Mogą z niego korzystać deweloperzy, aby wykrywać potencjalne problemy z wydajnością. W przypadku aplikacji z atrybutem manifestu debuggable
ustawionym na wartość „prawda” wywołania interfejsu API JobScheduler
wykraczające poza limity liczby żądań zwracają RESULT_FAILURE
.
Limity są ustawione w taki sposób, że nie powinno to mieć wpływu na uzasadnione przypadki użycia.
Sanitizer deskryptora plików (fdsan)
W Androidzie 10 wprowadzono fdsan
(narzędzie do dezynfekcji deskryptorów plików).
fdsan
wykrywa nieprawidłową obsługę własności deskryptora pliku, na przykład użycie po zamknięciu i podwójne zamknięcie. Zmienia się tryb domyślny w aplikacji fdsan
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 w swojej aplikacji widzisz awarie z powodu błędu fdsan
, zapoznaj się z tymi informacjami: fdsan documentation
.
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.
Usunięto bibliotekę udostępnianą Map Google w wersji 1
W Androidzie 11 całkowicie usunęliśmy wersję 1 biblioteki udostępnionej Map. Ta biblioteka została wcześniej wycofana i przestała działać w aplikacjach na Androida 10. Aplikacje, które wcześniej korzystały z tej biblioteki współdzielonej na urządzeniach z Androidem 9 (poziom interfejsu API 28) lub starszym, powinny używać pakietu SDK Map Google na Androida.
Interakcja z innymi aplikacjami
Identyfikatory URI treści udostępniania
Jeśli aplikacja udostępnia identyfikator URI treści innej aplikacji, intencja musi przyznać uprawnienia dostępu do identyfikatora URI przez ustawienie co najmniej 1 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 wtedy, gdy identyfikator URI treści jest powiązany z dostawcą treści, który nie należy do niej.
Jeśli Twoja aplikacja jest właścicielem dostawcy treści powiązanego z identyfikatorem URI treści, sprawdź, czy dostawca treści nie jest eksportowany. Już zalecamy tę sprawdzoną metodę dotyczącą bezpieczeństwa.
Wczytuję bibliotekę
Wczytuję bibliotekę wspólnej OIOM ze ścieżką bezwzględną
Aplikacje kierowane na interfejs API w wersji 28 lub starszej nie mogą używać interfejsu dlopen(3)
do wczytywania pliku libicuuc
ze ścieżką bezwzględną „/system/lib/libicuuc.so”. W przypadku tych aplikacji dlopen("/system/lib/libicuuc.so", ...)
zwraca uchwyt o wartości null.
Aby wczytać bibliotekę, jako nazwy pliku użyj nazwy biblioteki, np. dlopen("libicuuc.so", ...)
.