Mendukung ukuran halaman 16 KB

Persyaratan kompatibilitas Google Play 16 KB
Mulai 1 November 2025, semua aplikasi baru dan update pada aplikasi yang sudah ada yang dikirimkan ke Google Play dan menargetkan perangkat Android 15+ harus mendukung ukuran halaman 16 KB di perangkat 64-bit.

Sebelumnya, Android hanya mendukung ukuran halaman memori 4 KB, yang telah mengoptimalkan performa memori sistem untuk jumlah total memori rata-rata yang biasanya dimiliki perangkat Android. Mulai dari Android 15, AOSP mendukung perangkat yang dikonfigurasi untuk menggunakan ukuran halaman 16 KB (perangkat 16 KB). Jika aplikasi Anda menggunakan library NDK, baik secara langsung maupun tidak langsung melalui SDK, Anda harus membangun ulang aplikasi agar dapat berfungsi di perangkat 16 KB ini.

Seiring produsen perangkat terus membuat perangkat dengan jumlah memori fisik (RAM) yang lebih besar, banyak perangkat ini akan mengadopsi ukuran halaman 16 KB (dan pada akhirnya lebih besar) untuk mengoptimalkan performa perangkat. Menambahkan dukungan untuk perangkat dengan ukuran halaman 16 KB memungkinkan aplikasi Anda berjalan di perangkat ini dan membantu aplikasi Anda mendapatkan manfaat dari peningkatan performa terkait. Tanpa dikompilasi ulang, aplikasi tidak akan berfungsi di perangkat 16 KB dalam rilis Android mendatang.

