ระบบไฟล์ส่วนเพิ่ม

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

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

  1. ตั้งค่าเครื่องสำหรับการพัฒนา เพื่อสร้างเคอร์เนล
  2. กำหนดเป้าหมายเคอร์เนลทั่วไปจาก Branch 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 ให้เพิ่มกฎ Linux ของ SE
  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.te)
    • ไดรเวอร์ระบบไฟล์ส่วนเพิ่ม
    • 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

การอัปเกรดไดรเวอร์ 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 ดังนี้

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

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

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

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

อ้างอิงการติดตั้งใช้งาน

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

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

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

ตรวจสอบการติดตั้งใช้งานโดยใช้การทดสอบหน่วยฟีเจอร์, 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 ที่มีอยู่
  • สร้างแก้ไขข้อบกพร่องของคีย์ Signing
  • ลงนาม APK ด้วยรูปแบบลายเซ็น v4 จากโฟลเดอร์ build-tools
    ./apksigner sign --ks debug.keystore game.apk
  • ติดตั้ง APK ในอุปกรณ์จาก platform-tools โฟลเดอร์
    ./adb install game.apk
ตัวอย่างการติดตั้ง
ภาพที่ 1: ตัวอย่างการติดตั้ง

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