Zmiany w działaniu: wszystkie aplikacje

Platforma Androida 11 wprowadza zmiany w działaniu, które mogą wpłynąć na Twoją aplikację. Podane niżej zmiany w działaniu dotyczą wszystkich aplikacji działających na Androidzie 11 (niezależnie od ustawień targetSdkVersion). Przetestuj aplikację, a potem w razie potrzeby zmodyfikuj ją, aby prawidłowo je obsługuje.

Zapoznaj się też z listą zmian w działaniu, które mają wpływ tylko na aplikacje kierowane na Androida 11.

prywatność

Aby zwiększyć prywatność użytkowników, wprowadzamy zmiany i ograniczenia w Androidzie 11 takie jak:

  • Uprawnienia jednorazowe: pozwala użytkownikom przyznawać tymczasowy dostęp do lokalizacji, mikrofonu i kamery.
  • Widoczność okna uprawnień: powtarzające się odmowy przyznania uprawnień oznaczają, że nie pytaj ponownie.
  • Kontrola dostępu do danych: dowiedz się, gdzie aplikacja uzyskuje dostęp do danych prywatnych, zarówno w kodzie aplikacji, jak i kodzie bibliotek zależnych.
  • Uprawnienia okna alertu systemowego: niektóre klasy aplikacji na żądanie automatycznie otrzymują uprawnienie SYSTEM_ALERT_WINDOW. Intencje uwzględniające zamiar ACTION_MANAGE_OVERLAY_PERMISSION zawsze powodują wyświetlenie ekranu w ustawieniach systemu.
  • Trwałe identyfikatory SIM: na Androidzie 11 i nowszych dostęp do niemożliwych do zresetowania identyfikatorów ICCID za pomocą metody getIccId() jest ograniczony. Metoda zwraca pusty ciąg znaków, który nie ma wartości null. Aby jednoznacznie zidentyfikować kartę SIM zainstalowaną na urządzeniu, użyj metody getSubscriptionId(). Identyfikator subskrypcji zawiera wartość indeksu (zaczynającą się od 1), która pozwala jednoznacznie zidentyfikować zainstalowane karty SIM, w tym fizyczne i elektroniczne. Wartość tego identyfikatora jest stabilna dla danej karty SIM, chyba że urządzenie zostało przywrócone do ustawień fabrycznych.

Więcej informacji znajdziesz na stronie Prywatność.

Powiadomienia o narażeniu na kontakt

Android 11 aktualizuje platformę z myślą o systemie 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 lokalizacji urządzenia. Jest to wyjątek w przypadku systemu powiadomień o narażeniu na kontakt, ponieważ został zaprojektowany w taki sposób, że korzystające z niego aplikacje nie mogą ustalać lokalizacji urządzenia za pomocą skanowania Bluetooth.

Aby chronić prywatność użytkownika, wszystkie inne aplikacje nie mogą skanować 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 powiadomień o narażeniu na kontakt.

Zabezpieczenia

Gniazda SSL domyślnie używają mechanizmu Conscrypt SSL

Domyślna implementacja SSLSocket na Androidzie opiera się na Conscrypt. Od Androida 11 ta implementacja jest wewnętrznie wbudowana na bazie SSLEngine platformy Conscrypt.

Alokator wzmocniony Scudo

Android 11 używa wewnętrznie Scudo Hardened Allocator do obsługi alokacji sterty. Scudo potrafi wykrywać i łagodzić niektóre typy naruszeń bezpieczeństwa pamięci. Jeśli w raportach o awariach natywnych widzisz 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 przechowywaniu szyfrowanych danych logowania. Ani system, ani żadne aplikacje nie mają do nich dostępu, chyba że isUserUnlocked() zwraca wartość true, co następuje po wystąpieniu jednej 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 metody są wywoływane w tym obiekcie po odblokowaniu urządzenia przez użytkownika. W przeciwnym razie interfejs API zwraca teraz wartości null lub puste.

Obsługa emulatorów w sieci 5G

Android 11 dodaje interfejsy API 5G, które umożliwiają dodawanie do aplikacji najnowocześniejszych funkcji. Aby przetestować dodawanie funkcji podczas ich dodawania, możesz skorzystać z nowych możliwości emulatora pakietu Android SDK. Nowa funkcja została dodana w wersji 30.0.22 emulatora. Wybór ustawienia sieci 5G powoduje ustawienie TelephonyDisplayInfo na OVERRIDE_NETWORK_TYPE_NR_NSA, zmianę szacowanej przepustowości i konfigurowanie pomiaru, dzięki czemu aplikacja odpowiednio reaguje na zmiany stanu NET_CAPABILITY_TEMPORARILY_NOT_METERED.

