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 dalam framework dan SDK untuk memungkinkan developer aplikasi dan game men-deploy APK besar melalui ADB ke perangkat yang menjalankan Android 11 atau yang lebih baru.
Perubahan kernel memungkinkan format APK Signature Scheme v4 baru dan mendukung perubahan framework Android di Android Package Manager, layanan sistem baru, dan perubahan pada ADB.
Penerapan
Untuk menerapkan IncFS, OEM dan produsen SoC harus menambahkan driver kernel baru ke build 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 penginstalan inkremental ADB, perangkat tidak akan memuat driver kernel.
Jika tidak, saat dibuat sebagai bagian dari image kernel, driver akan selalu dimuat. Penerapan ini berlaku untuk Android 12 dan yang lebih baru, 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 yang sama persis yang disediakan dalam penerapan 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:
- Menyiapkan mesin pengembangan untuk membuat kernel.
- Menargetkan kernel umum dari cabang
common-android-mainline.repo init -u https://android.googlesource.com/kernel/manifest -b common-android-mainlinerepo sync - Memvalidasi bahwa perubahan berikut yang diperlukan untuk IncFS ada di checkout cabang:
- https://android-review.googlesource.com/c/kernel/common/+/1222869/
- https://android-review.googlesource.com/c/kernel/common/+/1222870
- https://android-review.googlesource.com/c/kernel/common/+/1222871
- https://android-review.googlesource.com/q/%2522ANDROID:+Incremental+fs:%2522+branch:android-mainline+status:merg
- Tambahkan
CONFIG_INCREMENTAL_FS=yatau hanya untuk Android 11,CONFIG_INCREMENTAL_FS=mdi bagian bawah filedefconfig. Untuk melihat contohnya, klik salah satu link di bawah: - Membuat kernel
- Menyematkan kernel ke dalam build image perangkat Android.
- Untuk perangkat Android target, tambahkan salah satu baris properti sistem khusus vendor
berikut ke file
device.mk(opsional di perangkat yang diluncurkan dengan Android 12 dan yang lebih baru): PRODUCT_PROPERTY_OVERRIDES += \ro.incremental.enable=yesPRODUCT_PROPERTY_OVERRIDES += \ro.incremental.enable=module:/vendor/lib/modules/incrementalfs.ko- Lihat contoh file
device.mkuntuk emulator Android dan Pixel 4. - Hanya untuk Android 11: Jika Anda menggunakan
CONFIG_INCREMENTAL_FS=m, tambahkan Aturan SE Linux. vold.teallow vold self:capability sys_module;allow vold vendor_incremental_module:file r_file_perms;allow vold vendor_incremental_module:system module_load;-
File
file.te- Untuk contohnya, lihat filefile.teini.) - Driver sistem file inkremental
type vendor_incremental_module, vendor_file_type, file_type;-
File
file_contents- Untuk contohnya, lihat filefile_contentsini. # Incremental file system driver/vendor/lib/modules/incrementalfs\.kou:object_r:vendor_incremental_module:s0
Jika Anda menggunakan CONFIG_INCREMENTAL_FS=y, tambahkan file dengan
salah satu opsi berikut:
Jika Anda menggunakan CONFIG_INCREMENTAL_FS=m ( _hanya untuk Android 11_),
tambahkan file dengan salah satu opsi berikut:
Buat dan tambahkan file vold.te ke folder
/system/sepolicy/vendor perangkat Anda dengan konten berikut:
Izinkan untuk memuat driver sistem file inkremental:
Tambahkan aturan SE Linux berikut ke file file.te yang ada di folder /system/sepolicy/vendor Anda:
Tambahkan aturan SE Linux berikut ke file file_contents
yang ada di folder /system/sepolicy/vendor Anda:
Upgrade driver kernel
Perangkat yang melakukan upgrade 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 hanya ditujukan untuk dukungan penginstalan ADB.
- Android 12 menggunakan driver IncFS untuk penginstalan game Play yang di-streaming, yang memerlukan fitur dan pengoptimalan baru IncFS v2 untuk pengalaman pengguna yang lebih baik.
- V1 mendukung streaming game, tetapi melakukannya 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 kapasitas disk yang akurat, dan pencegahan interferensi 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, port salah satu patchset. Patchset
hanya memengaruhi direktori fs/incfs dan diterapkan dengan bersih ke
kode v1 yang ada.
- Perbaikan kernel 4.14 ke driver v1
- Perbaikan kernel 4.19 ke driver v1
- Perbaikan kernel 5.4 ke driver v1
Terus gunakan driver IncFS dengan cara yang sama seperti untuk Android 11 asli yang kini 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 otomatis mendapatkan driver IncFS terbaru (v2) 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. Konfigurasi ini hanya diizinkan untuk upgrade, atau untuk pembekuan image vendor saat kernel asli sudah dibuat sebagai modul.
Penerapan referensi
Penerapan ini dapat dianggap sebagai bagian dari image kernel, atau (untuk Android 11 saja) sebagai modul yang dapat dimuat.
Modul yang dapat dimuat (perangkat Pixel 4)- Menambahkan Prebuilt Modul Kernel
- Menambahkan dan Mengaktifkan Perubahan Properti Sistem Modul Kernel di Perangkat
- Mengupdate Aturan SE Linux
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.javaMenguji IncFS
- Menyiapkan lingkungan pengembangan.
- Menyelesaikan tugas penerapan yang diuraikan di bagian penerapan.
- Menjalankan 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)
- Menyiapkan lingkungan pengembangan.
- Menyelesaikan tugas penerapan yang diuraikan di bagian penerapan.
- Mem-flash build di perangkat fisik atau emulator target.
- Membuat atau mendapatkan APK yang ada.
- Membuat kunci penandatanganan debug.
- Menandatangani APK dengan format tanda tangan v4 dari folder
build-tools../apksigner sign --ks debug.keystore game.apk
- Menginstal APK di perangkat dari folder
platform-tools../adb install game.apk
Menemukan pengujian ini
- /android/kernel/common/tools/testing/selftests/filesystems/incfs/
- /android/system/incremental_delivery/incfs/tests/incfs_test.cpp
- /android/cts/tests/tests/content/src/android/content/pm/cts/PackageManagerShellCommandIncrementalTest.java