Platforma Android 15 zawiera zmiany w działaniu, które mogą mieć wpływ na Twoją aplikację. Poniższe zmiany w działaniu dotyczą wszystkich aplikacji uruchamianych 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 w zachowaniu, 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 zatrzymania pakietu
软件包 FLAG_STOPPED 状态(用户可以通过在 AOSP build 中长按应用图标并选择“强制停止”来启用此状态)的用途一直是让应用保持在此状态,直到用户通过直接启动应用或间接与应用互动(通过 Sharesheet 或 widget、将应用选择为动态壁纸等)来明确将应用从此状态移除。在 Android 15 中,我们更新了系统行为,使其与此预期行为保持一致。应用应仅通过直接或间接的用户操作从停止状态移除。
为了支持预期行为,除了现有限制之外,当应用在搭载 Android 15 的设备上进入停止状态时,系统还会取消所有待处理 intent。当用户的操作将应用从停止状态移除时,系统会将 ACTION_BOOT_COMPLETED 广播传送到应用,以便应用有机会重新注册所有待处理 intent。
您可以调用新的 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).
Korzyści i wzrost wydajności
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.
Sprawdź, czy zmiana wpłynie na Twoją aplikację
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 przypadku niektórych aplikacji, 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:
- Aplikacja musi być przypisana jako domyślna aplikacja uruchamiania na urządzeniu, czyli mieć rolę
ROLE_HOME. - 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:
- 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(). - Użytkownik musi mieć możliwość ukrywania i wyświetlania kontenera przestrzeni prywatnej.
- Użytkownik musi mieć możliwość zablokowania i odblokowania kontenera przestrzeni prywatnej. Użyj metody
requestQuietModeEnabled(), aby zablokować (przekazująctrue) lub odblokować (przekazującfalse) przestrzeń prywatną. 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_AVAILABLEiACTION_PROFILE_UNAVAILABLEoraz 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
Canvasi 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 opiera się na
zmian wprowadzonych w Androidzie 14 i rozszerzając te
i zwiększaj bezpieczeństwo. Na Androidzie 15 aplikacje z
Nie można zainstalować wersji targetSdkVersion o wartości niższej niż 24.
Wymaganie, aby aplikacje spełniały wymagania dotyczące nowoczesnych poziomów interfejsu API, pomaga zapewnić bezpieczeństwo i prywatność.
Złośliwe oprogramowanie często trafia do interfejsów API na niższych poziomach, aby ominąć bezpieczeństwo i prywatność
zabezpieczeń wprowadzonych w wyższych wersjach Androida. Przykład:
niektóre złośliwe aplikacje używają tych zabezpieczeń: targetSdkVersion z 22,
model uprawnień czasu działania wprowadzony w 2015 r. przez Androida 6.0 Marshmallow (API)
poziom 23). Ta zmiana w Androidzie 15 utrudnia złośliwemu unikaniu zabezpieczeń
i lepszą ochronę prywatności. Próba zainstalowania aplikacji kierowanej na niższy interfejs API
spowoduje błąd instalacji i pojawi się komunikat podobny do tego:
widoczne w dzienniku Logcat:
INSTALL_FAILED_DEPRECATED_SDK_VERSION: App package must target at least SDK version 24, but found 7
na urządzeniach z Androidem 15 i z Androidem w wersji starszej niż targetSdkVersion.
pozostaną zainstalowane niż 24.
Jeśli chcesz przetestować aplikację kierowaną na starszy poziom interfejsu API, użyj tego ADB polecenie:
adb install --bypass-low-target-sdk-block FILENAME.apk
Prywatność i bezpieczeństwo
Android 15 wprowadza solidne środki zapobiegające oszustwom z użyciem jednorazowego hasła (OTP) oraz chroniące poufne treści użytkownika. Skupiono się na wzmocnieniu ochrony usługi Notification Listener i funkcji udostępniania ekranu. Najważniejsze ulepszenia obejmują ukrywanie kodów OTP w powiadomieniach dostępnych dla niezaufanych aplikacji, ukrywanie powiadomień podczas udostępniania ekranu oraz zabezpieczanie działań w aplikacji, gdy są publikowane kody OTP. Te zmiany mają na celu ochronę poufnych treści użytkownika przed nieupoważnionymi osobami.
Deweloperzy muszą pamiętać o tych kwestiach, aby zapewnić zgodność swoich aplikacji ze zmianami w Androidzie 15:
Usuwanie hasła jednorazowego
Android zablokuje niesprawdzone aplikacje, które implementują NotificationListenerService, przed odczytem nieocenzurowanych treści z powiadomień, w których wykryto kod OTP. Zaufane aplikacje, takie jak powiązania z menedżerem urządzeń towarzyszących, są zwolnione z tych ograniczeń.
Ochrona udostępniania ekranu
- Treść powiadomienia jest ukryta podczas sesji udostępniania ekranu, aby chronić prywatność użytkownika. Jeśli aplikacja implementuje
setPublicVersion(), Android wyświetla publiczną wersję powiadomienia, która zastępuje powiadomienie w niebezpiecznych kontekstach. W przeciwnym razie treść powiadomienia jest zaciemniona bez żadnego dodatkowego kontekstu. - Treści poufne, takie jak hasło, są ukryte przed widzami zdalnymi, aby zapobiec ujawnieniu poufnych informacji użytkownika.
- Aktywności z aplikacji, które wysyłają powiadomienia podczas udostępniania ekranu, gdy wykryto kod OTP, będą ukryte. Treści aplikacji są niewidoczne dla widza zdalnego podczas uruchamiania.
- Oprócz automatycznego rozpoznawania poufnych pól przez Androida deweloperzy mogą ręcznie oznaczać części aplikacji jako poufne, używając
setContentSensitivity. Te elementy są ukryte przed widzami podczas udostępniania ekranu. - Deweloperzy mogą włączyć opcję Wyłącz zabezpieczenia przed udostępnianiem ekranu w sekcji Opcje dla deweloperów, aby wyłączyć zabezpieczenia przed udostępnianiem ekranu na potrzeby demonstracji lub testów. Domyślny systemowy rejestrator ekranu nie jest objęty tymi zmianami, ponieważ nagrania pozostają na urządzeniu.
Aparat i multimedia
W Androidzie 15 wprowadzono 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.
在 Android 15 之前,如果某个应用在另一个应用播放音频且达到资源限制时请求直接或分流音频播放,该应用将无法打开新的 AudioTrack。
从 Android 15 开始,当应用请求直接播放或分流播放且达到资源限制时,系统会使任何当前打开的 AudioTrack 对象失效,以防止执行新轨道请求。
(直接音轨和分流音轨通常会打开,以播放压缩音频格式。播放直接音频的常见用例包括通过 HDMI 将编码的音频流式传输到电视。分流轨道通常用于在具有硬件 DSP 加速的移动设备上播放压缩音频。)
Wrażenia użytkowników i interfejs 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
FragmentManagernie zna. Używaj zamiast nich stosów powrotnych zarządzanych przezFragmentManagerlub komponent Nawigacja.
Widżety wyłączane, gdy użytkownik wymusi zatrzymanie aplikacji
Jeśli użytkownik wymusi zatrzymanie aplikacji na urządzeniu z Androidem 15, system tymczasowo wyłączy wszystkie widżety tej aplikacji. Widgety są wyszarzone i użytkownik nie może z nimi wchodzić w interakcję. Dzieje się tak, ponieważ od Androida 15 system anuluje wszystkie oczekujące intencje aplikacji, gdy zostanie ona zatrzymana.
System ponownie włączy te widżety, gdy użytkownik uruchomi aplikację.
Więcej informacji znajdziesz w artykule Zmiany stanu zatrzymania pakietu.
Pasek stanu z informacją o projekcji multimediów powiadamia 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.
检查您的应用是否受到影响
默认情况下,您的应用会包含状态栏条状标签,并会在锁定屏幕激活时自动暂停屏幕投影。
如需详细了解如何针对这些用例测试应用,请参阅状态栏条状标签和自动停止。
Ograniczenia dostępu do sieci w tle
在 Android 15 中,如果应用在有效的进程生命周期之外启动网络请求,则会收到异常。通常是 UnknownHostException 或其他与套接字相关的 IOException。在有效生命周期之外发生的网络请求通常是因为应用在不再活跃后,不知不觉地继续发出网络请求。
为缓解此异常,请使用生命周期感知型组件,确保您的网络请求具有生命周期感知功能,并在离开有效的进程生命周期时取消。如果您非常重视即使用户离开应用也要发出网络请求,请考虑使用 WorkManager 调度网络请求,或使用前台服务继续执行对用户可见的任务。
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.