Do tej pory Android obsługiwał tylko strony o rozmiarze 4 KB, co zapewniało optymalną wydajność pamięci systemowej pod kątem średniej ilości pamięci dostępnej zwykle na urządzeniach z Androidem. Począwszy od Androida 15, Android obsługuje urządzenia, na których rozmiar strony wynosi 16 KB (16 KB).
Producenci wciąż tworzą urządzenia z większą ilością pamięci RAM, dlatego wiele z nich zostanie prawdopodobnie skonfigurowanych tak, aby rozmiar strony wynosił 16 KB (i w miarę potrzeby można zwiększyć ich wydajność). Dodanie obsługi urządzeń 16 KB umożliwia działanie aplikacji na tych urządzeniach i ułatwia jej poprawę wydajności. Aby Ci w tym pomóc, przygotowaliśmy wskazówki dotyczące sprawdzania, czy dotyczy to Twojej aplikacji, odtwarzania aplikacji (w stosownych przypadkach) oraz przetestowania aplikacji w środowisku o rozmiarze 16 KB przy użyciu emulatorów i urządzeń fizycznych.
Korzyści i wzrost skuteczności
Urządzenia o rozmiarze stron o rozmiarze 16 KB zużywają średnio trochę więcej pamięci, ale poprawiają też wydajność zarówno systemu, jak i aplikacji:
- Krótszy czas uruchamiania aplikacji, gdy system wykorzystuje pamięć: średnio o 3,16% krótszy niż w przypadku niektórych testowanych aplikacji
- Mniejsze wykorzystanie energii podczas uruchamiania aplikacji: średnio o 4,56%
- Szybsze uruchamianie kamery: średnio o 4,48% szybsze uruchomienia z pamięci i o 6,60% szybsze uruchomienia „na zimno”
- Skrócony czas uruchamiania systemu: średnio o 1,5% (około 0,8 sekundy).
Te ulepszenia są oparte na naszych wstępnych testach, więc wyniki na rzeczywistych urządzeniach będą się prawdopodobnie różnić. W trakcie testów będziemy przeprowadzać dodatkową analizę potencjalnych korzyści związanych z aplikacjami.
Sprawdź, czy ta zmiana wpłynie na Twoją aplikację
Jeśli Twoja aplikacja korzysta z kodu natywnego, musisz odbudować ją na urządzeniach z obsługą 16 KB. Jeśli nie masz pewności, czy Twoja aplikacja używa kodu natywnego, możesz skorzystać z Analizatora plików APK, by sprawdzić, czy w aplikacji znajduje się kod natywny.
Jeśli Twoja aplikacja używa tylko kodu napisanego w j��zyku Java lub w Kotlin, w tym wszystkich bibliotek i pakietów SDK, obsługuje już urządzenia z 16 KB. Zalecamy jednak przetestowanie aplikacji w środowisku 16 KB, aby sprawdzić, czy w jej działaniu nie występują nieoczekiwane regresje.
Czy Twoja aplikacja używa kodu natywnego?
Aplikacja używa kodu natywnego, jeśli ma miejsce jedna z tych sytuacji:
- Aplikacja używa dowolnego kodu natywnego w C/C++. Jeśli aplikacja używa Androida NDK, używa kodu natywnego.
- Aplikacja łączy się z zewnętrznymi bibliotekami natywnymi lub zależnościami, które z nich korzystają.
- Twoja aplikacja została utworzona w kreatorze aplikacji innej firmy, który korzysta z bibliotek natywnych na urządzeniu.
Zidentyfikuj biblioteki natywne przy użyciu Analizatora plików APK
Analizator plików APK to narzędzie umożliwiające ocenę różnych aspektów utworzonego pliku APK. Aby określić, czy aplikacja korzysta z kodu natywnego czy bibliotek, wykonaj te czynności:
- Otwórz Android Studio, a potem kliknij Plik > Otwórz i wybierz dowolny projekt.
Na pasku menu kliknij Kompilacja > Analizuj plik APK...
Wybierz plik APK, który chcesz przeanalizować.
Sprawdź, czy w folderze
lib
znajdują się pliki z udostępnionymi obiektami (.so
), jeśli takie istnieją. Jeśli są dostępne udostępnione pliki obiektów, aplikacja używa kodu natywnego. Jeśli nie ma udostępnionych plików obiektów lub nie ma folderulib
, aplikacja nie używa kodu natywnego.
Tworzenie aplikacji z obsługą urządzeń o rozmiarze 16 KB
Aby zapewnić obsługę urządzeń o rozmiarze 16 KB, aplikacje używające kodu natywnego powinny wykonać czynności opisane w sekcjach poniżej.
Zaktualizuj pakiet bibliotek udostępnionych
Zalecamy uaktualnienie pakietu AGP do wersji 8.3 lub nowszej i korzystanie z nieskompresowanych bibliotek udostępnionych.
AGP w wersji 8.3 lub nowszej
Urządzenia o rozmiarze 16 KB wymagają aplikacji, które mają skompresowane biblioteki udostępnione, aby wyrównać je do granicy 16 KB ustalonej na potrzeby pliku ZIP. Aby to zrobić, musisz uaktualnić wtyczkę Androida do obsługi Gradle (AGP) w wersji 8.3 lub nowszej. Szczegółowe informacje o procesie uaktualnienia znajdziesz w sekcji Asystent aktualizacji wtyczki Android Gradle.
AGP w wersji 8.2 lub starszej
Jeśli nie możesz uaktualnić AGP do wersji 8.3 lub nowszej, możesz korzystać z skompresowanych bibliotek udostępnionych. Zaktualizuj konfigurację Gradle, tak aby podczas pakowania aplikacji kompresowała ona biblioteki współdzielone. Pozwoli to uniknąć problemów z instalacją aplikacji w przypadku niedopasowanych bibliotek udostępnionych.
Odlotowe
W pliku build.gradle
dodaj tę opcję:
android {
...
packagingOptions {
jniLibs {
useLegacyPackaging true
}
}
}
Kotlin
W pliku build.gradle.kts
dodaj tę opcję:
android {
...
packagingOptions {
jniLibs {
useLegacyPackaging = true
}
}
}
Kompiluj aplikację, dopasowując plik ELF o rozmiarze 16 KB
Urządzenia o rozmiarze 16 KB wymagają prawidłowego wyrównania segmentów ELF bibliotek udostępnionych przy użyciu dopasowania 16 KB, aby aplikacja mogła działać.
Aby skompilować aplikację przy użyciu pliku ELF o rozmiarze 16 KB, wykonaj czynności opisane w jednej z poniższych sekcji w zależności od używanej wersji Androida NDK.
Android NDK r26 i starsze
Aby obsługiwać kompilację bibliotek udostępnionych o rozmiarze 16 KB wyrównanych do 16 KB za pomocą Androida NDK w wersji R26 lub starszej, musisz zaktualizować konfigurację ndk-build
lub cmake
w ten sposób:
ndk-build
Zaktualizuj Android.mk
, aby włączyć wyrównanie ELF o rozmiarze 16 KB:
LOCAL_LDFLAGS += "-Wl,-z,max-page-size=16384"
CMake
Zaktualizuj CMakeLists.txt
, aby włączyć wyrównanie ELF o rozmiarze 16 KB:
target_link_options(${CMAKE_PROJECT_NAME} PRIVATE "-Wl,-z,max-page-size=16384")
Android NDK r27 lub nowszy
Aby obsługiwać kompilację bibliotek udostępnionych o rozmiarze 16 KB wyrównanych do 16 KB za pomocą Androida NDK w wersji R27 lub nowszej, musisz zaktualizować flagi ndk-build
, build.gradle
, build.gradle.kts
i tagu łączącego w ten sposób:
ndk-build
W Application.mk
:
APP_SUPPORT_FLEXIBLE_PAGE_SIZES := true
Odlotowe
W pliku build.gradle
ustaw argument -DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON
:
android {
...
defaultConfig {
...
// This block is different from the one you use to link Gradle
// to your CMake or ndk-build script.
externalNativeBuild {
// For ndk-build, instead use the ndkBuild block.
cmake {
// Passes optional arguments to CMake.
arguments "-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON"
}
}
}
}
Kotlin
W pliku build.gradle.kts
ustaw argument -DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON
:
android {
...
defaultConfig {
...
// This block is different from the one you use to link Gradle
// to your CMake or ndk-build script.
externalNativeBuild {
// For ndk-build, instead use the ndkBuild block.
cmake {
// Passes optional arguments to CMake.
arguments += listOf("-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON")
}
}
}
}
Inne systemy kompilacji
Określ te flagi tagu łączącego:
-Wl,-z,max-page-size=16384
Szukanie instancji kodu, które odwołują się do konkretnych rozmiarów stron
Nawet jeśli rozmiar aplikacji wynosi 16 KB, może ona zawierać błędy, jeśli miejsca w kodzie będą zakładać, że urządzenie używa strony o określonym rozmiarze. Aby tego uniknąć, wykonaj te czynności:
Usuń wszelkie wpisane na stałe zależności, które odwołują się do stałej
PAGE_SIZE
, lub instancje w kodzie logicznym, które zakładają, że rozmiar strony na urządzeniu to 4 KB (4096
).Użyj zamiast niego
getpagesize()
lubsysconf(_SC_PAGESIZE)
.Poszukaj użycia interfejsu
mmap()
i innych interfejsów API, które wymagają argumentów wyrównanych do strony, i w razie potrzeby zastąp je alternatywnymi.
W niektórych przypadkach, jeśli aplikacja używa parametru PAGE_SIZE
jako wygodnej wartości, która nie jest powiązana z rozmiarem strony, nie spowoduje to jej awarii, gdy zostanie użyta w trybie 16 KB. Jeśli jednak ta wartość zostanie przekazana do jądra z użyciem parametru mmap
bez użycia MAP_FIXED
, jądro nadal będzie używać całej strony, co spowoduje zużycie pamięci. Z tego powodu wartość PAGE_SIZE
jest nieokreślona, gdy włączony jest tryb 16 KB w NDK r27 i nowszych.
Jeśli Twoja aplikacja używa w ten sposób klasy PAGE_SIZE
i nigdy nie przekazuje bezpośrednio tej wartości do jądra, zamiast używać PAGE_SIZE
, utwórz nową zmienną z nową nazwą, która będzie wskazywać, że jest używana do innych celów i nie odzwierciedla rzeczywistej strony pamięci.
Testowanie aplikacji w środowisku o rozmiarze 16 KB
Gdy utworzysz aplikację z obsługą urządzeń o rozmiarze 16 KB, przetestuj ją w środowisku o rozmiarze 16 KB, aby sprawdzić, czy nie występują w niej jakieś regresje. Aby to zrobić, skonfiguruj jedno z poniższych środowisk testowych, a potem dokładnie przetestuj aplikację, koncentrując się na obszarach, na które może wpłynąć zmiana instancji kodu, które odwołują się do określonych rozmiarów stron.
- Konfigurowanie emulatora Androida z obrazem systemu Android 15 opartym na rozmiarze 16 KB
- Użyj mątwy o rozmiarze strony 16 KB na ARM64
- Symuluj mątwę o rozmiarze strony 16 KB na urządzeniach x86–64
Konfigurowanie emulatora Androida z obrazem systemu Android 15 opartym na rozmiarze 16 KB
Aby skonfigurować środowisko o rozmiarze 16 KB za pomocą emulatora Androida, wykonaj te czynności:
Obrazy systemu emulatora Androida 15 o rozmiarze 16 KB są zgodne z Android Studio Jellyfish | 2023.3.1 lub nowszym. Aby jednak zapewnić większy komfort pracy z Androidem 15 w wersji beta, pobierz najnowszą wersję testową Android Studio.
Pamiętaj, że możesz zachować dotychczasową wersję Android Studio, ponieważ możesz zainstalować wiele wersji obok siebie.
W Android Studio kliknij Narzędzia > SDK Manager.
Na karcie Platformy SDK zaznacz Pokaż szczegóły pakietu, a następnie rozwiń sekcję Android VanillaIceCream Preview i wybierz jeden lub oba z tych obrazów systemu emulatora w zależności od urządzeń wirtualnych, które chcesz utworzyć:
- Eksperymentalny obraz systemu interfejsów API Google (16 tys. rozmiaru strony ARM 64 v8a)
- Eksperymentalny obraz systemu Atom API x86_64, rozmiar strony 16 kB
Aby pobrać wybrane obrazy systemu, kliknij Zastosuj > OK.
Postępuj zgodnie z instrukcjami, aby skonfigurować urządzenie wirtualne na Androidzie 15. Gdy pojawi się prośba o wybranie obrazu systemu, wybierz pobrany obraz systemu o rozmiarze 16 KB. Jeśli nie jest to zalecane automatycznie, 16 KB obrazu systemu znajdziesz na karcie Inne obrazy.