โมดูลเคอร์เนล Increational File System (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:+Increational+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 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.te
นี้ ) - ไดรเวอร์ระบบไฟล์ส่วนเพิ่ม
-
type vendor_incremental_module, vendor_file_type, file_type;
-
file_contents
file - ตัวอย่างเช่น โปรดดู ไฟล์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 ที่มีอยู่อย่างสมบูรณ์
ใช้ไดรเวอร์ IncFS ต่อไปในลักษณะเดียวกับ Android 11 ดั้งเดิม แต่ตอนนี้อัปเกรดแล้ว ไม่ว่าจะเป็นส่วนในตัวของเคอร์เนลอิมเมจหรือเป็นโมดูลแยกต่างหาก อย่าเปลี่ยนบอร์ดระบบหรือการกำหนดค่าคุณสมบัติของระบบ
อุปกรณ์ใหม่ที่ใช้อิมเมจเคอร์เนล GKI จะได้รับไดรเวอร์ IncFS ล่าสุด (v2) โดยอัตโนมัติ โดยกำหนดค่าให้เป็นส่วนหนึ่งของอิมเมจเคอร์เนล การดำเนินการนี้ไม่ต้องการขั้นตอนเพิ่มเติม
การกำหนดค่าโมดูลที่โหลดได้เลิกใช้งานแล้วใน Android 12 และไม่รองรับอุปกรณ์ใหม่ อนุญาตเฉพาะสำหรับการอัพเกรดหรือสำหรับการหยุดอิมเมจของผู้ขายเมื่อเคอร์เนลดั้งเดิมได้สร้างมันขึ้นมาเป็นโมดูลแล้ว
การใช้งานอ้างอิง
การใช้งานนี้ถือได้ว่าเป็นส่วนหนึ่งของเคอร์เนลอิมเมจหรือ ( สำหรับ Android 11 เท่านั้น ) เป็นโมดูลที่โหลดได้
โมดูลที่โหลดได้ (อุปกรณ์ Pixel 4)- เพิ่มโมดูลเคอร์เนลที่สร้างไว้ล่วงหน้า
- เพิ่มและเปิดใช้งานการเปลี่ยนแปลงคุณสมบัติระบบโมดูลเคอร์เนลบนอุปกรณ์
- อัปเดตกฎ SE Linux
การตรวจสอบและการทดสอบ
ตรวจสอบการใช้งานโดยใช้ Feature Unit Tests, CTS และ GTS
ซีทีเอส
ใช้CtsIncrementalInstallHostTestCases
จีทีเอส
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/increational_delivery/incfs/tests/incfs_test.cpp
- /android/cts/tests/tests/content/src/android/content/pm/cts/PackageManagerShellCommandIncreationalTest.java