Zmiany w działaniu: wszystkie aplikacje

Platforma Android 11 zawiera zmiany w działaniu, które mogą mieć wpływ na Twoją aplikację. Poniższe zmiany w działaniu dotyczą wszystkich aplikacji, gdy działają one na Androidzie 11, niezależnie od targetSdkVersion. W razie potrzeby przetestuj aplikację i zmodyfikuj ją, aby prawidłowo obsługiwała te funkcje.

Zapoznaj się też z listą zmian w działaniu, które dotyczą tylko aplikacji kierowanych na Androida 11.

Prywatność

Android 11 wprowadza zmiany i ograniczenia, które zwiększają prywatność użytkowników. Obejmują one m.in.:

  • Jednorazowe zezwolenia: dają użytkownikom możliwość przyznania tymczasowego dostępu do uprawnień związanych z lokalizacją, mikrofonem i aparatem.
  • Okno dialogowe uprawnień: wielokrotne odrzucanie prośby o uprawnienia oznacza „nie pytaj ponownie”.
  • Audytowanie dostępu do danych: uzyskuj informacje o tym, gdzie aplikacja uzyskuje dostęp do danych prywatnych – zarówno we własnym kodzie, jak i w kodzie bibliotek zależnych.
  • Uprawnienia do okna alertu systemowego: niektóre klasy aplikacji automatycznie otrzymują uprawnienie SYSTEM_ALERT_WINDOW na żądanie. Intencje, które zawierają działanie intencji ACTION_MANAGE_OVERLAY_PERMISSION, zawsze przenoszą użytkowników na ekran w ustawieniach systemu.
  • Trwałe identyfikatory karty SIM: na Androidzie 11 i nowszym dostęp do identyfikatorów ICCID, których nie można zresetować, 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 metody getSubscriptionId(). Identyfikator subskrypcji zawiera wartość indeksu (zaczynającą się od 1) służącą 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ę z myślą o systemie powiadomień o narażeniu na kontakt. Użytkownicy mogą teraz uruchamiać aplikacje do powiadomień o narażeniu na kontakt na urządzeniach z Androidem 11 bez konieczności włączania ustawienia lokalizacji urządzenia. Jest to wyjątek dotyczący tylko systemu powiadomień o narażeniu na kontakt, ponieważ został on zaprojektowany w taki sposób, że aplikacje korzystające z niego nie mogą określać lokalizacji urządzenia za pomocą skanowania Bluetooth.

Aby chronić prywatność użytkowników, wszystkie inne aplikacje nadal nie mogą skanować w poszukiwaniu urządzeń Bluetooth, chyba że ustawienie lokalizacji urządzenia jest włączone, a użytkownik przyznał im uprawnienia do lokalizacji. Więcej informacji znajdziesz w naszym poście Aktualizacja dotycząca powiadomień o narażeniu na kontakt.

Bezpieczeństwo

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

Domyślna implementacja SSLSocket na Androidzie jest oparta na Conscrypt. Od Androida 11 ta implementacja jest wewnętrznie oparta na SSLEngine biblioteki Conscrypt.

Scudo Hardened Allocator

Android 11 wewnętrznie używa wzmocnionego alokatora Scudo do obsługi alokacji sterty. Scudo potrafi wykrywać i minimalizować niektóre rodzaje 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życia aplikacji

Aby lepiej chronić użytkowników, Android 11 przechowuje statystyki dotyczące korzystania z aplikacji przez poszczególnych użytkowników w zaszyfrowanym za pomocą danych logowania. Dlatego ani system, ani żadne aplikacje nie mogą uzyskać dostępu do tych danych, chyba że isUserUnlocked() zwróci wartość true. Dzieje się to 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 teraz wartości null lub puste.

Obsługa emulatora w przypadku sieci 5G

Android 11 dodaje interfejsy API 5G, które umożliwiają aplikacjom dodawanie najnowocześniejszych funkcji. Aby przetestować funkcje podczas ich dodawania, możesz skorzystać z nowych możliwości emulatora pakietu Android SDK. Nowa funkcja została dodana w emulatorze w wersji 30.0.22. Wybranie ustawienia sieci 5G powoduje ustawienie wartości TelephonyDisplayInfo na OVERRIDE_NETWORK_TYPE_NR_NSA, zmianę szacowanej przepustowości i umożliwia ustawienie pomiaru, aby sprawdzić, czy aplikacja odpowiednio reaguje na zmiany stanu NET_CAPABILITY_TEMPORARILY_NOT_METERED.

Wydajność i debugowanie

Debugowanie limitów wywołań interfejsu JobScheduler API

Android 11 oferuje obsługę debugowania aplikacji, aby identyfikować potencjalne wywołania interfejsu API, które przekroczyły określone limity liczby żądań.JobScheduler Deweloperzy mogą używać tej funkcji do wykrywania potencjalnych problemów z wydajnością. W przypadku aplikacji z atrybutem manifestu debuggable ustawionym na wartość true wywołania interfejsu API JobScheduler przekraczające limity liczby żądań będą zwracać wartość RESULT_FAILURE. Limity są ustawione tak, aby nie wpływały na uzasadnione przypadki użycia.

Sanitizer deskryptorów plików (fdsan)

W Androidzie 10 wprowadzono fdsan (narzędzie do czyszczenia deskryptorów plików). fdsan wykrywa nieprawidłowe zarządzanie własnością deskryptora pliku, np. użycie po zamknięciu lub podwójne zamknięcie. W Androidzie 11 zmienia się domyślny tryb fdsan. fdsan teraz przerywa działanie po wykryciu błędu. Wcześniej rejestrował ostrzeżenie i kontynuował działanie. Jeśli w aplikacji występują awarie z powodu fdsan, zapoznaj się z fdsan documentation.

Ograniczenia interfejsu innego niż SDK

Android 11 zawiera zaktualizowane listy ograniczonych interfejsów innych niż SDK, które powstały na podstawie współpracy z deweloperami Androida i najnowszych testów wewnętrznych. Zanim ograniczymy interfejsy inne niż SDK, w miarę możliwości 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 używanie 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ę do alternatywnych rozwiązań 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.

Usunięcie biblioteki udostępnionej Map Google w wersji 1

W Androidzie 11 biblioteka udostępniona Map w wersji 1 została całkowicie usunięta. Ta biblioteka została wcześniej wycofana i przestała działać w aplikacjach na Androidzie 10. Aplikacje, które wcześniej korzystały z tej biblioteki współdzielonej na urządzeniach z Androidem 9 (poziom API 28) lub starszym, powinny zamiast tego używać pakietu SDK Map Google 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_PERMISSIONFLAG_GRANT_WRITE_URI_PERMISSION. Dzięki temu, jeśli inna aplikacja jest przeznaczona na Androida 11, nadal będzie mogła uzyskać 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 jest własnością 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. Zalecamy już stosowanie tej sprawdzonej metody zapewniania bezpieczeństwa.

Wczytuję bibliotekę

Wczytywanie wspólnej biblioteki ICU z bezwzględną ścieżką

Aplikacje kierowane na interfejs API w wersji 28 lub starszej nie mogą używać funkcji dlopen(3) do wczytywania libicuuc z bezwzględną ścieżką „/system/lib/libicuuc.so”. W przypadku tych aplikacji dlopen("/system/lib/libicuuc.so", ...) zwróci uchwyt o wartości null.

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