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

โมดูลเคอร์เนลของระบบไฟล์แบบเพิ่ม (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 เป้าหมาย ให้ต่อท้ายบรรทัด system-property ที่เฉพาะเจาะจงของผู้ให้บริการรายใดรายหนึ่งต่อไปนี้ในไฟล์ 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
  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

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

อุปกรณ์ที่อัปเกรดเป็น 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

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

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