Sistem File Tambahan

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

Modul kernel mandiri ini menciptakan sistem file virtual baru yang berada di atas sistem file Android yang sudah ada. Hal ini melengkapi perubahan pada framework dan SDK yang memungkinkan developer aplikasi dan game men-deploy APK berukuran 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 Manajer Paket Android, layanan sistem baru, dan perubahan pada ADB.

Penerapan

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

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

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

Driver kernel adalah bagian dari sistem yang lebih besar untuk mengaktifkan instalasi 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 fungsi baca file dan fungsi baca-tulis direktori seperti yang ditentukan dalam antarmuka Userspace untuk dokumentasi FS Inkremental .

Selain itu, implementasi harus memiliki opsi mount 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 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 link di bawah ini:
  5. Bangun kernelnya
  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 pada perangkat yang diluncurkan dengan 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 - Sebagai 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

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

  • Versi yang dirilis dengan Android 11 merupakan implementasi awal IncFS, yang ditargetkan hanya untuk dukungan instalasi ADB.
  • Android 12 menggunakan driver IncFS untuk streaming instalasi Play game, 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 memberikan UX yang lebih baik 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 khusus lainnya, harap porting salah satu patchset. Mereka hanya mempengaruhi direktori fs/incfs dan diterapkan dengan bersih ke kode v1 yang ada.

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

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

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

Implementasi referensi

Implementasi ini dapat dianggap sebagai bagian dari image kernel, atau ( hanya untuk 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 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 target atau emulator.
  • Hasilkan 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 instalasi

Temukan tes ini