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 rata-rata yang sedikit lebih banyak, tetapi juga mendapatkan berbagai peningkatan performa untuk sistem dan aplikasi:
- Waktu peluncuran aplikasi yang lebih rendah saat sistem berada di bawah tekanan memori: rata-rata 3,16% lebih rendah, dengan peningkatan yang lebih signifikan (hingga 30%) untuk beberapa aplikasi yang kami uji
- Pengurangan penarikan daya selama peluncuran aplikasi: rata-rata penurunan 4,56%
- Peluncuran kamera yang lebih cepat: rata-rata hot start 4,48% lebih cepat dan rata-rata cold start 6,60% lebih cepat
- Peningkatan waktu booting sistem: meningkat rata-rata sebesar 1,5% (sekitar 0,8 detik)
Peningkatan ini didasarkan pada pengujian awal kami, dan hasil pada perangkat yang sebenarnya mungkin akan berbeda. Kami akan memberikan analisis tambahan tentang potensi keuntungan bagi aplikasi saat melanjutkan pengujian.
Periksa apakah aplikasi Anda terpengaruh
Jika aplikasi menggunakan kode native apa pun, Anda harus mem-build ulang aplikasi dengan dukungan untuk perangkat 16 KB. Jika tidak yakin apakah aplikasi menggunakan kode native atau tidak, Anda dapat menggunakan APK Analyzer untuk mengidentifikasi apakah kode native ada atau tidak.
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. Meskipun demikian, sebaiknya uji aplikasi Anda 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 aplikasi Android NDK, maka aplikasi Anda akan menggunakan kode native.
- Aplikasi Anda tertaut dengan library native pihak ketiga atau dependensi yang menggunakannya.
- Aplikasi Anda dibuat oleh pembuat aplikasi pihak ketiga yang menggunakan library native di perangkat seluler.
Mengidentifikasi library native menggunakan APK Analyzer
APK Analyzer adalah alat yang memungkinkan Anda mengevaluasi berbagai aspek aplikasi bawaan APK lainnya. Untuk mengidentifikasi apakah aplikasi Anda menggunakan kode native atau library, ikuti langkah-langkah berikut langkah:
- Buka Android Studio, lalu klik File > Buka dan pilih project apa saja.
Dari panel menu, klik Build > Menganalisis APK...
Pilih APK yang ingin Anda analisis.
Lihat di dalam folder
lib
, yang menghosting file objek bersama (.so
) jika ada tersedia. Jika ada file objek bersama, aplikasi Anda akan menggunakan native pada kode sumber. Jika tidak ada file objek bersama atau tidak ada folderlib
, maka aplikasi Anda tidak menggunakan kode native.
Membuat 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.
Mengupdate paket library bersama
Sebaiknya upgrade ke AGP versi 8.3 atau yang lebih baru dan gunakan file yang tidak dikompresi perpustakaan bersama.
AGP versi 8.3 atau yang lebih baru
Perangkat 16 KB memerlukan aplikasi yang dikirimkan dengan library bersama tanpa kompresi untuk selaraskan pada batas 16 KB yang selaras dengan zip. Untuk melakukannya, Anda harus mengupgrade ke Plugin Android Gradle (AGP) versi 8.3 atau yang lebih tinggi. Lihat Panduan Bagian Upgrade Assistant plugin Gradle untuk mengetahui detail tentang proses upgrade.
AGP versi 8.2 atau yang lebih rendah
Jika Anda tidak dapat mengupgrade AGP ke versi 8.3 atau yang lebih tinggi, alternatifnya adalah beralih untuk menggunakan pustaka bersama terkompresi. Update konfigurasi Gradle Anda ke minta Gradle mengompresi library bersama saat memaketkan aplikasi untuk menghindari aplikasi masalah penginstalan pada library bersama yang tidak selaras.
Groovy
Di file build.gradle
Anda, tambahkan opsi berikut:
android {
...
packagingOptions {
jniLibs {
useLegacyPackaging true
}
}
}
Kotlin
Di file build.gradle.kts
Anda, tambahkan opsi berikut:
android {
...
packagingOptions {
jniLibs {
useLegacyPackaging = true
}
}
}
Kompilasi aplikasi Anda menggunakan penyelarasan ELF 16 KB
Perangkat berukuran 16 KB memerlukan koleksi bersama Segmen ELF untuk disejajarkan menggunakan penyelarasan ELF 16 KB dengan benar agar aplikasi Anda dapat berjalan.
Untuk mengompilasi aplikasi menggunakan penyelarasan ELF 16 KB, selesaikan langkah-langkah di salah satu bagian berikut tergantung pada versi Android NDK yang Anda gunakan.
Android NDK r26 dan yang lebih lama
Untuk mendukung kompilasi library bersama yang setara dengan 16 KB dengan Android NDK
versi r26 atau yang lebih lama, Anda perlu mengupdate ndk-build
atau cmake
konfigurasi sebagai berikut:
ndk-build
Perbarui Android.mk
untuk mengaktifkan penyelarasan ELF 16 KB:
LOCAL_LDFLAGS += "-Wl,-z,max-page-size=16384"
CMake
Perbarui CMakeLists.txt
untuk mengaktifkan penyelarasan ELF 16 KB:
target_link_options(${CMAKE_PROJECT_NAME} PRIVATE "-Wl,-z,max-page-size=16384")
Android NDK r27 dan yang lebih tinggi
Untuk mendukung kompilasi library bersama yang setara dengan 16 KB dengan Android NDK
versi r27 dan yang lebih tinggi, Anda perlu mengupdate ndk-build
, build.gradle
,
build.gradle.kts
, atau tanda penaut sebagai berikut:
ndk-build
Di Application.mk
Anda:
APP_SUPPORT_FLEXIBLE_PAGE_SIZES := true
Groovy
Di 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
Di 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
Memeriksa instance kode yang mereferensikan ukuran halaman tertentu
Meskipun aplikasi Anda selaras dengan 16 KB, aplikasi dapat mengalami error jika ada tempat di kode Anda mengasumsikan bahwa perangkat menggunakan ukuran halaman tertentu. Untuk menghindari hal ini, selesaikan langkah-langkah berikut:
Hapus semua dependensi hard code yang mereferensikan
PAGE_SIZE
atau instance dalam logika kode Anda yang mengasumsikan bahwa halaman perangkat berukuran 4 KB (4096
).Sebagai gantinya, gunakan
getpagesize()
atausysconf(_SC_PAGESIZE)
.Cari penggunaan
mmap()
dan API lain yang memerlukan penyesuaian halaman argumen dan ganti dengan alternatif jika diperlukan.
Dalam beberapa kasus, jika aplikasi Anda menggunakan PAGE_SIZE
sebagai nilai praktis yang bukan
terikat dengan ukuran halaman yang mendasarinya, hal ini tidak akan menyebabkan kerusakan aplikasi
saat digunakan dalam mode 16 KB. Namun, jika nilai ini diteruskan ke kernel
dengan mmap
tanpa MAP_FIXED
, kernel tetap menggunakan seluruh halaman, yang
membuang-buang memori. Karena alasan ini, PAGE_SIZE
tidak ditentukan saat 16 KB
diaktifkan di NDK r27 dan yang lebih tinggi.
Jika aplikasi Anda menggunakan PAGE_SIZE
dengan cara ini dan tidak pernah langsung meneruskan nilai ini ke
kernel, alih-alih menggunakan PAGE_SIZE
, buat variabel baru dengan
untuk menunjukkan bahwa nama tersebut digunakan untuk tujuan lain dan tidak mencerminkan
halaman kenangan Anda.
Menguji aplikasi di lingkungan berukuran 16 KB
Setelah membuat aplikasi dengan dukungan untuk perangkat 16 KB, Anda sebaiknya menguji aplikasi Anda di lingkungan 16 KB untuk melihat apakah pengalaman aplikasi Anda setiap regresi. Untuk melakukannya, ikuti langkah berikut:
Siapkan salah satu lingkungan pengujian berikut:
Mulai perangkat pengujian Anda, lalu jalankan perintah berikut untuk memastikan bahwa SDK ini menggunakan lingkungan berukuran 16 KB:
adb shell getconf PAGE_SIZE
Perintah ini akan menampilkan nilai
16384
.Untuk setiap pustaka bersama, pastikan bahwa Segmen ELF adalah disejajarkan dengan benar menggunakan penyelarasan ELF 16 KB. Anda dapat menggunakan skrip ini untuk dalam proses ini:
#!/bin/bash # usage: alignment.sh path to search for *.so files dir="$1" RED="\e[31m" GREEN="\e[32m" ENDCOLOR="\e[0m" matches="$(find $dir -name "*.so" -type f)" IFS=$'\n' for match in $matches; do res="$(objdump -p ${match} | grep LOAD | awk '{ print $NF }' | head -1)" if [[ $res =~ "2**14" ]] || [[ $res =~ "2**16" ]]; then echo -e "${match}: ${GREEN}ALIGNED${ENDCOLOR} ($res)" else echo -e "${match}: ${RED}UNALIGNED${ENDCOLOR} ($res)" fi done
Simpan skrip ke file, seperti
alignment.sh
.Ekstrak file APK aplikasi Anda:
unzip APK_NAME.apk -d /tmp/my_apk_out
Jalankan skrip pada file yang diekstrak di
/tmp/my_apk_out
direktori:alignment.sh /tmp/my_apk_out | grep "arm64-v8a"
Skrip menghasilkan
ALIGNED
atauUNALIGNED
untuk semuaarm64-v8a
library bersama.Jika library bersama
arm64-v8a
memilikiUNALIGNED
, Anda harus perbarui paket untuk library tersebut, lalu kompilasi ulang app dan uji ulang dengan mengikuti langkah-langkah di bagian ini.
Jalankan perintah
zipalign
berikut untuk memverifikasi bahwa aplikasi Anda sudah Diratakan sebesar 16 KB, dengan APK_NAME adalah nama file APK aplikasi Anda:zipalign -c -P 16 -v 4 APK_NAME.apk
Menguji aplikasi Anda secara menyeluruh, dengan fokus pada area yang mungkin terpengaruh mengubah 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 langkah:
Image sistem emulator Android 15 berbasis 16 KB kompatibel dengan Android Studio Jellyfish | 2023.3.1 atau yang lebih tinggi. Namun, untuk hasil terbaik saat menggunakan Android 15 Beta, download versi pratinjau Android Studio.
Perlu diingat bahwa Anda dapat mempertahankan 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 Pratinjau Android VanillaIceCream, lalu pilih salah satu atau kedua {i>image<i} sistem emulator berikut ini, tergantung pada perangkat virtual yang Anda ingin buat:
- Image Sistem ARM 64 v8a Ukuran Halaman Eksperimental Google API 16k
- Image Sistem Atom Intel x86_64 Eksperimental Ukuran Halaman 16k Google API
Klik Terapkan > OK untuk mendownload image sistem mana pun yang Anda pilih.
Ikuti langkah-langkah untuk menyiapkan perangkat virtual untuk Android 15, dan kapan diminta memilih image sistem, pilih image sistem 16 KB yang yang Anda unduh. Jika tidak direkomendasikan secara otomatis, Anda dapat menemukan Image sistem berukuran 16 KB di tab Image Lainnya.
- Di Device manager, klik 3 titik di samping gambar 16 KB, lalu klik Tampilkan di Disk.
- Di folder ini, temukan file
config.ini
. Tambahkan baris berikut ke dalam 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