Modul kernel Sistem File Inkremental (IncFS) yang diperkenalkan di Android 11 akan mengaktifkan Android OS untuk menerima APK yang di-streaming melalui Android Debug Bridge (ADB).
Modul {i>kernel<i} mandiri ini menciptakan sistem file virtual baru yang selain sistem file Android yang ada. Hal ini melengkapi perubahan dalam dan SDK untuk memungkinkan developer aplikasi dan game men-deploy APK berukuran besar melalui ADB ke perangkat yang berjalan di Android 11 atau yang lebih baru.
Perubahan {i>kernel<i} memungkinkan Format APK Signature Scheme v4 dan mendukung perubahan framework Android di Android Package Manager, layanan sistem baru, dan perubahan pada ADB.
Implementasi
Untuk mengimplementasikan IncFS, OEM dan produsen SoC harus menambahkan kernel baru {i>driver<i} ke build perangkat Android mereka.
Khusus Android 11, jika driver kernel dibuat sebagai modul yang dimuat secara on-demand. Jika tidak ada aplikasi yang diinstal melalui penginstalan inkremental ADB, perangkat tidak memuat {i>driver<i} {i>kernel<i}.
Sebaliknya, saat build sebagai bagian dari kernel {i>driver<i} itu selalu dimuat. Penerapan ini berlaku untuk Android 12 dan yang lebih baru, serta dapat digunakan dengan Android 11. Sebagai informasi tentang cara mengupgrade driver kernel ke Android 12, lihat Upgrade driver kernel.
Driver kernel adalah bagian dari sistem yang lebih besar untuk mengaktifkan APK yang di-streaming penginstalan. OEM dan vendor tidak perlu menggunakan kode IncFS yang disediakan secara persis dalam contoh implementasi. Namun, untuk memastikan pengalaman yang konsisten di perangkat, Anda harus memastikan implementasi API memiliki sistem file yang memiliki fungsi baca file dan fungsi baca-tulis direktori sebagai yang ditentukan dalam dokumentasi Antarmuka Userspace untuk FS Inkremental.
Selain itu, implementasi harus memiliki opsi pemasangan dan file khusus yang secara fungsional sesuai dengan implementasi sampel IncFS.
Berikut daftar perubahan yang diperlukan untuk penerapan:
- Menyiapkan mesin pengembangan untuk membangun {i>kernel<i}.
- 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 yang diperlukan untuk IncFS berada di dalam 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:+ inkremental+fs:%2522+branch:android-mainline+status:merg
- Tambahkan
CONFIG_INCREMENTAL_FS=y
atau untuk khusus Android 11,CONFIG_INCREMENTAL_FS=m
di bagian bawah filedefconfig
. Untuk melihat contohnya, klik salah satu link di bawah ini: - Membangun kernel
- Sematkan kernel ke dalam build image perangkat Android.
- Untuk perangkat Android target, tambahkan salah satu opsi khusus vendor berikut
baris properti sistem ke file
device.mk
Anda (opsional di perangkat yang diluncurkan dengan Android 12 dan yang lebih baru): 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 Android Emulator dan Pixel 4. - Khusus Android 11: Jika Anda menggunakan
CONFIG_INCREMENTAL_FS=m
, tambahkan Aturan SE Linux. 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
file.te
- Untuk contoh, lihat filefile.te
ini.) - Driver sistem file inkremental
type vendor_incremental_module, vendor_file_type, file_type;
-
File
file_contents
- Untuk contoh, lihat filefile_contents
. # 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 hal berikut:
Saat Anda menggunakan CONFIG_INCREMENTAL_FS=m
(khusus Android 11),
menambahkan file dengan salah satu hal berikut:
Membuat dan menambahkan file vold.te
ke perangkat
/system/sepolicy/vendor
dengan konten berikut:
Izinkan file tersebut memuat driver sistem file inkremental:
Tambahkan aturan Linux SE berikut ke file file.te
yang ada
ditemukan di folder /system/sepolicy/vendor
Anda:
Tambahkan aturan Linux SE berikut ke file_contents
yang ada
ditemukan dalam folder /system/sepolicy/vendor
Anda:
Upgrade driver kernel
Perangkat yang diupgrade ke Android 12 mungkin menyertakan IncFS versi lama {i>driver<i}. 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 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 memudahkan pengalaman yang lancar bagi developer.
- V1 mendukung streaming game, tetapi melakukannya dengan penalti performa dan penggunaan baterai, CPU, dan RAM yang lebih tinggi dibandingkan v2.
- V2 memberikan UX yang lebih baik untuk streaming, dengan animasi progres yang mulus, pelaporan penggunaan ruang disk yang tepat, dan pencegahan streaming aplikasi pihak ketiga interferensi.
Untuk meningkatkan versi {i>driver<i} IncFS di {i>kernel<i} Anda, terapkan {i>patch<i} berikut untuk baik {i>kernel<i} 4.14 atau {i>kernel<i} 4.19:
- Patch Kernel 4.14
- Patch Kernel 4.19
Untuk semua versi kernel kustom lainnya, port salah satu patchset. Mereka
hanya memengaruhi direktori fs/incfs
dan menerapkan dengan bersih ke
kode v1 yang sudah ada.
- Driver perbaikan kernel 4.14 ke v1
- Perbaikan kernel 4.19 ke driVR v1
- Driver kernel perbaikan ke v1 5.4
Terus menggunakan driver IncFS dengan cara yang sama seperti yang asli, tetapi sekarang mengupgrade Android 11, baik sebagai bagian bawaan dari image kernel, atau sebagai modul terpisah. Jangan ubah board sistem atau properti sistem konfigurasi Anda.
Perangkat baru yang menggunakan image kernel GKI mendapatkan driver IncFS terbaru (v2) secara otomatis, dikonfigurasi sebagai bagian dari {i>kernel image<i}. Tidak memerlukan langkah-langkah tambahan.
Konfigurasi modul yang dapat dimuat tidak digunakan lagi di Android 12, dan tidak didukung untuk perangkat baru. Hanya diizinkan untuk upgrade, atau untuk vendor {i>image <i}beku ketika {i>kernel<i} asli telah membuatnya sebagai modul.
Penerapan referensi
Implementasi ini dapat dianggap sebagai bagian dari image {i>kernel<i}, atau (untuk Khusus Android 11) sebagai modul yang dapat dimuat.
Modul yang dapat dimuat (perangkat Pixel 4)- Menambahkan Bawaan Modul Kernel
- Menambahkan dan Mengaktifkan Perubahan Properti Sistem Modul Kernel di Perangkat
- Memperbarui Aturan Linux SE
Validasi dan pengujian
Validasi implementasi 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.java
Menguji IncFS
- Menyiapkan lingkungan pengembangan.
- Selesaikan tugas-tugas penerapan yang diuraikan di bagian penerapan.
- Jalankan 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)
- Siapkan lingkungan pengembangan.
- Selesaikan tugas-tugas penerapan yang diuraikan di bagian penerapan.
- Lakukan flash build pada emulator atau perangkat fisik target.
- Buat atau dapatkan APK yang sudah 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
platform-tools
folder tersebut../adb install game.apk
Menemukan pengujian ini
- /android/kernel/common/tools/testing/selftests/filesystems/incfs/
- /android/system/inkremental_delivery/incfs/tests/incfs_test.cpp
- /android/cts/tests/tests/content/src/android/content/pm/cts/PackageManagerShellCommandIncrementalTest.java