Mendukung ukuran halaman 16 KB

Sebelumnya, Android hanya mendukung ukuran halaman memori 4 KB, yang memiliki performa memori sistem yang dioptimalkan untuk jumlah rata-rata total memori yang biasanya dimiliki perangkat Android.

Namun, karena produsen perangkat terus membangun perangkat dengan jumlah memori fisik (RAM) yang lebih besar, banyak dari perangkat ini kemungkinan akan dikonfigurasi dengan ukuran halaman 16 KB (dan pada akhirnya lebih besar) untuk mengoptimalkan performa perangkat. Kami berharap produsen perangkat akan lebih mengoptimalkan performa pada perangkat 16 KB mendatang, seperti yang mereka lakukan pada perangkat 4 KB. Menambahkan dukungan untuk perangkat berukuran 16 KB memungkinkan aplikasi Anda berjalan di perangkat ini dan membantu aplikasi mendapatkan manfaat dari peningkatan performa terkait.

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 lebih rendah saat sistem berada di bawah tekanan memori: rata-rata 3% lebih rendah
  • 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 Anda 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, 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 dari hal berikut berlaku:

  • Aplikasi Anda menggunakan kode C/C++ (native). Jika menggunakan Android NDK, berarti aplikasi Anda menggunakan kode native.
  • Aplikasi Anda ditautkan dengan library native pihak ketiga.
  • 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 mengidentifikasi apakah aplikasi Anda menggunakan library atau kode native, ikuti langkah-langkah berikut:

  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 akan menggunakan kode native. Jika tidak ada file objek bersama atau tidak ada folder lib, aplikasi Anda tidak menggunakan kode native.

    Tampilan APK Analyzer yang menunjukkan bahwa ada
file objek bersama

Membangun aplikasi Anda dengan dukungan untuk perangkat berukuran 16 KB

Untuk mendukung perangkat 16 KB, aplikasi yang menggunakan kode native harus menyelesaikan langkah-langkah yang diuraikan di bagian berikut.

Update ke AGP versi 8.3 atau yang lebih baru

Perangkat berukuran 16 KB memerlukan aplikasi yang dikirimkan dengan library bersama yang tidak dikompresi untuk menyelaraskannya pada batas yang diselaraskan dengan zip 16 KB. Untuk melakukannya, Anda harus mengupgrade ke Plugin Android Gradle (AGP) versi 8.3 atau yang lebih tinggi. Lihat bagian Upgrade Assistant plugin Android Gradle untuk detail tentang proses upgrade.

Sebaiknya gunakan library bersama yang tidak dikompresi. Namun, jika Anda tidak dapat mengupgrade AGP ke versi 8.3 atau yang lebih tinggi, alternatifnya adalah beralih ke library bersama yang dikompresi. Update konfigurasi Gradle Anda agar Gradle mengompresi library bersama Anda saat memaketkan aplikasi untuk menghindari masalah penginstalan aplikasi dengan 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 mengharuskan segmen ELF library bersama diselaraskan dengan benar menggunakan penyelarasan ELF 16 KB agar aplikasi dapat berjalan. 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 r26 dan yang lebih lama

Untuk mendukung kompilasi library bersama yang selaras dengan 16 KB dengan Android NDK versi r26 atau yang lebih lama, Anda perlu mengupdate konfigurasi ndk-build atau cmake seperti berikut:

ndk-build

Update Android.mk untuk mengaktifkan penyelarasan ELF 16 KB:

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

CMake

Update 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 baru

ndk-build

Di Application.mk:

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 tanda penaut berikut:

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

Memeriksa instance kode yang merujuk ke ukuran halaman tertentu

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

  1. Hapus semua 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() atau sysconf(_SC_PAGESIZE).

  2. Cari penggunaan mmap() dan API lain yang memerlukan argumen yang diselaraskan dengan halaman dan ganti dengan alternatif jika diperlukan.

Menguji aplikasi Anda di lingkungan berukuran 16 KB

Setelah mem-build aplikasi yang mendukung perangkat 16 KB, Anda sebaiknya menguji aplikasi di lingkungan berukuran 16 KB untuk melihat apakah aplikasi mengalami regresi atau tidak. Untuk melakukannya, gunakan salah satu lingkungan pengujian berikut: