ระบบไฟล์ที่เพิ่มขึ้น

โมดูลเคอร์เนลระบบไฟล์ส่วนเพิ่ม (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

รายการต่อไปนี้แสดงการเปลี่ยนแปลงที่จำเป็นสำหรับการนำไปใช้:

  1. ตั้งค่า เครื่องพัฒนาเพื่อสร้างเคอร์เนล
  2. กำหนดเป้าหมายเคอร์เนลทั่วไปจากสาขา common-android-mainline
    repo init -u https://android.googlesource.com/kernel/manifest -b common-android-mainline
    repo sync
  3. ตรวจสอบว่าการเปลี่ยนแปลงที่จำเป็นสำหรับ IncFS ต่อไปนี้อยู่ในการชำระเงินของสาขา:
  4. ผนวก CONFIG_INCREMENTAL_FS=y หรือสำหรับ Android 11 เท่านั้น CONFIG_INCREMENTAL_FS=m ที่ด้านล่างของไฟล์ defconfig หากต้องการดูตัวอย่าง ให้คลิกลิงก์ใดลิงก์หนึ่งด้านล่าง:
  5. สร้างเคอร์เนล
  6. ฝังเคอร์เนลลงในบิล ด์อิมเมจอุปกรณ์ Android
  7. สำหรับอุปกรณ์ Android เป้าหมายของคุณ ให้ผนวกบรรทัดคุณสมบัติระบบเฉพาะของผู้จำหน่ายต่อไปนี้ต่อท้ายไฟล์ device.mk ของคุณ ( เป็นทางเลือกใน Android 12 ขึ้น ไป):
  8. เมื่อคุณใช้ CONFIG_INCREMENTAL_FS=y ให้ผนวกไฟล์ด้วยสิ่งใดสิ่งหนึ่งต่อไปนี้:

    • PRODUCT_PROPERTY_OVERRIDES += \
    • ro.incremental.enable=yes

    เมื่อคุณใช้ CONFIG_INCREMENTAL_FS=m (สำหรับ Android 11 เท่านั้น ) ให้ต่อท้ายไฟล์ด้วยสิ่งใดสิ่งหนึ่งต่อไปนี้:

    • PRODUCT_PROPERTY_OVERRIDES += \
    • ro.incremental.enable=module:/vendor/lib/modules/incrementalfs.ko
  9. ดูตัวอย่างไฟล์ device.mk สำหรับโปรแกรมจำลอง Android และ Pixel 4
  10. สำหรับ Android 11 เท่านั้น : หากคุณใช้ CONFIG_INCREMENTAL_FS=m ให้เพิ่ม SE Linux Rules
  11. สร้างและเพิ่มไฟล์ vold.te ไปยังโฟลเดอร์ /system/sepolicy/vendor ของอุปกรณ์ของคุณด้วยเนื้อหาต่อไปนี้:

    • 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;

    ผนวกกฎ SE Linux ต่อไปนี้ต่อท้ายไฟล์ file.te ที่มีอยู่ซึ่งพบในโฟลเดอร์ /system/sepolicy/vendor ของคุณ:

    • file.te file - สำหรับตัวอย่าง โปรดดู file.te file .)
    • ไดรเวอร์ระบบไฟล์ที่เพิ่มขึ้น
    • type vendor_incremental_module, vendor_file_type, file_type;

    ผนวกกฎ SE Linux ต่อไปนี้ต่อท้ายไฟล์ file_contents ที่พบในโฟลเดอร์ /system/sepolicy/vendor ของคุณ:

    • file_contents ไฟล์ - ตัวอย่างเช่น โปรดดู ไฟล์ file_contents นี้
    • # Incremental file system driver
    • /vendor/lib/modules/incrementalfs\.ko
    • u:object_r:vendor_incremental_module:s0

การอัพเกรดไดรเวอร์เคอร์เนล

