Sistem File Tambahan

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

Modul kernel mandiri ini membuat sistem file virtual baru yang berada di atas sistem file Android yang ada. Ini melengkapi perubahan dalam kerangka kerja dan SDK untuk memungkinkan pengembang aplikasi dan game menerapkan APK besar melalui ADB ke perangkat yang menjalankan Android 11 atau lebih tinggi.

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

Penerapan

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

Hanya untuk Android 11 , jika driver kernel dibuat sebagai modul, driver tersebut akan dimuat sesuai permintaan. Jika tidak ada aplikasi yang diinstal melalui instalasi tambahan ADB, perangkat tidak memuat driver kernel.

Jika tidak, ketika dibangun sebagai bagian dari kernel image, driver selalu dimuat. Implementasi ini berlaku untuk Android 12 dan yang lebih tinggi, dan dapat digunakan dengan Android 11 . Untuk informasi tentang memutakhirkan driver kernel ke Android 12, lihat Peningkatan driver kernel .

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

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

Berikut ini daftar perubahan yang diperlukan untuk implementasi:

  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 ini yang diperlukan untuk IncFS ada di checkout cabang:
  4. Tambahkan CONFIG_INCREMENTAL_FS=y atau hanya untuk Android 11 , CONFIG_INCREMENTAL_FS=m di bagian bawah file defconfig . Untuk melihat contohnya, klik salah satu tautan di bawah ini:
  5. Bangun kernel
  6. Sematkan kernel ke dalam 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 Android 12 dan lebih tinggi ):
  8. Saat Anda menggunakan CONFIG_INCREMENTAL_FS=y , tambahkan file dengan salah satu dari ini:

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

    Saat Anda menggunakan CONFIG_INCREMENTAL_FS=m ( hanya untuk Android 11 ), tambahkan file dengan salah satu dari ini:

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

    • vold.te

    Izinkan untuk memuat driver sistem file tambahan:

    • 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 di folder /system/sepolicy/vendor Anda:

    • file.te file - Untuk contoh lihat file file.te ini.)
    • Driver sistem file tambahan
    • 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_contents file - Sebagai contoh, lihat file file_contents ini.
    • # Incremental file system driver
    • /vendor/lib/modules/incrementalfs\.ko
    • u:object_r:vendor_incremental_module:s0

Peningkatan driver kernel

Peningkatan perangkat ke Android 12 mungkin menyertakan versi driver IncFS yang lebih lama. Untuk perangkat tersebut, AOSP menyarankan agar Anda memperbarui pengandar IncFS ke versi saat ini (dalam hal ini v2) karena alasan berikut:

  • Versi yang dirilis dengan Android 11 adalah implementasi awal IncFS, yang ditargetkan hanya untuk dukungan penginstalan ADB.
  • Android 12 menggunakan driver IncFS untuk penginstalan streaming game Play, yang memerlukan fitur baru dan pengoptimalan IncFS v2 untuk pengalaman pengguna yang lebih baik.
  • V1 mendukung streaming game, tetapi melakukannya dengan penalti kinerja dan penggunaan baterai, CPU, dan RAM yang lebih tinggi daripada v2.
  • V2 menyediakan UX yang ditingkatkan untuk streaming, dengan animasi kemajuan yang mulus, pelaporan penggunaan ruang disk yang tepat, dan pencegahan gangguan streaming aplikasi pihak ketiga.

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

Untuk semua versi kernel kustom lainnya, harap port salah satu patchset. Mereka hanya mempengaruhi direktori fs/incfs dan berlaku bersih ke kode v1 yang ada.

Lanjutkan menggunakan driver IncFS dengan cara yang sama seperti versi asli tetapi sekarang ditingkatkan versi Android 11, baik sebagai bagian bawaan dari gambar kernel, atau sebagai modul terpisah. Jangan ubah board sistem atau konfigurasi properti sistem.

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

Konfigurasi modul yang dapat dimuat tidak digunakan lagi di Android 12, dan tidak didukung untuk perangkat baru. Itu hanya diperbolehkan untuk peningkatan, atau untuk pembekuan gambar vendor ketika kernel asli sudah membuatnya sebagai modul.

Implementasi referensi

Implementasi ini dapat dianggap sebagai bagian dari gambar kernel, atau ( hanya untuk Android 11 ) sebagai modul yang dapat dimuat.

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

Validasi dan pengujian

Validasi implementasi menggunakan Feature Unit Tests, CTS dan GTS.

CTS

Gunakan CtsIncrementalInstallHostTestCases .

GTS

atest GtsIncrementalInstallTestCases :

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

Uji IncFS

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

Cara menguji IncFS dengan Android SDK (ADB dan apksigner)

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

Temukan tes ini