Zmiany w działaniu: wszystkie aplikacje

Platforma Android 15 zawiera 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 15, niezależnie od targetSdkVersion. Przetestuj aplikację, a następnie w razie potrzeby zmodyfikuj ją, aby prawidłowo obsługiwała te funkcje.

Sprawdź też listę zmian zachowania, które mają wpływ tylko na aplikacje kierowane na Androida 15.

Główna funkcja

Android 15 modyfikuje lub rozszerza różne podstawowe funkcje systemu Android.

Zmiany stanu pakietu na zatrzymany

Celem stanu pakietu FLAG_STOPPED (który użytkownicy mogą aktywować w wersjach AOSP przez długie naciśnięcie ikony aplikacji i wybranie „Wymuś zatrzymanie”) było zawsze utrzymywanie aplikacji w tym stanie, dopóki użytkownik nie usunie aplikacji z tego stanu, uruchamiając ją bezpośrednio lub pośrednio z aplikacją (za pomocą panelu udostępniania lub widżetu, wybierając aplikację jako tapetę na żywo itp.). W Androidzie 15 zaktualizowaliśmy działanie systemu, aby było zgodne z zamierzonym działaniem. Aplikacje powinny być usuwane z tylko w wyniku bezpośredniego lub pośredniego działania użytkownika.

Aby zapewnić pożądane działanie, oprócz obecnych ograniczeń system anuluje też wszystkie oczekujące intencje, gdy aplikacja przechodzi w stan zatrzymania na urządzeniu z Androidem 15. Gdy działania użytkownika wyprowadzą aplikację ze stanu zatrzymania, zostanie wysłana do niej transmisja ACTION_BOOT_COMPLETED, co umożliwi ponowne zarejestrowanie oczekujących intencji.

Aby sprawdzić, czy aplikacja została zatrzymana, możesz wywołać nową metodę ApplicationStartInfo.wasForceStopped().

Obsługa stron o rozmiarze 16 KB

W przeszłości Android obsługiwał tylko strony pamięci o rozmiarze 4 KB, co optymalizowało wydajność pamięci systemowej pod kątem średniej ilości pamięci całkowitej, jaką zwykle miały urządzenia z Androidem. Od Androida 15 AOSP obsługuje urządzenia skonfigurowane do używania rozmiaru strony 16 KB (urządzenia 16 KB). Jeśli Twoja aplikacja używa bibliotek NDK bezpośrednio lub pośrednio za pomocą pakietu SDK, musisz ją przebudować, aby działała na urządzeniach o rozmiarze strony 16 KB.

Producenci urządzeń nadal tworzą urządzenia z większą ilością pamięci fizycznej (RAM). Wiele z nich będzie korzystać ze stron o rozmiarze 16 KB (a w przyszłości większych), aby zoptymalizować wydajność urządzenia. Dodanie obsługi urządzeń ze stronami o rozmiarze 16 KB umożliwia uruchamianie aplikacji na tych urządzeniach i korzystanie z powiązanych z tym ulepszeń wydajności. Bez ponownej kompilacji aplikacje nie będą działać na urządzeniach 16 KB w przyszłych wersjach Androida.

Aby pomóc Ci dodać obsługę w aplikacji, przygotowaliśmy wskazówki dotyczące sprawdzania, czy zmiana ma wpływ na Twoją aplikację, ponownego jej kompilowania (w odpowiednich przypadkach) oraz testowania aplikacji w środowisku 16 KB przy użyciu emulatorów (w tym obrazów systemu Android 15 dla emulatora Androida).

Benefits and performance gains

