Sistem File Inkremental

Modul kernel Incremental File System (IncFS) yang diperkenalkan di Android 11 memungkinkan Android OS menerima APK yang di-streaming melalui Android Debug Bridge (ADB).

Modul kernel mandiri ini membuat sistem file virtual baru yang berada di atas sistem file Android yang ada. Hal ini melengkapi perubahan pada framework dan SDK untuk memungkinkan developer aplikasi dan game men-deploy APK besar melalui ADB ke perangkat yang berjalan di Android 11 atau yang lebih tinggi.

Perubahan kernel memungkinkan format APK Signature Scheme v4 baru dan mendukung perubahan framework Android di Pengelola Paket Android, layanan sistem baru, dan perubahan pada ADB.

Implementasi

Untuk menerapkan IncFS, OEM dan produsen SoC harus menambahkan driver kernel baru ke build perangkat Android mereka.

Khusus untuk Android 11, jika driver kernel dibuat sebagai modul, driver akan dimuat sesuai permintaan. Jika tidak ada aplikasi yang diinstal melalui penginstalan inkremental ADB, perangkat tidak akan memuat driver kernel.

Jika tidak, saat dibangun sebagai bagian dari image kernel, driver akan selalu dimuat. Implementasi ini valid untuk Android 12 dan yang lebih tinggi, serta dapat digunakan dengan Android 11. Untuk mengetahui informasi tentang mengupgrade driver kernel ke Android 12, lihat Upgrade driver kernel.

Driver kernel adalah bagian dari sistem yang lebih besar untuk mengaktifkan penginstalan APK yang di-streaming. OEM dan vendor tidak perlu menggunakan kode IncFS persis seperti yang diberikan dalam implementasi contoh. Namun, untuk memastikan pengalaman yang konsisten di seluruh perangkat, Anda harus memastikan penerapan API memiliki sistem file yang memiliki fungsi baca file dan fungsi baca-tulis direktori seperti yang ditentukan dalam dokumentasi Antarmuka ruang pengguna untuk FS Inkremental.

Selain itu, penerapan harus memiliki opsi pemasangan dan file khusus yang secara fungsional cocok dengan penerapan contoh IncFS.

Berikut adalah daftar perubahan yang diperlukan untuk penerapan:

  1. Siapkan mesin pengembangan untuk membangun kernel.
  2. Targetkan kernel umum dari cabang common-android-mainline.
    repo init -u https://android.googlesource.com/kernel/manifest -b common-android-mainline
    repo sync
  3. Validasi bahwa perubahan berikut yang diperlukan untuk IncFS ada di checkout cabang:
  4. Tambahkan CONFIG_INCREMENTAL_FS=y atau untuk Android 11 saja, CONFIG_INCREMENTAL_FS=m di bagian bawah file defconfig. Untuk melihat contohnya, klik salah satu link di bawah:
  5. Buat kernel
  6. Sematkan kernel ke build image perangkat Android.
  7. Untuk perangkat Android target Anda, tambahkan salah satu baris properti sistem khusus vendor berikut ke file device.mk Anda (opsional di perangkat yang diluncurkan dengan Android 12 dan yang lebih tinggi):
  8. Saat menggunakan CONFIG_INCREMENTAL_FS=y, tambahkan file dengan salah satu hal berikut:

    • PRODUCT_PROPERTY_OVERRIDES += \
    • ro.incremental.enable=yes

    Saat Anda menggunakan CONFIG_INCREMENTAL_FS=m (khusus untuk Android 11), tambahkan salah satu dari berikut ke file:

    • PRODUCT_PROPERTY_OVERRIDES += \
    • ro.incremental.enable=module:/vendor/lib/modules/incrementalfs.ko
  9. Lihat file device.mk contoh untuk emulator Android dan Pixel 4.
  10. Khusus untuk Android 11: Jika Anda menggunakan CONFIG_INCREMENTAL_FS=m, tambahkan Aturan SE Linux.
  11. Buat dan tambahkan file vold.te ke folder /system/sepolicy/vendor di perangkat Anda dengan konten berikut:

    • vold.te

    Izinkan untuk memuat driver sistem file inkremental:

    • allow vold self:capability sys_module;
    • allow vold vendor_incremental_module:file r_file_perms;
    • allow vold vendor_incremental_module:system module_load;

    Tambahkan aturan SE Linux berikut ke file file.te yang ada yang ada di folder /system/sepolicy/vendor Anda:

    • file.te file - Untuk melihat contoh, lihat file file.te ini.)
    • Driver sistem file inkremental
    • type vendor_incremental_module, vendor_file_type, file_type;

    Tambahkan aturan SE Linux berikut ke file file_contents yang ada di folder /system/sepolicy/vendor Anda:

    • File file_contents - Untuk contoh, lihat file file_contents ini.
    • # Incremental file system driver
    • /vendor/lib/modules/incrementalfs\.ko
    • u:object_r:vendor_incremental_module:s0

