โมดูลเคอร์เนลของระบบไฟล์แบบเพิ่ม (IncFS) ที่เปิดตัวใน Android 11 ช่วยให้ระบบปฏิบัติการ Android รับ APK ที่สตรีมผ่าน Android Debug Bridge (ADB) ได้
โมดูลเคอร์เนลแบบสแตนด์อโลนนี้จะสร้างระบบไฟล์เสมือนใหม่ที่อยู่ บนระบบไฟล์ Android ที่มีอยู่ ซึ่งเป็นการเสริมการเปลี่ยนแปลงในเฟรมเวิร์กและ SDK เพื่อช่วยให้นักพัฒนาแอปและเกมสามารถติดตั้ง APK ขนาดใหญ่ผ่าน ADB ไปยังอุปกรณ์ที่ใช้ Android 11 ขึ้นไป
การเปลี่ยนแปลงเคอร์เนลทำให้เกิดรูปแบบ APK Signature Scheme v4 ใหม่ และรองรับการเปลี่ยนแปลงเฟรมเวิร์ก Android ใน Android Package Manager บริการระบบใหม่ และการเปลี่ยนแปลงใน ADB
การใช้งาน
หากต้องการติดตั้งใช้งาน IncFS ผู้ผลิต OEM และ SoC ต้องเพิ่มไดรเวอร์เคอร์เนลใหม่ ลงในบิลด์อุปกรณ์ Android
สำหรับ Android 11 เท่านั้น หากสร้างไดรเวอร์เคอร์เนล เป็นโมดูล ระบบจะโหลดไดรเวอร์ตามต้องการ หากไม่มีการติดตั้งแอปผ่านการติดตั้ง ADB แบบเพิ่มทีละรายการ อุปกรณ์จะไม่โหลดไดรเวอร์เคอร์เนล
ไม่เช่นนั้น เมื่อสร้างเป็นส่วนหนึ่งของอิมเมจ เคอร์เนล ระบบจะโหลดไดรเวอร์เสมอ การติดตั้งใช้งานนี้ใช้ได้กับ Android 12 ขึ้นไป และใช้กับ Android 11 ได้ ดูข้อมูลเกี่ยวกับการอัปเกรดไดรเวอร์เคอร์เนลเป็น Android 12 ได้ที่การอัปเกรดไดรเวอร์เคอร์เนล
ไดรเวอร์เคอร์เนลเป็นส่วนหนึ่งของระบบที่ใหญ่กว่าเพื่อเปิดใช้การติดตั้ง APK ที่สตรีม OEM และผู้ให้บริการไม่จำเป็นต้องใช้โค้ด IncFS ที่แน่นอนตามที่ระบุ ในการติดตั้งใช้งานตัวอย่าง อย่างไรก็ตาม เพื่อให้มั่นใจว่าผู้ใช้จะได้รับประสบการณ์การใช้งานที่สอดคล้องกันในอุปกรณ์ต่างๆ คุณต้องตรวจสอบว่าการติดตั้งใช้งาน API มีระบบไฟล์ที่มีฟังก์ชันการอ่านไฟล์และฟังก์ชันการอ่าน-เขียนไดเรกทอรีตามที่กำหนดไว้ในเอกสารประกอบอินเทอร์เฟซ Userspace สำหรับ 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 เป้าหมาย ให้ต่อท้ายบรรทัด system-property ที่เฉพาะเจาะจงของผู้ให้บริการรายใดรายหนึ่งต่อไปนี้ในไฟล์
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
- แพตช์เคอร์เนล 4.14
- แพตช์เคอร์เนล 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)- เพิ่ม Kernel Module Prebuilts
- เพิ่มและเปิดใช้การเปลี่ยนแปลงพร็อพเพอร์ตี้ของระบบโมดูลเคอร์เนลในอุปกรณ์
- อัปเดตกฎ 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