Untuk membantu Anda menambahkan dukungan bagi aplikasi, kami telah memberikan panduan tentang cara memeriksa apakah aplikasi Anda terpengaruh, cara membangun ulang aplikasi (jika berlaku), dan cara menguji aplikasi Anda di lingkungan 16 KB menggunakan emulator (termasuk image sistem Android 15 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.

Memeriksa apakah aplikasi Anda terpengaruh

Jika aplikasi Anda menggunakan kode native, Anda harus membangun ulang aplikasi dengan dukungan untuk perangkat 16 KB. Jika tidak yakin apakah aplikasi Anda menggunakan kode native atau tidak, Anda dapat menggunakan APK Analyzer untuk mengidentifikasi apakah ada kode native atau tidak, lalu memeriksa perataan segmen ELF untuk library bersama yang Anda temukan. Android Studio juga menyediakan fitur yang membantu Anda mendeteksi masalah perataan secara otomatis.

Jika aplikasi Anda hanya menggunakan kode yang ditulis dalam bahasa pemrograman Java atau di Kotlin, termasuk semua library atau SDK, berarti aplikasi Anda sudah mendukung perangkat 16 KB. Namun, sebaiknya Anda menguji aplikasi di lingkungan 16 KB untuk memverifikasi bahwa tidak ada regresi perilaku aplikasi yang tidak terduga.

Apakah aplikasi Anda menggunakan kode native?

Aplikasi Anda menggunakan kode native jika salah satu hal berikut berlaku:

  • Aplikasi Anda menggunakan kode C/C++ (native) apa pun. Jika aplikasi Anda menggunakan Android NDK, berarti aplikasi Anda menggunakan kode native.
  • Aplikasi Anda ditautkan dengan library atau dependensi native 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 dibangun. Untuk memeriksa apakah aplikasi Anda menggunakan kode native (terlepas dari apakah aplikasi tersebut kompatibel dengan 16 KB):

  1. Buka Android Studio, lalu klik File > Open dan pilih project apa pun.
  2. Dari panel menu, klik Build > Analyze APK...

    Opsi menu Build Studio untuk meluncurkan APK Analyzer
  3. Pilih APK yang ingin Anda analisis.

  4. Lihat di dalam folder lib, yang menghosting file objek bersama (.so) jika ada. Jika ada file objek bersama, aplikasi Anda menggunakan kode native. Kolom Alignment menampilkan pesan peringatan untuk file yang memiliki masalah penyelarasan. Jika tidak ada file objek bersama atau tidak ada folder lib, aplikasi Anda tidak menggunakan kode native.

    Tampilan APK Analyzer yang menunjukkan bahwa file objek bersama ada

Mendeteksi masalah penyelarasan dengan pemeriksaan otomatis

Android Studio akan memperingatkan Anda secara proaktif jika library atau APK yang telah dibuat sebelumnya tidak mematuhi 16 KB. Gunakan alat APK Analyzer untuk meninjau library mana yang perlu di update atau apakah ada perubahan kode yang diperlukan.

Notifikasi peringatan Studio tentang masalah penyelarasan dalam project

Lint di Android Studio juga menandai library native yang tidak selaras dengan 16 KB.

Peringatan linter Studio tentang library native yang tidak selaras

Memeriksa penyelarasan segmen ELF untuk library bersama

Untuk library bersama apa pun, pastikan segmen ELF library bersama diselaraskan dengan benar menggunakan penyelarasan 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 penyelarasan segmen ELF menggunakan skrip check_elf_alignment.sh:

  1. Simpan skrip check_elf_alignment.sh ke file.

  2. Jalankan skrip di file APK aplikasi Anda:

    check_elf_alignment.sh APK_NAME.apk
    

    Skrip akan menampilkan ALIGNED atau UNALIGNED untuk semua arm64-v8a library bersama.

  3. Jika ada library bersama arm64-v8a atau x86_64 yang UNALIGNED, Anda harus mengupdate pengemasan 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 penyelarasan segmen ELF menggunakan alat command line secara langsung:

  1. Pastikan Android SDK Build-Tools versi 35.0.0 atau yang lebih tinggi dan Android NDK diinstal menggunakan SDK Manager di Android Studio atau sdkmanager alat command line.
  2. Ekstrak file APK aplikasi Anda:

    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
    
  3. Di direktori sementara tempat Anda mengekstrak file APK, periksa konten direktori lib untuk file objek bersama (.so). Ini adalah file objek bersama yang sama yang akan Anda lihat saat mengidentifikasi library native menggunakan APK Analyzer. Jalankan perintah berikut pada 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, dan NDK_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
    
  4. Periksa baris output untuk memastikan segmen pemuatan tidak memiliki nilai kurang dari 2**14. Jika ada segmen pemuatan yang memiliki nilai 2**13, 2**12, atau yang lebih rendah, Anda harus mengupdate pengemasan untuk library tersebut, lalu mengompilasi ulang aplikasi dan menguji ulang dengan mengikuti langkah-langkah di bagian ini.

  5. Selanjutnya, jalankan alat command line zipalign di 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, dan APK_NAME adalah nama file APK aplikasi Anda. Baris terakhir output akan menampilkan "Verification successful" jika semua library bersama diselaraskan dengan benar.

    Jika verifikasi gagal, beberapa library bersama perlu diselaraskan ulang, sehingga Anda harus mengupdate pengemasan untuk library tersebut, lalu mengompilasi ulang aplikasi dan menguji ulang dengan mengikuti langkah-langkah di bagian ini.

Mem-build aplikasi Anda dengan dukungan untuk perangkat 16 KB

Jika aplikasi Anda menggunakan kode native, selesaikan langkah-langkah yang diuraikan di bagian berikut untuk memastikan aplikasi Anda mendukung perangkat 16 KB:

  1. Mengupdate pengemasan library bersama
  2. Mengompilasi aplikasi Anda menggunakan penyelarasan ELF 16 KB
  3. Memperbaiki kode dan mengatasi masalah runtime
  4. Memeriksa SDK untuk dukungan 16 KB

Mengupdate pengemasan library bersama

Upgrade ke AGP versi 8.5.1 atau yang lebih tinggi dan gunakan library bersama yang tidak dikompresi.

Menggunakan bundletool untuk memverifikasi penyelarasan zip

Untuk melihat penyelarasan paket, gunakan:

bundletool dump config --bundle=<my .aab>  | grep alignment

Jika Anda melihat PAGE_ALIGNMENT_16K, berarti paket Anda meminta penyelarasan zip 16 KB. Jika Anda melihat PAGE_ALIGNMENT_4K, hal ini menginstruksikan APK yang dibuat dari AAB ini untuk memiliki file .so yang diselaraskan dengan ZIP 4 KB dalam file zip.

AGP versi 8.5.1 atau yang lebih tinggi

Perangkat 16 KB memerlukan aplikasi yang dilengkapi dengan library bersama yang tidak dikompresi untuk menyelaraskannya pada batas yang diselaraskan dengan ZIP 16 KB. Untuk melakukannya, Anda harus mengupgrade ke Android Gradle Plugin (AGP) versi 8.5.1 atau yang lebih tinggi. Lihat bagian Android Upgrade Assistant plugin 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 menggunakan library bersama yang dikompresi. Update konfigurasi Gradle Anda agar Gradle mengompresi library bersama saat mengemas 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
      }
  }
}
AGP versi 8.0 atau yang lebih rendah