Wydajność i debugowanie

Ograniczenia wywołań interfejsu JobScheduler API na potrzeby debugowania

Android 11 oferuje 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 tej funkcji, 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ń będą zwracać wartość RESULT_FAILURE. Limity zostały ustalone tak, aby nie miało to wpływu na uzasadnione przypadki użycia.

Sanitizer do deskryptora plików (fdsan)

W Androidzie 10 wprowadziliśmy usługę fdsan (descriptor deskryptorów plików). fdsan wykrywa niewłaściwe postępowanie z własnością deskryptora plików, np. „use-after-close” i Double-close. W Androidzie 11 zmienia się domyślny tryb aplikacji fdsan. Teraz fdsan przerywa działanie po wykryciu błędu. Wcześniejszym działaniem było zarejestrowanie ostrzeżenia i kontynuowanie działania. Jeśli zauważysz w aplikacji awarie z powodu błędu fdsan, zapoznaj się z fdsan documentation.

Ograniczenia interfejsu innego niż SDK

Android 11 zawiera zaktualizowane listy podlegających ograniczeniom interfejsów spoza pakietu SDK opracowane na podstawie współpracy z deweloperami aplikacji na Androida i najnowszych testów wewnętrznych. Zanim ograniczymy dostęp do interfejsów spoza SDK, dbamy o to, aby w miarę możliwości dostępne były publiczne alternatywy.

Jeśli Twoja aplikacja nie jest kierowana na Androida 11, niektóre z tych zmian mogą Cię nie dotyczyć. Mimo że obecnie możesz używać niektórych interfejsów spoza pakietu SDK (w zależności od docelowego poziomu interfejsu API aplikacji), korzystanie z dowolnych metod lub pól spoza pakietu SDK niesie ze sobą wysokie ryzyko awarii aplikacji.

Jeśli nie masz pewności, czy Twoja aplikacja korzysta z interfejsów innych niż SDK, możesz przetestować ją, aby to sprawdzić. Jeśli Twoja aplikacja korzysta z interfejsów innych niż SDK, zacznij planować migrację do alternatywnych pakietów SDK. Zdajemy sobie jednak sprawę, że niektóre aplikacje mają odpowiednie przypadki użycia w zakresie interfejsów spoza SDK. Jeśli nie możesz znaleźć alternatywy dla interfejsu innego niż SDK dla funkcji w aplikacji, poproś o nowy publiczny interfejs API.

Więcej informacji o zmianach w tej wersji Androida znajdziesz w artykule Aktualizacje ograniczeń interfejsu spoza pakietu SDK w Androidzie 11. Więcej informacji o interfejsach innych niż SDK znajdziesz w artykule Ograniczenia interfejsów innych niż SDK.

Usunięto zasoby wspólne Map w wersji 1

Wersja 1 zasobów wspólnych Map została całkowicie usunięta w Androidzie 11. Ta biblioteka została wycofana wcześniej i przestała działać w aplikacjach na Androida 10. Aplikacje, które wcześniej korzystały z tych zasobów wspólnych na urządzeniach z Androidem 9 (poziom interfejsu API 28) lub niższym, powinny w zamian korzystać z pakietu SDK Map Google na Androida.

Interakcja z innymi aplikacjami

Udostępnij identyfikatory URI treści

Jeśli Twoja aplikacja udostępnia identyfikator URI treści innej aplikacji, intencja musi przyznać uprawnienia dostępu do identyfikatora URI, ustawiając co najmniej jedną z tych flag intencji: FLAG_GRANT_READ_URI_PERMISSION i FLAG_GRANT_WRITE_URI_PERMISSION. Dzięki temu, jeśli druga aplikacja jest kierowana na Androida 11, nadal ma 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óry nie należy do Twojej aplikacji.

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ę zabezpieczania danych.

Wczytuję bibliotekę

Wczytuję wspólną bibliotekę ICU ze ścieżką bezwzględną

Aplikacje kierowane na interfejs API na poziomie 28 lub starszym nie mogą używać polecenia dlopen(3) do wczytywania elementu libicuuc ze ścieżką bezwzględną „/system/lib/libicuuc.so”. W przypadku tych aplikacji dlopen("/system/lib/libicuuc.so", ...) zwraca nick o wartości null.

Aby wczytać bibliotekę, jako nazwy pliku użyj jej nazwy, np. dlopen("libicuuc.so", ...).