Urządzenia skonfigurowane z użyciem stron o rozmiarze 16 KB zużywają średnio nieco więcej pamięci, ale zyskują też różne ulepszenia wydajności zarówno systemu, jak i aplikacji:

  • Krótszy czas uruchamiania aplikacji, gdy system jest pod presją pamięci: średnio o 3,16% krótszy, a w przypadku niektórych testowanych aplikacji o znacznie więcej (do 30%).
  • Zmniejszone zużycie energii podczas uruchamiania aplikacji: średnio o 4,56%
  • Szybsze uruchamianie aparatu: średnio o 4,48% szybsze uruchomienia z pamięci i o 6,60% szybsze uruchomienia „na zimno”
  • Skrócony czas uruchamiania systemu: skrócenie o 8% (około 950 milisekund)

Te ulepszenia bazują na naszych wstępnych testach. Wyniki na rzeczywistych urządzeniach mogą się różnić. W miarę kontynuowania testów będziemy przeprowadzać dodatkową analizę potencjalnych zysków w przypadku aplikacji.

Check if your app is impacted

Jeśli Twoja aplikacja używa kodu natywnego, zrekompiluj ją, aby obsługiwała urządzenia 16-kilobajtowe. Jeśli nie masz pewności, czy Twoja aplikacja używa kodu natywnego, możesz za pomocą narzędzia APK Analyzer sprawdzić, czy zawiera ona kod natywny, a następnie sprawdzić wyrównanie segmentów ELF w przypadku znalezionych bibliotek współdzielonych. Android Studio udostępnia też funkcje, które pomagają automatycznie wykrywać problemy z wyrównaniem.

Jeśli Twoja aplikacja używa tylko kodu napisanego w języku programowania Java lub Kotlin, w tym wszystkich bibliotek i pakietów SDK, to już obsługuje urządzenia 16-bitowe. Zalecamy jednak przetestowanie aplikacji w środowisku 16 KB, aby sprawdzić, czy nie występują nieoczekiwane regresje w jej działaniu.

Wymagane zmiany w niektórych aplikacjach, aby obsługiwały przestrzeń prywatną

Przestrzeń prywatna to nowa funkcja w Androidzie 15, która umożliwia użytkownikom tworzenie osobnej przestrzeni na urządzeniu, w której mogą ukryć aplikacje poufne przed ciekawskimi spojrzeniami, korzystając z dodatkowego poziomu uwierzytelniania. Aplikacje w przestrzeni prywatnej mają ograniczoną widoczność, dlatego niektóre z nich muszą wykonać dodatkowe czynności, aby móc wyświetlać aplikacje w przestrzeni prywatnej użytkownika i z nimi wchodzić w interakcje.

Wszystkie aplikacje

Aplikacje w przestrzeni prywatnej są przechowywane w oddzielnym profilu użytkownika, podobnie jak profil służbowy, dlatego nie powinny zakładać, że wszystkie zainstalowane kopie aplikacji, które nie znajdują się na głównym profilu, są na profilu służbowym. Jeśli Twoja aplikacja ma logikę związaną z aplikacjami na profilu służbowym, która zakłada, że ta logika jest prawidłowa, musisz ją dostosować.

Medycyna

Gdy użytkownik zablokuje przestrzeń prywatną, wszystkie aplikacje w niej są wstrzymywane i nie mogą wykonywać działań na pierwszym planie ani w tle, w tym wyświetlać powiadomień. Może to mieć poważny wpływ na korzystanie z aplikacji medycznych zainstalowanych w przestrzeni prywatnej.

Podczas konfigurowania przestrzeni prywatnej użytkownicy otrzymują ostrzeżenie, że przestrzeń prywatna nie jest odpowiednia dla aplikacji, które muszą wykonywać krytyczne czynności na pierwszym planie lub w tle, np. wyświetlać powiadomienia z aplikacji medycznych. Aplikacje nie mogą jednak określić, czy są używane w przestrzeni prywatnej, więc nie mogą wyświetlać użytkownikowi ostrzeżenia w takim przypadku.

Jeśli opracowujesz aplikację medyczną, sprawdź, jak ta funkcja może wpływać na Twoją aplikację, i podejmij odpowiednie działania, np. poinformuj użytkowników, aby nie instalowali aplikacji w przestrzeni prywatnej. Dzięki temu unikniesz zakłócenia jej kluczowych funkcji.