Jika Anda menggunakan versi AGP yang sama atau lebih rendah dari 8.0, Anda juga harus menonaktifkan opsi library native yang tidak dikompresi untuk App Bundle di file gradle.properties:

android.bundle.enableUncompressedNativeLibs=false

Mengompilasi aplikasi Anda menggunakan penyelarasan ELF 16 KB

Perangkat 16 KB memerlukan segmen ELF library bersama untuk diselaraskan dengan benar menggunakan penyelarasan ELF 16 KB agar aplikasi Anda dapat berjalan.

Untuk developer game, jika game Anda berjalan di atas mesin game Unity, lihat ke panduan Unity. Jika game Anda berjalan di atas mesin game Unreal, lihat panduan Unreal. Untuk mesin game native, lanjutkan dengan panduan ini.

Untuk mengompilasi aplikasi Anda menggunakan penyelarasan 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 yang diselaraskan dengan 16 KB secara default.

Android NDK r27 dan yang lebih rendah

Untuk mendukung kompilasi library bersama yang diselaraskan dengan 16 KB dengan Android NDK versi r27 atau yang lebih rendah, gunakan flag linker berikut:

-Wl,-z,max-page-size=16384
-Wl,-z,common-page-size=16384

Berikut cara mengupdate file konfigurasi sistem build Anda:

ndk-build

Jika Anda menggunakan ndk-build, update Android.mk untuk mengaktifkan penyelarasan ELF 16 KB:

LOCAL_LDFLAGS += -Wl,-z,max-page-size=16384 -Wl,-z,common-page-size=16384

CMake

Jika Anda menggunakan CMake, update CMakeLists.txt untuk mengaktifkan penyelarasan ELF 16 KB:

target_link_options(${CMAKE_PROJECT_NAME} PRIVATE
    "-Wl,-z,max-page-size=16384"
    "-Wl,-z,common-page-size=16384"
)

Memperbaiki kode dan mengatasi masalah runtime

Meskipun aplikasi Anda diselaraskan dengan 16 KB, aplikasi Anda dapat mengalami error jika tempat dalam kode Anda mengasumsikan bahwa perangkat menggunakan ukuran halaman tertentu. Untuk menghindarinya, selesaikan langkah-langkah berikut:

  1. Hapus dependensi hardcode yang mereferensikan konstanta atau instance PAGE_SIZE dalam logika kode Anda yang mengasumsikan bahwa ukuran halaman perangkat adalah 4 KB (4096).

    Gunakan getpagesize() atau sysconf(_SC_PAGESIZE) sebagai gantinya.

  2. Cari penggunaan mmap() dan API lain yang memerlukan argumen yang diselaraskan 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 tetap menggunakan seluruh halaman, yang membuang-buang 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, 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 prebuilt terbaru. Namun, karena beberapa prebuilt SDK 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 Anda di lingkungan 16 KB

Setelah mem-build aplikasi Anda dengan dukungan untuk perangkat 16 KB, Anda harus menguji aplikasi di lingkungan 16 KB untuk melihat apakah aplikasi Anda mengalami regresi. Untuk melakukannya, ikuti langkah-langkah ini:

  1. Siapkan Android 15 SDK atau yang lebih tinggi.

  2. Siapkan salah satu lingkungan pengujian berikut:

  3. Mulai perangkat pengujian Anda, lalu jalankan perintah berikut untuk memverifikasi bahwa perangkat tersebut menggunakan lingkungan 16 KB:

    adb shell getconf PAGE_SIZE
    

    Perintah harus menampilkan nilai 16384.

  4. 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
    
  5. 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 berbasis 16 KB

Untuk menyiapkan lingkungan 16 KB menggunakan Android Emulator, ikuti langkah-langkah berikut:

  1. Di Android Studio, klik Tools > SDK Manager.
  2. Di tab SDK Platforms, centang Show Package Details, lalu luaskan bagian Android VanillaIceCream atau yang lebih tinggi dan pilih satu atau kedua image sistem emulator berikut, bergantung pada perangkat virtual yang ingin Anda buat:

    • Google APIs Experimental 16 KB Page Size ARM 64 v8a System Image
    • Google APIs Experimental 16 KB Page Size Intel x86_64 Atom System Image
    Mendownload image sistem emulator 16 KB menggunakan SDK Manager di
  Android Studio
  3. Klik Apply > OK untuk mendownload image sistem yang Anda pilih.

  4. 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 Other Images.

    Temukan image emulator 16 KB di tab Other Images

Meluncurkan emulator

Setelah selesai menyiapkan Android Emulator dan perangkat virtual, luncurkan emulator dari menu perangkat target, atau dari command line.

