โมดูลเคอร์เนลระบบไฟล์แบบเพิ่ม (IncFS) ที่เปิดตัวใน Android 11 ช่วยระบบปฏิบัติการ Android ให้รับ APK ที่สตรีมผ่าน Android Debug Bridge (ADB) ได้
โมดูลเคอร์เนลแบบสแตนด์อโลนนี้จะสร้างระบบไฟล์เสมือนใหม่ซึ่งวางซ้อนบนระบบไฟล์ Android ที่มีอยู่ ซึ่งจะช่วยเสริมการเปลี่ยนแปลงในเฟรมเวิร์กและ SDK เพื่อให้นักพัฒนาแอปและเกมสามารถติดตั้ง APK ขนาดใหญ่ผ่าน ADB ไปยังอุปกรณ์ที่ใช้ Android 11 ขึ้นไปได้
การเปลี่ยนแปลงเคอร์เนลจะเปิดใช้รูปแบบ APK Signature Scheme v4 ใหม่ และรองรับการเปลี่ยนแปลงเฟรมเวิร์ก Android ในเครื่องมือจัดการแพ็กเกจ Android, บริการระบบใหม่ และการเปลี่ยนแปลง ADB
การใช้งาน
หากต้องการใช้ IncFS OEM และผู้ผลิต SoC จะต้องเพิ่มไดรเวอร์เคอร์เนลใหม่ลงในบิลด์อุปกรณ์ Android
สำหรับ Android 11 เท่านั้น หากสร้างไดรเวอร์เคอร์เนลเป็นโมดูล ระบบจะโหลดตามคําขอ หากไม่มีการติดตั้งแอปผ่านการติดตั้ง ADB แบบเพิ่มทีละรายการ อุปกรณ์จะไม่โหลดไดรเวอร์เคอร์เนล
มิฉะนั้น เมื่อสร้างเป็นส่วนหนึ่งของภาพเคอร์เนล ระบบจะโหลดไดรเวอร์เสมอ การติดตั้งใช้งานนี้ใช้ได้กับ Android 12 ขึ้นไป และสามารถใช้กับ Android 11 ได้ ดูข้อมูลเกี่ยวกับการอัปเกรดไดรเวอร์เคอร์เนลเป็น Android 12 ได้ที่การอัปเกรดไดรเวอร์เคอร์เนล
โปรแกรมควบคุมเคอร์เนลเป็นส่วนหนึ่งของระบบขนาดใหญ่ที่ช่วยให้สามารถติดตั้ง APK ที่สตรีมได้ OEM และผู้ขายไม่จำเป็นต้องใช้โค้ด IncFS ที่ระบุไว้อย่างตรงทั้งหมดในตัวอย่างการใช้งาน อย่างไรก็ตาม คุณต้องตรวจสอบว่าการใช้งาน API มีระบบไฟล์ที่มีฟังก์ชันการอ่านไฟล์และฟังก์ชันการอ่านและเขียนไดเรกทอรีตามที่ระบุไว้ในเอกสารประกอบอินเทอร์เฟซพื้นที่ผู้ใช้สําหรับ FS ที่เพิ่มขึ้น เพื่อให้ผู้ใช้ได้รับประสบการณ์การใช้งานที่สอดคล้องกันในทุกอุปกรณ์
นอกจากนี้ การติดตั้งใช้งานต้องมีตัวเลือกการต่อเชื่อมและไฟล์พิเศษที่ทำงานได้ตรงกับการติดตั้งใช้งานตัวอย่าง IncFS
รายการต่อไปนี้แสดงการเปลี่ยนแปลงที่จําเป็นสําหรับการใช้งาน
- ตั้งค่าเครื่องสำหรับพัฒนาซอฟต์แวร์เพื่อสร้างเคอร์เนล
- กําหนดเป้าหมายเคอร์เนลทั่วไปจากสาขา
common-android-mainline
repo init -u https://android.googlesource.com/kernel/manifest -b common-android-mainline
repo sync
- ตรวจสอบว่าการเปลี่ยนแปลงต่อไปนี้ซึ่งจำเป็นสำหรับ IncFS อยู่ในการชำระเงินของสาขา
- 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
- ต่อท้ายด้วย
CONFIG_INCREMENTAL_FS=y
หรือ (สำหรับ Android 11 เท่านั้น)CONFIG_INCREMENTAL_FS=m
ที่ด้านล่างของไฟล์defconfig
หากต้องการดูตัวอย่าง ให้คลิกลิงก์ใดลิงก์หนึ่งด้านล่าง - สร้างเคอร์เนล
- ฝังเคอร์เนลลงในบิลด์อิมเมจอุปกรณ์ Android
- สำหรับอุปกรณ์ Android เป้าหมาย ให้เพิ่มบรรทัดพร็อพเพอร์ตี้ระบบสำหรับผู้ให้บริการใดผู้ให้บริการหนึ่งต่อไปนี้ต่อท้ายไฟล์
device.mk
(ไม่บังคับในอุปกรณ์ที่เปิดตัวด้วย Android 12 ขึ้นไป) PRODUCT_PROPERTY_OVERRIDES += \
ro.incremental.enable=yes
PRODUCT_PROPERTY_OVERRIDES += \
ro.incremental.enable=module:/vendor/lib/modules/incrementalfs.ko
- ดูตัวอย่างไฟล์
device.mk
สำหรับโปรแกรมจำลอง Android และ Pixel 4 - สำหรับ Android 11 เท่านั้น: หากคุณใช้
CONFIG_INCREMENTAL_FS=m
ให้เพิ่มกฎ 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.te
- ดูตัวอย่างได้ที่ไฟล์file.te
นี้) - โปรแกรมควบคุมระบบไฟล์แบบเพิ่ม
type vendor_incremental_module, vendor_file_type, file_type;
-
ไฟล์
file_contents
- ดูตัวอย่างได้ที่ไฟล์file_contents
นี้ # Incremental file system driver
/vendor/lib/modules/incrementalfs\.ko
u:object_r:vendor_incremental_module:s0
เมื่อใช้ CONFIG_INCREMENTAL_FS=y
ให้เพิ่มข้อมูลต่อไปนี้ต่อท้ายไฟล์
เมื่อใช้ CONFIG_INCREMENTAL_FS=m
(สำหรับ Android 11 เท่านั้น) ให้เพิ่มรายการต่อไปนี้ต่อท้ายไฟล์
สร้างและเพิ่มไฟล์ vold.te
ลงในโฟลเดอร์ /system/sepolicy/vendor
ของอุปกรณ์ที่มีเนื้อหาต่อไปนี้
อนุญาตให้โหลดไดรเวอร์ระบบไฟล์แบบเพิ่มข้อมูล
เพิ่มกฎ SE Linux ต่อไปนี้ต่อท้ายไฟล์ file.te
ที่มีอยู่ซึ่งอยู่ในโฟลเดอร์ /system/sepolicy/vendor
ต่อท้ายกฎ SE Linux ต่อไปนี้ลงในไฟล์ file_contents
ที่มีอยู่ในโฟลเดอร์ /system/sepolicy/vendor
การอัปเกรดไดรเวอร์เคอร์เนล
อุปกรณ์ที่อัปเกรดเป็น Android 12 อาจใช้ไดรเวอร์ IncFS เวอร์ชันเก่า สำหรับอุปกรณ์ดังกล่าว AOSP ขอแนะนำให้คุณอัปเดตไดรเวอร์ IncFS เป็นเวอร์ชันปัจจุบัน (ในกรณีนี้คือ v2) ด้วยเหตุผลต่อไปนี้
- เวอร์ชันที่มาพร้อมกับ Android 11 เป็นการใช้งาน IncFS ครั้งแรก ซึ่งมีไว้เพื่อรองรับการติดตั้ง ADB เท่านั้น
- Android 12 ใช้ไดรเวอร์ IncFS สําหรับการติดตั้งเกมใน Play แบบสตรีม ซึ่งต้องใช้ฟีเจอร์และการเพิ่มประสิทธิภาพใหม่ของ IncFS v2 เพื่อให้ผู้ใช้ได้รับประสบการณ์การใช้งานที่ดีขึ้น
- V1 รองรับการสตรีมเกม แต่ประสิทธิภาพจะลดลงและแบตเตอรี่, CPU และ RAM จะใช้พลังงานมากกว่า V2
- V2 มอบ UX ที่ปรับปรุงแล้วสำหรับการสตรีม โดยมีภาพเคลื่อนไหวที่แสดงความคืบหน้าอย่างราบรื่น การรายงานการใช้งานพื้นที่ดิสก์ที่แม่นยำ และการป้องกันการรบกวนการสตรีมจากแอปของบุคคลที่สาม
หากต้องการอัปเกรดไดรเวอร์ IncFS ในเคอร์เนล ให้ใช้แพตช์ต่อไปนี้สำหรับเคอร์เนล 4.14 หรือเคอร์เนล 4.19
- แพตช์ Kernel 4.14
- แพตช์ Kernel 4.19
สำหรับเคอร์เนลที่กำหนดเองเวอร์ชันอื่นๆ ทั้งหมด โปรดพอร์ตชุดแพตช์ใดชุดหนึ่ง การเปลี่ยนแปลงเหล่านี้จะส่งผลต่อไดเรกทอรี fs/incfs
เท่านั้น และจะมีผลกับโค้ด v1 ที่มีอยู่อย่างราบรื่น
- การแก้ไขเคอร์เนล 4.14 สำหรับไดรเวอร์ v1
- การแก้ไขเคอร์เนล 4.19 ในไดรเวอร์ v1
- การแก้ไขเคอร์เนล 5.4 ในไดรเวอร์ v1
ใช้ไดรเวอร์ IncFS ต่อในลักษณะเดียวกับที่ใช้กับ Android 11 เวอร์ชันเดิม แต่ตอนนี้อัปเกรดแล้ว ไม่ว่าจะเป็นส่วนหนึ่งของอิมเมจเคอร์เนลในตัว หรือเป็นโมดูลแยกต่างหาก อย่าเปลี่ยนการกำหนดค่าแผงระบบหรือพร็อพเพอร์ตี้ของระบบ
อุปกรณ์ใหม่ที่ใช้อิมเมจเคอร์เนล GKI จะได้รับไดรเวอร์ IncFS (v2) เวอร์ชันล่าสุดโดยอัตโนมัติ ซึ่งได้รับการกำหนดค่าให้เป็นส่วนหนึ่งของอิมเมจเคอร์เนล โดยไม่จำเป็นต้องทำขั้นตอนเพิ่มเติม
การกำหนดค่าโมดูลที่โหลดได้ถูกเลิกใช้งานใน Android 12 และไม่รองรับในอุปกรณ์ใหม่ อนุญาตให้ใช้เฉพาะสำหรับการอัปเกรดหรือเมื่อมีการหยุดการอัปเดตรูปภาพจากผู้ให้บริการเมื่อเคอร์เนลเดิมมีการสร้างเป็นโมดูลอยู่แล้ว
การติดตั้งใช้งานอ้างอิง
การติดตั้งใช้งานนี้อาจเป็นส่วนหนึ่งของอิมเมจเคอร์เนล หรือ (สำหรับ Android 11 เท่านั้น) เป็นโมดูลที่โหลดได้
โมดูลที่โหลดได้ (อุปกรณ์ Pixel 4)- เพิ่มโมดูลเคอร์เนลที่สร้างไว้ล่วงหน้า
- เพิ่มและเปิดใช้การเปลี่ยนแปลงพร็อพเพอร์ตี้ระบบของโมดูลเคอร์เนลในอุปกรณ์
- อัปเดตกฎ SE Linux
การตรวจสอบและการทดสอบ
ตรวจสอบการติดตั้งใช้งานโดยใช้การทดสอบหน่วยฟีเจอร์, CTS และ GTS
CTS
ใช้
CtsIncrementalInstallHostTestCases
GTS
atest GtsIncrementalInstallTestCases
:
/gts-tests/tests/packageinstaller/incremental/src/com/google/android/packageinstaller/incremental/gts/IncrementalInstallerTest.java
ทดสอบ IncFS
- ตั้งค่าสภาพแวดล้อมการพัฒนา
- ทํางานติดตั้งใช้งานที่ระบุไว้ในส่วนการติดตั้งใช้งานให้เสร็จสมบูรณ์
- ทำการทดสอบด้วยตนเองต่อไปนี้
mmma system/incremental_delivery/incfs/tests
atest libincfs-test
atest IncrementalServiceTest
atest PackageManagerShellCommandTest
PackageManagerShellCommandIncrementalTest
ทดสอบ IncFS ด้วย Android SDK (ADB และ apksigner)
- ตั้งค่าสภาพแวดล้อมในการพัฒนาซอฟต์แวร์
- ทํางานติดตั้งใช้งานที่ระบุไว้ในส่วนการติดตั้งใช้งานให้เสร็จสมบูรณ์
- แฟลชบิลด์ในอุปกรณ์จริงหรือโปรแกรมจำลองเป้าหมาย
- สร้างหรือรับ APK ที่มีอยู่
- สร้างคีย์การลงชื่อแก้ไขข้อบกพร่อง
- รับรอง APK ด้วยรูปแบบลายเซ็น v4 จากโฟลเดอร์
build-tools
./apksigner sign --ks debug.keystore game.apk
- ติดตั้ง APK ในอุปกรณ์จากโฟลเดอร์
platform-tools
./adb install game.apk

ค้นหาการทดสอบเหล่านี้
- /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