Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

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 memungkinkan baru APK Signature Scheme Format v4 dan mendukung perubahan kerangka Android di Android Package Manager, layanan sistem baru, dan perubahan ke ADB.

Penerapan

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

Untuk Android 11 saja, jika driver kernel dibangun sebagai modul itu dimuat pada 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 lebih tinggi, dan dapat digunakan dengan Android 11. Untuk informasi tentang upgrade driver kernel untuk Android 12, lihat -upgrade 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 pelaksanaan API memiliki sistem file yang memiliki fungsi penyimpanan file membaca dan direktori baca-tulis fungsi sebagaimana didefinisikan dalam antarmuka Userspace untuk Incremental FS dokumentasi.

Selain itu, implementasi harus memiliki opsi untuk mount dan file khusus yang fungsional sesuai dengan IncFS contoh implementasi.

Berikut ini daftar perubahan yang diperlukan untuk implementasi:

  1. Mengatur mesin pengembangan untuk membangun kernel.
  2. Menargetkan kernel umum dari common-android-mainline cabang.
    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. Append baik CONFIG_INCREMENTAL_FS=y atau untuk Android 11 saja, CONFIG_INCREMENTAL_FS=m di bagian bawah defconfig berkas. Untuk melihat contohnya, klik salah satu tautan di bawah ini:
  5. Bangun kernel
  6. Menanamkan kernel ke Android perangkat image membangun .
  7. Untuk perangkat Android target Anda, append salah satu jalur sistem-properti khusus vendor berikut untuk Anda device.mk berkas (opsional di Android 12 dan lebih tinggi):
  8. Bila Anda menggunakan CONFIG_INCREMENTAL_FS=y , append file dengan salah satu dari ini:

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

    Bila Anda menggunakan CONFIG_INCREMENTAL_FS=m (untuk Android 11 saja), append file dengan salah satu dari ini:

    • PRODUCT_PROPERTY_OVERRIDES += \
    • ro.incremental.enable=module:/vendor/lib/modules/incrementalfs.ko
  9. Lihat contoh device.mk file untuk emulator Android dan Pixel 4 .
  10. Untuk Android 11 saja: Jika Anda menggunakan CONFIG_INCREMENTAL_FS=m , tambahkan SE Aturan Linux .
  11. Membuat dan menambahkan vold.te berkas ke perangkat Anda /system/sepolicy/vendor folder 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;

    Append mengikuti aturan SE Linux untuk yang ada file.te berkas ditemukan di Anda /system/sepolicy/vendor folder:

    • file.te File - Untuk contoh melihat ini file.te berkas ).
    • Driver sistem file tambahan
    • type vendor_incremental_module, vendor_file_type, file_type;

    Append mengikuti aturan SE Linux yang ada file_contents berkas ditemukan di Anda /system/sepolicy/vendor folder:

    • file_contents File - Untuk contoh, lihat ini file_contents berkas.
    • # 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 fs/incfs direktori dan menerapkan 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 baik sebagai bagian dari image kernel, atau (untuk Android 11 hanya) sebagai modul loadable.

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. Mengatur 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)

  • Mengatur 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 men-debug .
  • Menandatangani APK dengan format yang v4 tanda tangan dari build-tools folder.
    ./apksigner sign --ks debug.keystore game.apk
  • Instal APK di-perangkat dari platform-tools folder.
    ./adb install game.apk
Contoh pemasangan
Gambar 1: Instal contoh

Temukan tes ini