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. Mulai Android 15, Android mendukung perangkat yang dikonfigurasi untuk menggunakan halaman berukuran 16 KB (perangkat 16 KB).

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. Menambahkan dukungan untuk perangkat berukuran 16 KB memungkinkan aplikasi Anda berjalan di perangkat ini dan membantu aplikasi mendapatkan manfaat dari peningkatan performa terkait. Untuk membantu Anda dalam hal ini, kami telah menyediakan panduan tentang cara memeriksa apakah aplikasi Anda terpengaruh, cara mem-build ulang aplikasi (jika berlaku), dan cara menguji aplikasi di lingkungan 16 KB menggunakan emulator dan perangkat fisik.

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 menggunakan Android NDK, 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.

Mengidentifikasi library native menggunakan APK Analyzer

APK Analyzer adalah alat yang memungkinkan Anda mengevaluasi berbagai aspek APK build. Untuk mengidentifikasi apakah aplikasi Anda menggunakan kode native atau library, ikuti langkah-langkah berikut:

  1. Buka Android Studio, lalu klik File > Open dan pilih project apa saja.
  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 akan menggunakan kode native.

    Tampilan APK Analyzer yang menunjukkan bahwa file objek
bersama ada

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 library bersama yang tidak dikompresi.

AGP versi 8.3 atau yang lebih baru

Perangkat 16 KB memerlukan aplikasi yang dikirimkan dengan library bersama tanpa kompresi untuk menyelaraskannya 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 bagian Asisten Upgrade plugin Android Gradle untuk 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 baru, alternatifnya adalah beralih untuk menggunakan library bersama terkompresi. Update konfigurasi Gradle 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 Anda dapat berjalan.

Untuk mengompilasi aplikasi 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 berukuran 16 KB dengan Android NDK versi r26 atau yang lebih rendah, Anda perlu mengupdate konfigurasi ndk-build atau cmake 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 berukuran 16 KB dengan Android NDK versi r27 dan yang lebih baru, 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

Memeriksa instance kode yang mereferensikan ukuran halaman tertentu

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

  1. Hapus semua dependensi hard code yang mereferensikan konstanta PAGE_SIZE atau instance 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.

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 rusak saat digunakan dalam mode 16 KB. Namun, jika nilai ini diteruskan ke kernel dengan mmap tanpa MAP_FIXED, kernel akan tetap menggunakan seluruh halaman, sehingga memboroskan sebagian memori. Karena alasan ini, PAGE_SIZE tidak ditentukan jika mode 16 KB diaktifkan pada NDK r27 dan yang lebih tinggi.

Jika aplikasi Anda menggunakan PAGE_SIZE dengan cara ini dan tidak pernah langsung meneruskan nilai ini ke kernel, daripada menggunakan PAGE_SIZE, buat variabel baru dengan nama baru untuk menunjukkan bahwa variabel tersebut digunakan untuk tujuan lain dan tidak mencerminkan halaman memori yang sebenarnya.

Menguji aplikasi di lingkungan berukuran 16 KB

Setelah membangun aplikasi dengan dukungan untuk perangkat berukuran 16 KB, Anda sebaiknya menguji aplikasi di lingkungan berukuran 16 KB untuk melihat apakah aplikasi Anda mengalami regresi. Untuk melakukannya, ikuti langkah berikut:

  1. Siapkan Android 15 SDK.

  2. Siapkan salah satu lingkungan pengujian berikut:

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

    adb shell getconf PAGE_SIZE
    

    Perintah ini akan menampilkan nilai 16384.

  4. Untuk setiap library bersama, pastikan segmen ELF library bersama telah diselaraskan dengan benar menggunakan penyelarasan ELF 16 KB. Anda dapat menggunakan skrip ini untuk membantu 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
    
    1. Simpan skrip ke file, seperti alignment.sh.

    2. Ekstrak file APK aplikasi Anda:

      unzip APK_NAME.apk -d /tmp/my_apk_out
      
    3. Jalankan skrip pada file yang diekstrak di direktori /tmp/my_apk_out:

      alignment.sh /tmp/my_apk_out | grep "arm64-v8a"
      

      Skrip ini menghasilkan ALIGNED atau UNALIGNED untuk semua library bersama arm64-v8a.

    4. Jika salah satu library bersama arm64-v8a bernilai UNALIGNED, Anda harus mengupdate paket untuk library tersebut, lalu mengompilasi ulang aplikasi dan menguji ulang dengan mengikuti langkah-langkah di bagian ini.

  5. 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 35 APK_NAME.apk
    
  6. 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:

  1. Image sistem emulator Android 15 berbasis 16 KB kompatibel dengan Android Studio Jellyfish | 2023.3.1 atau yang lebih tinggi. Namun, untuk mendapatkan pengalaman terbaik saat menggunakan Android 15 Beta, download versi pratinjau terbaru Android Studio.

    Perlu diingat bahwa Anda dapat mempertahankan versi Android Studio yang telah diinstal karena Anda dapat menginstal beberapa versi secara berdampingan.

  2. Di Android Studio, klik Tools > SDK Manager.

  3. 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 Eksperimental Google API 16k
    • Image Sistem Atom Intel x86_64 Eksperimental Ukuran Halaman 16k Google API

    Mendownload image sistem emulator 16 KB menggunakan SDK Manager di Android
Studio

  4. Klik Apply > OK untuk mendownload image sistem mana pun yang Anda pilih.

  5. 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.

    Cari image emulator 16 KB di tab Gambar
Lainnya