Aplikacje menu

Jeśli opracowujesz aplikację uruchamiającą, musisz wykonać te czynności, zanim aplikacje w prywatnej przestrzeni będą widoczne:

  1. Aplikacja musi być przypisana jako domyślna aplikacja uruchamiania na urządzeniu, czyli mieć rolę ROLE_HOME.
  2. Aplikacja musi zadeklarować normalne uprawnienia ACCESS_HIDDEN_PROFILESw pliku manifestu aplikacji.

Aplikacje uruchamiające, które deklarują uprawnienie ACCESS_HIDDEN_PROFILES, muszą obsługiwać te przypadki użycia przestrzeni prywatnej:

  1. Aplikacja musi mieć oddzielny kontener programu uruchamiającego dla aplikacji zainstalowanych w przestrzeni prywatnej. Aby określić, jaki typ profilu użytkownika jest obsługiwany, użyj metody getLauncherUserInfo().
  2. Użytkownik musi mieć możliwość ukrywania i wyświetlania kontenera przestrzeni prywatnej.
  3. Użytkownik musi mieć możliwość zablokowania i odblokowania kontenera przestrzeni prywatnej. Użyj metody requestQuietModeEnabled(), aby zablokować (przekazując true) lub odblokować (przekazując false) przestrzeń prywatną.
  4. Gdy przestrzeń prywatna jest zablokowana, żadne aplikacje w kontenerze przestrzeni prywatnej nie powinny być widoczne ani możliwe do znalezienia za pomocą mechanizmów takich jak wyszukiwarka. Aplikacja powinna zarejestrować odbiornik dla transmisji ACTION_PROFILE_AVAILABLE i ACTION_PROFILE_UNAVAILABLE oraz aktualizować interfejs użytkownika w aplikacji, gdy stan zablokowania lub odblokowania kontenera obszaru prywatnego ulegnie zmianie. Oba te transmisje zawierają EXTRA_USER, którego aplikacja może używać do odwoływania się do użytkownika profilu prywatnego.

    Aby sprawdzić, czy profil przestrzeni prywatnej jest zablokowany, możesz też użyć metody isQuietModeEnabled().

Aplikacje ze sklepów z aplikacjami

Przestrzeń prywatna zawiera przycisk „Zainstaluj aplikacje”, który uruchamia domyślny zamiar zainstalowania aplikacji w przestrzeni prywatnej użytkownika. Aby aplikacja mogła otrzymać tę niejawną intencję, w pliku manifestu aplikacji musisz zadeklarować uprawnienie <intent-filter> z wartością <category>CATEGORY_APP_MARKET.

Czcionka emotikonów oparta na PNG została usunięta

Plik czcionki emoji (NotoColorEmojiLegacy.ttf) w starym formacie PNG został usunięty, pozostawiając tylko plik wektorowy. Począwszy od Androida 13 (poziom interfejsu API 33) plik czcionki emotikonów używany przez systemowy moduł renderowania emotikonów zmienił się z pliku PNG na plik wektorowy. System zachował starszy plik czcionki w Androidzie 13 i 14 ze względu na zgodność, aby aplikacje z własnymi mechanizmami renderowania czcionek mogły nadal używać starszego pliku czcionki, dopóki nie zostaną zaktualizowane.

Aby sprawdzić, czy Twoja aplikacja jest dotknięta, wyszukaj w jej kodzie odwołania do pliku NotoColorEmojiLegacy.ttf.

Aplikację możesz dostosować na kilka sposobów:

  • Do renderowania tekstu używaj interfejsów platformy. Możesz renderować tekst do bitmapy Canvas i w razie potrzeby używać go do uzyskiwania obrazu nieprzetworzonego.
  • Dodaj do aplikacji obsługę czcionek COLRv1. Biblioteka open source FreeType obsługuje COLRv1 w wersji 2.13.0 i wyższych.
  • W ostatecznym wypadku możesz dołączyć do pliku APK stary plik czcionki emotikonów (NotoColorEmoji.ttf), ale w tym przypadku w aplikacji zabraknie najnowszych emotikonów. Więcej informacji znajdziesz na stronie projektu Noto Emoji na GitHub.

Zwiększenie minimalnej docelowej wersji pakietu SDK z 23 do 24

Android 15 builds on the the changes that were made in Android 14 and extends this security further. In Android 15, apps with a targetSdkVersion lower than 24 can't be installed. Requiring apps to meet modern API levels helps to ensure better security and privacy.

Malware often targets lower API levels in order to bypass security and privacy protections that have been introduced in higher Android versions. For example, some malware apps use a targetSdkVersion of 22 to avoid being subjected to the runtime permission model introduced in 2015 by Android 6.0 Marshmallow (API level 23). This Android 15 change makes it harder for malware to avoid security and privacy improvements. Attempting to install an app targeting a lower API level results in an installation failure, with a message like the following one appearing in Logcat:

INSTALL_FAILED_DEPRECATED_SDK_VERSION: App package must target at least SDK version 24, but found 7

On devices upgrading to Android 15, any apps with a targetSdkVersion lower than 24 remain installed.

If you need to test an app targeting an older API level, use the following ADB command:

adb install --bypass-low-target-sdk-block FILENAME.apk

Prywatność i bezpieczeństwo

Android 15 introduces robust measures to combat one-time passcode (OTP) fraud and to protect the user's sensitive content, focusing on hardening the Notification Listener Service and screenshare protections. Key enhancements include redacting OTPs from notifications accessible to untrusted apps, hiding notifications during screenshare, and securing app activities when OTPs are posted. These changes aim to keep the user's sensitive content safe from unauthorized actors.

Developers need to be aware of the following to ensure their apps are compatible with the changes in Android 15:

OTP Redaction

Android will stop untrusted apps that implement a NotificationListenerService from reading unredacted content from notifications where an OTP has been detected. Trusted apps such as companion device manager associations are exempt from these restrictions.

Screenshare Protection

  • Notification content is hidden during screen sharing sessions to preserve the user's privacy. If the app implements setPublicVersion(), Android shows the public version of the notification which serves as a replacement notification in insecure contexts. Otherwise, the notification content is redacted without any further context.
  • Sensitive content like password input is hidden from remote viewers to prevent revealing the user's sensitive information.
  • Activities from apps that post notifications during screenshare where an OTP has been detected will be hidden. App content is hidden from the remote viewer when launched.
  • Beyond Android's automatic identification of sensitive fields, developers can manually mark parts of their app as sensitive using setContentSensitivity, which is hidden from remote viewers during screenshare.
  • Developers can choose to toggle the Disable screen share protections option under Developer Options to be exempted from the screenshare protections for demo or testing purposes. The default system screen recorder is exempted from these changes, since the recordings remain on-device.

Aparat i multimedia

Android 15 wprowadza te zmiany w działaniu aparatu i multimediów we wszystkich aplikacjach.

Bezpośrednie i przeniesione odtwarzanie dźwięku unieważnia wcześniej otwarte bezpośrednie lub przeniesione ścieżki audio po osiągnięciu limitów zasobów.

Before Android 15, if an app requested direct or offload audio playback while another app was playing audio and the resource limits were reached, the app would fail to open a new AudioTrack.

Beginning with Android 15, when an app requests direct or offload playback and the resource limits are reached, the system invalidates any currently open AudioTrack objects which prevent fulfilling the new track request.

(Direct and offload audio tracks are typically opened for playback of compressed audio formats. Common use-cases for playing direct audio include streaming encoded audio over HDMI to a TV. Offload tracks are typically used to play compressed audio on a mobile device with hardware DSP acceleration.)

Interfejs użytkownika i systemu

Android 15 zawiera kilka zmian, które mają na celu zapewnienie bardziej spójnej i intuicyjnej obsługi.

