Sebelumnya, Android hanya mendukung ukuran halaman memori 4 KB, yang memiliki performa memori sistem yang optimal untuk jumlah rata-rata total memori yang perangkat Android. Mulai Android 15, AOSP mendukung perangkat yang dikonfigurasi untuk menggunakan ukuran halaman 16 KB (16 KB perangkat). Jika aplikasi Anda menggunakan library NDK, baik secara langsung atau secara tidak langsung melalui SDK, Anda harus membangun ulang aplikasi agar berfungsi di perangkat 16 KB ini.
Karena produsen perangkat terus membuat perangkat dengan jumlah memori fisik (RAM), banyak perangkat ini akan menggunakan 16 KB (dan akhirnya lebih besar) ukuran halaman untuk mengoptimalkan performa perangkat. Menambahkan dukungan untuk perangkat ukuran halaman 16 KB memungkinkan aplikasi Anda berjalan di perangkat lain dan membantu aplikasi Anda mendapatkan manfaat dari performa terkait peningkatan performa. Tanpa kompilasi ulang, aplikasi mungkin tidak berfungsi di perangkat 16 KB saat diproduksi dalam rilis Android mendatang.
Untuk membantu menambahkan dukungan bagi aplikasi Anda, kami telah memberikan panduan tentang cara memeriksa jika aplikasi Anda terdampak, berikut cara membuat ulang aplikasi (jika ada), dan cara menguji aplikasi Anda di lingkungan berukuran 16 KB menggunakan emulator (termasuk Android 15 image sistem untuk Android Emulator).
Manfaat dan peningkatan performa
Perangkat yang dikonfigurasi dengan ukuran halaman 16 KB menggunakan memori yang sedikit lebih banyak secara rata-rata, tetapi juga mendapatkan berbagai peningkatan performa untuk sistem dan aplikasi:
- Waktu peluncuran aplikasi lebih rendah saat sistem berada dalam tekanan memori: rata-rata 3,16% lebih rendah, dengan peningkatan yang lebih signifikan (hingga 30%) untuk beberapa aplikasi yang kami uji
- Mengurangi penggunaan daya selama peluncuran aplikasi: Pengurangan rata-rata 4,56%
- Peluncuran kamera lebih cepat: rata-rata hot start 4,48% lebih cepat dan cold start 6,60% lebih cepat
- Waktu booting sistem yang lebih baik: rata-rata meningkat sebesar 8% (sekitar 950 milidetik)
Peningkatan ini didasarkan pada pengujian awal kami, dan hasil pada perangkat aktual kemungkinan akan berbeda. Kami akan memberikan analisis tambahan tentang potensi keuntungan untuk aplikasi saat kami melanjutkan pengujian.
Periksa apakah aplikasi Anda terpengaruh
Jika aplikasi Anda menggunakan kode native, Anda harus mem-build ulang aplikasi dengan dukungan untuk perangkat 16 KB. Jika tidak yakin apakah aplikasi Anda menggunakan kode native, Anda dapat menggunakan APK Analyzer untuk mengidentifikasi apakah ada kode native, lalu memeriksa perataan segmen ELF untuk library bersama yang Anda temukan.
Jika aplikasi Anda hanya menggunakan kode yang ditulis dalam bahasa pemrograman Java atau di Kotlin, termasuk semua library atau SDK, berarti aplikasi tersebut sudah mendukung perangkat 16 KB. Namun, sebaiknya Anda menguji aplikasi di lingkungan 16 KB untuk memverifikasi bahwa tidak ada regresi yang tidak terduga dalam perilaku aplikasi.
Apakah aplikasi Anda menggunakan kode native?
Aplikasi Anda menggunakan kode native jika salah satu hal berikut berlaku:
- Aplikasi Anda menggunakan kode C/C++ (native). Jika aplikasi Anda menggunakan Android NDK, aplikasi Anda menggunakan kode native.
- Aplikasi Anda ditautkan dengan library native atau dependensi pihak ketiga (seperti SDK) yang menggunakannya.
- Aplikasi Anda dibuat oleh pembuat aplikasi pihak ketiga yang menggunakan library native di perangkat.
Mengidentifikasi library native menggunakan APK Analyzer
APK Analyzer adalah alat yang memungkinkan Anda mengevaluasi berbagai aspek APK yang telah dibuat. Untuk mengidentifikasi apakah aplikasi Anda menggunakan kode atau library native, ikuti langkah-langkah berikut:
- Buka Android Studio, lalu klik File > Open dan pilih project apa pun.
Dari panel menu, klik Build > Analyze APK...
Pilih APK yang ingin Anda analisis.
Lihat di dalam folder
lib
, yang menghosting file objek bersama (.so
) jika ada. Jika ada file objek bersama, aplikasi Anda akan menggunakan kode native. Jika tidak ada file objek bersama atau tidak ada folderlib
, aplikasi Anda tidak menggunakan kode native.
Memeriksa perataan segmen ELF untuk library bersama
Untuk library bersama apa pun, pastikan segmen ELF library bersama
disejajarkan dengan benar menggunakan perataan ELF 16 KB. Jika Anda mengembangkan di
Linux atau macOS, Anda dapat menggunakan skrip check_elf_alignment.sh
seperti yang dijelaskan di
bagian berikut. Anda juga dapat menggunakan alat command line secara langsung.
Menggunakan skrip check_elf_alignment.sh (Linux atau macOS)
Ikuti langkah-langkah berikut untuk memeriksa perataan segmen ELF menggunakan
skrip check_elf_alignment.sh
:
Simpan skrip
check_elf_alignment.sh
ke file.Jalankan skrip pada file APK aplikasi Anda:
check_elf_alignment.sh APK_NAME.apk
Skrip menghasilkan
ALIGNED
atauUNALIGNED
untuk semua library bersamaarm64-v8a
.Jika library bersama
arm64-v8a
ataux86_64
adalahUNALIGNED
, Anda harus mengupdate paket untuk library tersebut, lalu mengompilasi ulang aplikasi dan menguji ulang dengan mengikuti langkah-langkah di bagian ini.
Menggunakan alat command line secara langsung
Ikuti langkah-langkah berikut untuk memeriksa perataan segmen ELF menggunakan alat command line secara langsung:
- Pastikan Android SDK Build-Tools versi 35.0.0 atau yang lebih tinggi dan
Android NDK diinstal menggunakan SDK Manager di Android Studio atau
alat command line
sdkmanager
. Ekstrak file APK aplikasi:
Linux atau macOS
unzip APK_NAME.apk -d /tmp/my_apk_out
Windows (PowerShell)
Expand-Archive -Path .\APK_NAME.apk -DestinationPath ~\tmp\my_apk_out
Di direktori sementara tempat Anda mengekstrak file APK, periksa konten direktori
lib
untuk file objek bersama (.so
). File ini adalah file objek bersama yang sama dengan yang akan Anda lihat saat mengidentifikasi library native menggunakan APK Analyzer. Jalankan perintah berikut di setiap file objek bersama:Linux atau macOS
SDK_ROOT_LOCATION/Android/sdk/ndk/NDK_VERSION/toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-objdump -p SHARED_OBJECT_FILE.so | grep LOAD
Windows (PowerShell)
SDK_ROOT_LOCATION\Android\sdk\ndk\NDK_VERSION\toolchains\llvm\prebuilt\windows-x86_64\bin\llvm-objdump.exe -p SHARED_OBJECT_FILE.so | Select-String -Pattern "LOAD"
Dengan
SDK_ROOT_LOCATION
adalah jalur ke direktori tempat Anda menginstal Android SDK,SHARED_OBJECT_FILE
adalah nama file objek bersama yang Anda periksa, danNDK_VERSION
adalah versi Android NDK yang telah Anda instal (misalnya,28.0.12433566
). Output akan terlihat seperti berikut untuk setiap file yang Anda periksa:LOAD off 0x0000000000000000 vaddr 0x0000000000000000 paddr 0x0000000000000000 align 2**14 LOAD off 0x0000000000042a90 vaddr 0x0000000000043a90 paddr 0x0000000000043a90 align 2**14 LOAD off 0x0000000000046230 vaddr 0x0000000000048230 paddr 0x0000000000048230 align 2**14
Periksa baris output untuk memastikan segmen pemuatan tidak memiliki nilai yang kurang dari
2**14
. Jika segmen pemuatan memiliki nilai2**13
,2**12
, atau yang lebih rendah, Anda harus memperbarui paket untuk library tersebut, lalu mengompilasi ulang aplikasi dan menguji ulang dengan mengikuti langkah-langkah di bagian ini.Selanjutnya, jalankan alat command line
zipalign
pada file APK aplikasi Anda:Linux atau macOS
SDK_ROOT_LOCATION/Android/sdk/build-tools/35.0.0/zipalign -v -c -P 16 4 APK_NAME.apk
Windows (PowerShell)
SDK_ROOT_LOCATION\Android\sdk\build-tools\35.0.0\zipalign.exe -v -c -P 16 4 APK_NAME.apk
Dengan
SDK_ROOT_LOCATION
adalah jalur ke direktori tempat Anda menginstal Android SDK, danAPK_NAME
adalah nama file APK aplikasi Anda. Baris terakhir output akan menampilkan "Verifikasi berhasil" jika semua library bersama disejajarkan dengan benar.Jika verifikasi gagal, beberapa library bersama perlu disesuaikan kembali, sehingga Anda harus memperbarui paket untuk library tersebut, lalu mengompilasi ulang aplikasi dan menguji ulang dengan mengikuti langkah-langkah di bagian ini.
Mem-build aplikasi dengan dukungan untuk perangkat 16 KB
Untuk mendukung perangkat 16 KB, aplikasi yang menggunakan kode native harus menyelesaikan langkah-langkah yang diuraikan di bagian berikut. Jika Anda mengupdate ke AGP versi 8.5.1 atau yang lebih tinggi dan NDK versi r28 atau yang lebih tinggi, dan menggunakan dependensi bawaan yang kompatibel dengan 16 KB, aplikasi akan kompatibel dengan 16 KB secara default.
Memperbarui paket library bersama Anda
Sebaiknya upgrade ke AGP versi 8.5.1 atau yang lebih tinggi dan gunakan library bersama yang tidak dikompresi.
AGP versi 8.5.1 atau yang lebih tinggi
Perangkat 16 KB memerlukan aplikasi yang dikirimkan dengan library bersama yang tidak dikompresi untuk menyejajarkannya pada batas yang diselaraskan zip 16 KB. Untuk melakukannya, Anda harus mengupgrade ke Plugin Android Gradle (AGP) versi 8.5.1 atau yang lebih tinggi. Lihat bagian Upgrade Assistant plugin Android Gradle untuk mengetahui detail tentang proses upgrade.
AGP versi 8.5 atau yang lebih rendah
Jika Anda tidak dapat mengupgrade AGP ke versi 8.5.1 atau yang lebih tinggi, alternatifnya adalah beralih untuk menggunakan library bersama yang dikompresi. Update konfigurasi Gradle agar Gradle mengompresi library bersama saat memaketkan aplikasi untuk menghindari masalah penginstalan aplikasi dengan library bersama yang tidak diselaraskan.
Groovy
Di file build.gradle
, tambahkan opsi berikut:
android {
...
packagingOptions {
jniLibs {
useLegacyPackaging true
}
}
}
Kotlin
Di file build.gradle.kts
, tambahkan opsi berikut:
android {
...
packagingOptions {
jniLibs {
useLegacyPackaging = true
}
}
}
Mengompilasi aplikasi menggunakan perataan ELF 16 KB
Perangkat 16 KB memerlukan segmen ELF library bersama untuk disejajarkan dengan benar menggunakan perataan ELF 16 KB agar aplikasi Anda dapat berjalan.
Untuk mengompilasi aplikasi menggunakan perataan ELF 16 KB, selesaikan langkah-langkah di salah satu bagian berikut, bergantung pada versi Android NDK yang Anda gunakan.
Android NDK r28 dan yang lebih tinggi
NDK versi r28 dan yang lebih tinggi mengompilasi 16 KB yang diselaraskan secara default.
Android NDK r27
Untuk mendukung kompilasi library bersama yang diselaraskan 16 KB dengan Android NDK
versi r27 dan yang lebih tinggi, Anda perlu mengupdate tanda ndk-build
, build.gradle
,
build.gradle.kts
, atau penaut sebagai berikut:
ndk-build
Di Application.mk
Anda:
APP_SUPPORT_FLEXIBLE_PAGE_SIZES := true
Groovy
Dalam file build.gradle
, tetapkan argumen
-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
Dalam file build.gradle.kts
, tetapkan argumen
-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")
}
}
}
}
Sistem build lainnya
Tentukan flag penaut berikut:
-Wl,-z,max-page-size=16384
Android NDK r26 dan yang lebih lama
Untuk mendukung kompilasi library bersama yang diselaraskan 16 KB dengan Android NDK
versi r26 atau yang lebih rendah, Anda perlu mengupdate konfigurasi ndk-build
atau cmake
sebagai berikut:
ndk-build
Update Android.mk
untuk mengaktifkan perataan ELF 16 KB:
LOCAL_LDFLAGS += "-Wl,-z,max-page-size=16384"
CMake
Update CMakeLists.txt
untuk mengaktifkan perataan ELF 16 KB:
target_link_options(${CMAKE_PROJECT_NAME} PRIVATE "-Wl,-z,max-page-size=16384")
Memeriksa instance kode yang mereferensikan ukuran halaman tertentu
Meskipun aplikasi Anda sejajar dengan 16 KB, aplikasi Anda dapat mengalami error jika tempat dalam kode Anda mengasumsikan bahwa perangkat menggunakan ukuran halaman tertentu. Untuk menghindari hal ini, selesaikan langkah-langkah berikut:
Hapus dependensi hard code yang mereferensikan konstanta atau instance
PAGE_SIZE
dalam logika kode Anda yang mengasumsikan bahwa ukuran halaman perangkat adalah 4 KB (4096
).Sebagai gantinya, gunakan
getpagesize()
atausysconf(_SC_PAGESIZE)
.Cari penggunaan
mmap()
dan API lain yang memerlukan argumen yang sejajar dengan halaman dan ganti dengan alternatif jika diperlukan.
Dalam beberapa kasus, jika aplikasi Anda menggunakan PAGE_SIZE
sebagai nilai praktis yang tidak
terikat dengan ukuran halaman yang mendasarinya, hal ini tidak akan menyebabkan aplikasi Anda rusak saat
digunakan dalam mode 16 KB. Namun, jika nilai ini diteruskan ke kernel dengan
mmap
tanpa MAP_FIXED
, kernel masih menggunakan seluruh halaman, yang membuang
beberapa memori. Karena alasan ini, PAGE_SIZE
tidak ditentukan saat mode 16 KB
diaktifkan di NDK r27 dan yang lebih tinggi.
Jika aplikasi Anda menggunakan PAGE_SIZE
dengan cara ini dan tidak pernah meneruskan nilai ini secara langsung ke
kernel, maka buat variabel baru dengan nama
baru, bukan menggunakan PAGE_SIZE
, untuk menunjukkan bahwa variabel tersebut digunakan untuk tujuan lain dan tidak mencerminkan halaman
memori yang sebenarnya.
Memeriksa SDK untuk dukungan 16 KB
Banyak SDK yang kompatibel dengan ukuran halaman 16 KB, terutama jika Anda mem-buildnya sendiri atau mendapatkan build bawaan terbaru. Namun, karena beberapa SDK bawaan atau versi SDK tidak kompatibel dengan 16 KB, Anda harus memeriksa situs untuk setiap penyedia SDK guna menentukan versi mana yang akan digunakan dengan 16 KB.
Menguji aplikasi di lingkungan 16 KB
Setelah mem-build aplikasi dengan dukungan untuk perangkat 16 KB, sebaiknya uji aplikasi Anda di lingkungan 16 KB untuk melihat apakah aplikasi Anda mengalami regresi. Untuk melakukannya, ikuti langkah berikut:
Siapkan salah satu lingkungan pengujian berikut:
Mulai perangkat pengujian, lalu jalankan perintah berikut untuk memverifikasi bahwa perangkat menggunakan lingkungan 16 KB:
adb shell getconf PAGE_SIZE
Perintah akan menampilkan nilai
16384
.Jalankan perintah
zipalign
berikut untuk memverifikasi bahwa aplikasi Anda diselaraskan dengan 16 KB, dengan APK_NAME adalah nama file APK aplikasi Anda:zipalign -c -P 16 -v 4 APK_NAME.apk
Uji aplikasi Anda secara menyeluruh, dengan berfokus pada area yang mungkin terpengaruh oleh perubahan instance kode yang mereferensikan ukuran halaman tertentu.
Menyiapkan Android Emulator dengan image sistem Android 15 berbasis 16 KB
Untuk menyiapkan lingkungan 16 KB menggunakan Android Emulator, ikuti langkah-langkah berikut:
Image sistem emulator Android 15 berbasis 16 KB kompatibel dengan Android Studio Jellyfish | 2023.3.1 atau yang lebih tinggi. Namun, untuk pengalaman terbaik saat menggunakan Android 15 Beta, download versi pratinjau terbaru Android Studio.
Perlu diingat bahwa Anda tidak perlu meng-uninstal versi Android Studio yang ada karena Anda dapat menginstal beberapa versi secara berdampingan.
Di Android Studio, klik Tools > SDK Manager.
Di tab SDK Platforms, centang Show Package Details, lalu luaskan bagian Android VanillaIceCream Preview dan pilih salah satu atau kedua image sistem emulator berikut, bergantung pada perangkat virtual yang ingin Anda buat:
- Image Sistem ARM 64 v8a Ukuran Halaman 16k Google API Eksperimental
- Image Sistem Atom Intel x86_64 Ukuran Halaman 16k Eksperimental Google API
Klik Apply > OK untuk mendownload image sistem yang Anda pilih.
Ikuti langkah-langkah untuk menyiapkan perangkat virtual untuk Android 15, dan saat diminta untuk memilih image sistem, pilih image sistem 16 KB yang Anda download. Jika tidak direkomendasikan secara otomatis, Anda dapat menemukan image sistem 16 KB di tab Image Lainnya.
- Di Pengelola perangkat, klik 3 titik di samping image 16 KB, lalu klik Tampilkan di Disk.
- Di folder ini, temukan file
config.ini
. Tambahkan baris berikut ke file
config.ini
dan simpan perubahan Anda:kernel.parameters = androidboot.page_shift=14
Untuk memverifikasi perubahan Anda, jalankan perintah berikut, yang akan menampilkan
16384
:adb shell getconf PAGE_SIZE
Mengaktifkan mode 16 KB di perangkat menggunakan opsi developer
Mulai Android 15 QPR1, Anda dapat menggunakan opsi developer yang tersedia di perangkat tertentu untuk mem-booting perangkat dalam mode 16 KB dan melakukan pengujian di perangkat.
Opsi developer ini tersedia di perangkat berikut:
- Pixel 8 dan 8 Pro (dengan Android 15 QPR1 atau yang lebih baru)
- Pixel 8a (dengan Android 15 QPR1 atau yang lebih baru)