Mendukung ukuran halaman 16 KB

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 dari 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:

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

    Opsi menu Build Studio untuk meluncurkan APK
Penganalisis

  3. Pilih APK yang ingin Anda analisis.

  4. 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 folder lib, maka aplikasi Anda tidak menggunakan kode native.

    Tampilan APK Analyzer yang menunjukkan bahwa file objek bersama
sekarang

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 Android 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 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:

  1. Hapus semua dependensi hard code yang mereferensikan PAGE_SIZE atau instance dalam logika kode yang mengasumsikan bahwa halaman perangkat berukuran 4 KB (4096).

    Sebagai gantinya, gunakan getpagesize() atau sysconf(_SC_PAGESIZE).

  2. 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:

  1. Siapkan Android 15 SDK.

  2. Siapkan salah satu lingkungan pengujian berikut:

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

  4. 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
    
    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 /tmp/my_apk_out direktori:

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

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

    4. Jika library bersama arm64-v8a memiliki UNALIGNED, Anda harus perbarui paket untuk library tersebut, lalu kompilasi ulang app dan uji ulang dengan mengikuti langkah-langkah di bagian ini.

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

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

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

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

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

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

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

    Temukan image emulator 16 KB di Gambar Lainnya
Beranda