Mengaktifkan mode 16 KB di perangkat menggunakan opsi developer

Aktifkan opsi developer Boot dengan ukuran halaman 16 KB untuk mem-boot perangkat dalam mode 16 KB.

Dalam versi QPR Android 15, Anda dapat menggunakan opsi developer yang tersedia di perangkat tertentu untuk mem-boot perangkat dalam mode 16 KB dan melakukan pengujian di perangkat. Sebelum menggunakan opsi developer, buka Setelan > Sistem > Update software dan terapkan update yang tersedia.

Opsi developer ini tersedia di perangkat berikut:

  • Pixel 8 dan 8 Pro (dengan Android 15 QPR1 atau yang lebih tinggi)

  • Pixel 8a (dengan Android 15 QPR1 atau yang lebih baru)

  • Pixel 9, 9 Pro, dan 9 Pro XL (dengan Android 15 QPR2 atau yang lebih baru)

  • Pixel 9a (dengan Android 16 atau yang lebih baru)

Mode kompatibilitas mundur 16 KB

Peringatan dalam mode kompatibilitas ukuran halaman

Peringatan dalam mode kompatibilitas ukuran halaman

Opsi kompatibilitas mundur 16 KB tersedia saat perangkat berjalan dengan kernel 16 KB. Pengelola paket menjalankan aplikasi dalam mode kompatibilitas mundur 16 KB saat kondisi berikut terpenuhi:

  • Jika aplikasi memiliki file ELF (dengan ekstensi .so) dengan penyelarasan segmen LOAD sebesar 4 KB.
  • Jika APK yang di-zip memiliki file ELF yang tidak dikompresi yang diselaraskan dengan ZIP 4 KB.

Jika pengelola paket telah mengaktifkan mode kompatibilitas mundur 16 KB untuk aplikasi, aplikasi akan menampilkan peringatan saat pertama kali diluncurkan yang menyatakan bahwa aplikasi berjalan dalam mode kompatibilitas mundur 16 KB.

Mode kompatibilitas mundur 16 KB memungkinkan beberapa aplikasi berfungsi, tetapi untuk keandalan dan stabilitas terbaik, aplikasi tetap harus diselaraskan dengan 16 KB.

Di halaman info aplikasi, di bagian Advanced, aktifkan atau nonaktifkan setelan Run app with page size compat mode untuk mengaktifkan atau menonaktifkan mode kompatibilitas mundur 16 KB untuk aplikasi tertentu. Setelan ini hanya terlihat saat perangkat berjalan dengan ukuran halaman 16 KB.

Setelan mode kompatibilitas ukuran halaman

Setelan mode kompatibilitas ukuran halaman

Untuk memaksa kompatibilitas mundur 16 KB aktif untuk setiap aplikasi di perangkat:

adb shell setprop bionic.linker.16kb.app_compat.enabled true
adb shell setprop pm.16kb.app_compat.disabled false

Untuk memaksa kompatibilitas mundur 16 KB nonaktif untuk setiap aplikasi di perangkat:

adb shell setprop bionic.linker.16kb.app_compat.enabled false
adb shell setprop pm.16kb.app_compat.disabled true

Di Android 17, Anda juga dapat memaksa kompatibilitas mundur 16 KB nonaktif untuk setiap aplikasi dan menyebabkan biner yang tidak kompatibel segera dibatalkan:

    adb shell setprop bionic.linker.16kb.app_compat.enabled fatal
    adb shell setprop pm.16kb.app_compat.disabled true

Tetapkan properti android:pageSizeCompat ke aktif atau nonaktif untuk mengaktifkan atau menonaktifkan mode kompatibilitas mundur untuk aplikasi tertentu di AndroidManifest.xml. Jika properti ini ditetapkan, aplikasi tidak akan menampilkan peringatan mode kompatibilitas mundur saat diluncurkan.

Persyaratan kompatibilitas Google Play

Karena produsen perangkat melengkapi perangkat dengan lebih banyak RAM untuk mengoptimalkan performa, banyak yang akan mengadopsi ukuran halaman yang lebih besar seperti 16 KB. Untuk mempersiapkan peluncuran perangkat mendatang ini, Google Play memperkenalkan persyaratan kompatibilitas baru: mulai 1 November 2025, semua aplikasi baru dan update pada aplikasi yang sudah ada yang dikirimkan ke Google Play dan menargetkan perangkat yang menjalankan Android 15 (level API 35) dan yang lebih tinggi harus mendukung ukuran halaman 16 KB.

Untuk membaca lebih lanjut persyaratan kompatibilitas ini, lihat postingan blog ini.