อุปกรณ์ที่อัปเกรดเป็น Android 12 อาจมีไดรเวอร์ IncFS เวอร์ชันเก่า สำหรับอุปกรณ์เหล่านั้น AOSP แนะนำให้คุณอัปเดตไดรเวอร์ IncFS เป็นเวอร์ชันปัจจุบัน (ในกรณีนี้คือ v2) ด้วยเหตุผลเหล่านี้:

  • เวอร์ชันที่เผยแพร่พร้อมกับ Android 11 เป็นการใช้งานเริ่มต้นของ IncFS โดยมีเป้าหมายสำหรับการสนับสนุนการติดตั้ง ADB เท่านั้น
  • Android 12 ใช้ไดรเวอร์ IncFS สำหรับการสตรีมการติดตั้งเกม Play ซึ่งต้องใช้คุณลักษณะใหม่และการปรับให้เหมาะสมของ IncFS v2 เพื่อประสบการณ์การใช้งานที่ดียิ่งขึ้น
  • V1 รองรับการสตรีมเกม แต่ทำได้ด้วยบทลงโทษด้านประสิทธิภาพและการใช้แบตเตอรี่, CPU และ RAM ที่สูงกว่า v2.0
  • V2 ให้ UX ที่ปรับปรุงแล้วสำหรับการสตรีมด้วยภาพเคลื่อนไหวที่คืบหน้าอย่างราบรื่น การรายงานการใช้พื้นที่ดิสก์ที่แม่นยำ และการป้องกันการรบกวนการสตรีมแอปของบุคคลที่สาม

หากต้องการอัพเกรดไดรเวอร์ IncFS ในเคอร์เนลของคุณ ให้ใช้แพตช์ต่อไปนี้สำหรับเคอร์เนล 4.14 หรือเคอร์เนล 4.19:

สำหรับเวอร์ชันเคอร์เนลแบบกำหนดเองอื่นๆ ทั้งหมด โปรดพอร์ตหนึ่งในแพตช์เซ็ต มีผลเฉพาะกับไดเร็กทอรี fs/incfs และนำไปใช้กับโค้ด v1 ที่มีอยู่อย่างหมดจด

ใช้ไดรเวอร์ IncFS ต่อไปในลักษณะเดียวกับต้นฉบับ แต่ตอนนี้อัปเกรดเป็น Android 11 ไม่ว่าจะเป็นส่วนในตัวของเคอร์เนลอิมเมจหรือเป็นโมดูลแยกต่างหาก อย่าเปลี่ยนแผงระบบหรือการกำหนดค่าคุณสมบัติของระบบ

อุปกรณ์ใหม่ที่ใช้อิมเมจเคอร์เนล GKI จะได้รับไดรเวอร์ IncFS ล่าสุด (v2) โดยอัตโนมัติ โดยกำหนดค่าให้เป็นส่วนหนึ่งของเคอร์เนลอิมเมจ ไม่จำเป็นต้องมีขั้นตอนเพิ่มเติม

การกำหนดค่าโมดูลที่โหลดได้เลิกใช้งานแล้วใน Android 12 และไม่รองรับอุปกรณ์ใหม่ อนุญาตเฉพาะสำหรับการอัพเกรดหรือสำหรับการหยุดอิมเมจของผู้ขายเมื่อเคอร์เนลดั้งเดิมสร้างเป็นโมดูลแล้ว

การใช้งานอ้างอิง

การใช้งานนี้ถือได้ว่าเป็นส่วนหนึ่งของเคอร์เนลอิมเมจ หรือ ( สำหรับ Android 11 เท่านั้น ) เป็นโมดูลที่โหลดได้

โมดูลที่โหลดได้ (อุปกรณ์ Pixel 4) Android Emulator (เป็นส่วนหนึ่งของภาพเคอร์เนล)

การตรวจสอบและการทดสอบ

ตรวจสอบการใช้งานโดยใช้การทดสอบหน่วยคุณลักษณะ, CTS และ GTS

CTS

ใช้ CtsIncrementalInstallHostTestCases

GTS

atest GtsIncrementalInstallTestCases :

/gts-tests/tests/packageinstaller/incremental/src/com/google/android/packageinstaller/incremental/gts/IncrementalInstallerTest.java

ทดสอบ IncFS

  1. ตั้งค่า สภาพแวดล้อมการพัฒนา
  2. ดำเนินงานการนำไปใช้ให้เสร็จสิ้นตามที่ระบุไว้ในส่วนการนำไปใช้
  3. เรียกใช้การทดสอบด้วยตนเองต่อไปนี้:
    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
ตัวอย่างการติดตั้ง
รูปที่ 1 : ตัวอย่างการติดตั้ง

ค้นหาการทดสอบเหล่านี้