Upgrade driver kernel

Perangkat yang diupgrade ke Android 12 mungkin menyertakan driver IncFS versi lama. Untuk perangkat tersebut, AOSP merekomendasikan agar Anda mengupdate driver IncFS ke versi saat ini (dalam hal ini v2) karena alasan berikut:

  • Versi yang dirilis dengan Android 11 adalah penerapan awal IncFS, yang ditargetkan hanya untuk dukungan penginstalan ADB.
  • Android 12 menggunakan driver IncFS untuk penginstalan streaming game Play, yang memerlukan fitur dan pengoptimalan baru IncFS v2 untuk pengalaman pengguna yang lebih baik.
  • V1 mendukung streaming game, tetapi dengan penalti performa dan penggunaan baterai, CPU, dan RAM yang lebih tinggi daripada v2.
  • V2 memberikan UX yang lebih baik untuk streaming, dengan animasi progres yang lancar, pelaporan penggunaan ruang disk yang akurat, dan pencegahan gangguan streaming aplikasi pihak ketiga.

Untuk mengupgrade driver IncFS di kernel Anda, terapkan patch berikut untuk kernel 4.14 atau kernel 4.19:

Untuk semua versi kernel kustom lainnya, lakukan porting salah satu patchset. Perubahan ini hanya memengaruhi direktori fs/incfs dan diterapkan dengan bersih ke kode v1 yang ada.

Terus gunakan driver IncFS dengan cara yang sama seperti untuk Android 11 yang asli, tetapi kini telah diupgrade, baik sebagai bagian bawaan dari image kernel, atau sebagai modul terpisah. Jangan mengubah konfigurasi papan sistem atau properti sistem.

Perangkat baru yang menggunakan image kernel GKI akan mendapatkan driver IncFS terbaru (v2) secara otomatis, yang dikonfigurasi sebagai bagian dari image kernel. Hal ini tidak memerlukan langkah tambahan.

Konfigurasi modul yang dapat dimuat tidak digunakan lagi di Android 12, dan tidak didukung untuk perangkat baru. Hal ini hanya diizinkan untuk upgrade, atau untuk pembekuan image vendor saat kernel asli sudah memilikinya sebagai modul.

Implementasi referensi

Implementasi ini dapat dianggap sebagai bagian dari image kernel, atau (khusus Android 11) sebagai modul yang dapat dimuat.

Modul yang dapat dimuat (perangkat Pixel 4) Android Emulator (sebagai bagian dari image kernel)

Validasi dan pengujian

Validasi penerapan menggunakan Pengujian Unit Fitur, CTS, dan GTS.

CTS

Gunakan CtsIncrementalInstallHostTestCases.

GTS

atest GtsIncrementalInstallTestCases:

/gts-tests/tests/packageinstaller/incremental/src/com/google/android/packageinstaller/incremental/gts/IncrementalInstallerTest.java

Menguji IncFS

  1. Siapkan lingkungan pengembangan.
  2. Selesaikan tugas penerapan yang diuraikan di bagian penerapan.
  3. Jalankan pengujian manual berikut:
    mmma system/incremental_delivery/incfs/tests
    atest libincfs-test
    atest IncrementalServiceTest
    atest PackageManagerShellCommandTest
    PackageManagerShellCommandIncrementalTest

Menguji IncFS dengan Android SDK (ADB dan apksigner)

  • Siapkan lingkungan pengembangan.
  • Selesaikan tugas penerapan yang diuraikan di bagian penerapan.
  • Flash build di perangkat fisik atau emulator target.
  • Buat atau dapatkan APK yang sudah ada.
  • Buat kunci penandatanganan debug.
  • Tandatangani APK dengan format tanda tangan v4 dari folderbuild-tools.
    ./apksigner sign --ks debug.keystore game.apk
  • Instal APK di perangkat dari folder platform-tools.
    ./adb install game.apk
Contoh penginstalan
Gambar 1: Contoh penginstalan

Temukan pengujian ini