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:
- Siapkan mesin pengembangan untuk membangun kernel.
- Targetkan kernel umum dari cabang
common-android-mainline
.repo init -u https://android.googlesource.com/kernel/manifest -b common-android-mainline
repo sync
- Validasi bahwa perubahan berikut ini 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=y
atau hanya untuk Android 11 ,CONFIG_INCREMENTAL_FS=m
di bagian bawah filedefconfig
. Untuk melihat contohnya, klik salah satu tautan di bawah ini: - Bangun kernel
- Sematkan kernel ke dalam build image perangkat Android .
- 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 ): -
PRODUCT_PROPERTY_OVERRIDES += \
-
ro.incremental.enable=yes
-
PRODUCT_PROPERTY_OVERRIDES += \
-
ro.incremental.enable=module:/vendor/lib/modules/incrementalfs.ko
- Lihat contoh file
device.mk
untuk emulator Android dan Pixel 4 . - Hanya untuk Android 11 : Jika Anda menggunakan
CONFIG_INCREMENTAL_FS=m
, tambahkan SE Linux Rules . -
vold.te
-
allow vold self:capability sys_module;
-
allow vold vendor_incremental_module:file r_file_perms;
-
allow vold vendor_incremental_module:system module_load;
-
file.te
file - Untuk contoh lihat filefile.te
ini.) - Driver sistem file tambahan
-
type vendor_incremental_module, vendor_file_type, file_type;
-
file_contents
file - Sebagai contoh, lihat filefile_contents
ini. -
# Incremental file system driver
-
/vendor/lib/modules/incrementalfs\.ko
-
u:object_r:vendor_incremental_module:s0
Saat Anda menggunakan CONFIG_INCREMENTAL_FS=y
, tambahkan file dengan salah satu dari ini:
Saat Anda menggunakan CONFIG_INCREMENTAL_FS=m
( hanya untuk Android 11 ), tambahkan file dengan salah satu dari ini:
Buat dan tambahkan file vold.te
ke folder /system/sepolicy/vendor
perangkat Anda dengan konten berikut:
Izinkan untuk memuat driver sistem file tambahan:
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:
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:
- Kernel 4.14 patch
- Kernel 4.19 tambalan
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.
- Perbaikan kernel 4.14 ke driver v1
- Kernel 4.19 diperbaiki ke v1 drivr
- Perbaikan kernel 5.4 ke driver v1
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)- Tambahkan Modul Kernel Prebuilts
- Tambahkan dan Aktifkan Perubahan Properti Sistem Modul Kernel di Perangkat
- Perbarui Aturan Linux SE
Validasi dan pengujian
Validasi implementasi menggunakan Feature Unit Tests, CTS dan GTS.
CTS
GunakanCtsIncrementalInstallHostTestCases
.GTS
atest GtsIncrementalInstallTestCases
:
/gts-tests/tests/packageinstaller/incremental/src/com/google/android/packageinstaller/incremental/gts/IncrementalInstallerTest.java
Uji IncFS
- Siapkan lingkungan pengembangan.
- Selesaikan tugas implementasi yang diuraikan di bagian implementasi.
- 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](https://source.android.google.cn/static/devices/architecture/images/incfs-incremental-install.png?authuser=3&hl=id)
Temukan tes 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