โมดูลเคอร์เนลระบบไฟล์ส่วนเพิ่ม (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 โปรดดู การอัปเกรดไดรเวอร์ Kernel
ไดรเวอร์เคอร์เนลเป็นส่วนหนึ่งของระบบที่ใหญ่กว่าเพื่อเปิดใช้ APK ที่สตรีม ครั้ง OEM และผู้ให้บริการไม่จำเป็นต้องใช้โค้ด IncFS ตรงตามที่ให้มา ในการใช้งานตัวอย่าง แต่เพื่อให้คุณได้รับประสบการณ์ที่สอดคล้องกันระหว่าง คุณต้องตรวจสอบว่าการใช้งาน API มีระบบไฟล์ ที่มีฟังก์ชันการอ่านไฟล์และฟังก์ชันอ่าน-เขียนไดเรกทอรีเป็น ที่กำหนดไว้ในเอกสารอินเทอร์เฟซ Userspace สำหรับ FS ส่วน
นอกจากนี้ การติดตั้งใช้งานจะต้องมีตัวเลือกการติดตั้ง และไฟล์พิเศษ ที่มีฟังก์ชันการทำงานตรงกับการติดตั้งใช้งานตัวอย่าง IncFS
รายการต่อไปนี้แสดงการเปลี่ยนแปลงที่จำเป็นสำหรับการติดตั้งใช้งาน
- ตั้งค่าเครื่องสำหรับการพัฒนา เพื่อสร้างเคอร์เนล
- กำหนดเป้าหมายเคอร์เนลทั่วไปจาก Branch
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
ให้เพิ่มกฎ Linux ของ SE 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
ของคุณ:
การอัปเกรดไดรเวอร์ Kernel
อุปกรณ์ที่อัปเกรดเป็น Android 12 อาจมี IncFS เวอร์ชันเก่า คนขับ สำหรับอุปกรณ์ดังกล่าว AOSP ขอแนะนำให้คุณอัปเดตไดรเวอร์ IncFS เป็น เวอร์ชันปัจจุบัน (ในกรณีนี้คือ v2) ด้วยเหตุผลต่อไปนี้
- เวอร์ชันที่เปิดตัวพร้อมกับ Android 11 เป็นการใช้งานระยะแรก IncFS ที่กำหนดเป้าหมายเฉพาะการรองรับการติดตั้ง ADB
- Android 12 ใช้ไดรเวอร์ IncFS สำหรับการสตรีมการติดตั้ง Play Games ซึ่งต้องการฟีเจอร์ใหม่ๆ และการเพิ่มประสิทธิภาพของ IncFS v2 สำหรับผู้ใช้ที่ดียิ่งขึ้น ประสบการณ์การใช้งาน
- V1 รองรับสตรีมมิงเกม แต่รองรับการสตรีมเกม แต่มีการลงโทษด้านประสิทธิภาพและ การใช้งานแบตเตอรี่, CPU และ RAM สูงกว่าเวอร์ชัน 2
- V2 มี UX ที่ดีขึ้นสำหรับการสตรีม พร้อมภาพเคลื่อนไหวความคืบหน้าที่ราบรื่น การรายงานการใช้งานพื้นที่ดิสก์ที่แม่นยำ และการป้องกันการสตรีมแอปของบุคคลที่สาม การรบกวน
หากต้องการอัปเกรดไดรเวอร์ IncFS ในเคอร์เนลของคุณ ให้ใช้แพตช์ต่อไปนี้สำหรับ เคอร์เนล 4.14 หรือเคอร์เนล 4.19 ดังนี้
- แพตช์ Kernel 4.14
- แพตช์ Kernel 4.19
สำหรับเวอร์ชันเคอร์เนลที่กำหนดเองอื่นๆ ทั้งหมด โปรดพอร์ตชุดแพตช์หนึ่ง โฆษณาเหล่านี้
มีผลกับไดเรกทอรี fs/incfs
เท่านั้น และนำไปใช้กับ
โค้ด v1 ที่มีอยู่
- Kernel 4.14 แก้ไขเป็นไดรเวอร์ v1
- การแก้ไขเคอร์เนล 4.19 สำหรับไดรเวอร์ v1
- Kernel 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 ที่มีอยู่
- สร้างแก้ไขข้อบกพร่องของคีย์ Signing
- ลงนาม 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