Animacje przewidywanego przejścia wstecz włączone w przypadku aplikacji, które wyraziły na to zgodę

Od Androida 15 opcja dla programistów dotycząca animacji przewidywanego przejścia wstecz została usunięta. Systemowe animacje takie jak animacja powrotu do ekranu głównego, animacja przełączania zadań i animacja przełączania aktywności są teraz wyświetlane w aplikacjach, które włączyły przewidujący gest wsteczny w całości lub na poziomie aktywności. Jeśli Twoja aplikacja jest dotknięta, wykonaj te czynności:

  • Upewnij się, że aplikacja została prawidłowo przeniesiona, aby można było używać przewidującego gestu wstecz.
  • Upewnij się, że przejścia między fragmentami działają z przewidywaną nawigacją wstecz.
  • Zrezygnuj z animacji i przejść w ramach, a zamiast nich używaj animatora i przejść androidx.
  • Przejdź z poziomów podrzędnych, których FragmentManager nie zna. Używaj zamiast nich stosów powrotnych zarządzanych przez FragmentManager lub komponent Nawigacja.

Widżety wyłączane, gdy użytkownik wymusi zatrzymanie aplikacji

If a user force-stops an app on a device running Android 15, the system temporarily disables all the app's widgets. The widgets are grayed out, and the user cannot interact with them. This is because beginning with Android 15, the system cancels all an app's pending intents when the app is force-stopped.

The system re-enables those widgets the next time the user launches the app.

For more information, see Changes to package stopped state.

Pasek stanu projekcji multimediów informuje użytkowników o udostępnianiu, przesyłaniu i nagrywaniu ekranu

Wykorzystanie funkcji udostępniania ekranu ujawnia prywatne dane użytkowników, takie jak informacje finansowe, ponieważ użytkownicy nie zdają sobie sprawy, że ich ekran jest udostępniany.

W przypadku aplikacji działających na urządzeniach z Androidem 15 QPR1 lub nowszym na pasku stanu wyświetla się duży i wyróżniony element, który informuje użytkowników o trwającej projekcji ekranu. Użytkownicy mogą kliknąć element, aby zatrzymać udostępnianie, przesyłanie lub nagrywanie ekranu. Projekcja ekranu jest też automatycznie zatrzymywana, gdy ekran urządzenia jest zablokowany.

Przycisk na pasku stanu do udostępniania ekranu, przesyłania treści i nagrywania.

Check if your app is impacted

By default, your app includes the status bar chip and automatically suspends screen projection when the lock screen activates.

To learn more about how to test your app for these use cases, see Status bar chip and auto stop.

Ograniczenia dostępu do sieci w tle

In Android 15, apps that start a network request outside of a valid process lifecycle receive an exception. Typically, an UnknownHostException or other socket-related IOException. Network requests that happen outside of a valid lifecycle are usually due to apps unknowingly continuing a network request even after the app is no longer active.

To mitigate this exception, ensure your network requests are lifecycle aware and cancelled upon leaving a valid process lifecycle by using lifecycle aware components. If it is important that the network request should happen even when the user leaves the application, consider scheduling the network request using WorkManager or continue a user visible task using Foreground Service.

Wycofane

Z każdą kolejną wersją niektóre interfejsy API Androida mogą stać się przestarzałe lub wymagać refaktoryzacji, aby zapewnić deweloperom większy komfort pracy lub obsługiwać nowe funkcje platformy. W takich przypadkach oficjalnie wycofujemy przestarzałe interfejsy API i kierujemy deweloperów do alternatyw, których mogą używać w zamian.

Wycofanie oznacza, że zakończyliśmy oficjalne wsparcie dla danych interfejsów API, ale nadal będą one dostępne dla deweloperów. Więcej informacji o ważnych funkcjach, które zostały wycofane w tej wersji Androida, znajdziesz na stronie poświęconej wycofywaniu funkcji.