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

โมดูลเคอร์เนล Incremental File System (IncFS) ที่เปิดตัวใน Android 11 ช่วยให้ระบบปฏิบัติการ Android รับ APK ที่สตรีมผ่าน Android Debug Bridge (ADB)

โมดูลเคอร์เนลที่มีอยู่ในตัวเองนี้สร้างระบบไฟล์เสมือนใหม่ที่อยู่บนระบบไฟล์ Android ที่มีอยู่ สิ่งนี้ช่วยเสริมการเปลี่ยนแปลงในเฟรมเวิร์กและ SDK เพื่อให้นักพัฒนาแอปและเกมสามารถปรับใช้ APK ขนาดใหญ่ผ่าน ADB ไปยังอุปกรณ์ที่ทำงานบน Android 11 หรือสูงกว่าได้

การเปลี่ยนแปลงเคอร์เนลช่วยให้ใหม่ เอพีเคลายเซ็นโครงการรูปแบบ v4 และสนับสนุนการเปลี่ยนแปลงของ Android กรอบใน Android แพคเกจจัดการบริการระบบใหม่และการเปลี่ยนแปลงธนาคารพัฒนาเอเชีย

การดำเนินการ

ในการใช้งาน IncFS ผู้ผลิต OEM และ SoC จะต้องเพิ่มไดรเวอร์เคอร์เนลใหม่ให้กับอุปกรณ์ Android ของตน

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

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

ไดรเวอร์เคอร์เนลเป็นส่วนหนึ่งของระบบที่ใหญ่กว่าเพื่อเปิดใช้งานการติดตั้ง APK แบบสตรีม OEM และผู้ขายไม่จำเป็นต้องใช้รหัส IncFS ที่ให้ไว้ในตัวอย่างการใช้งาน อย่างไรก็ตามเพื่อให้แน่ใจว่าเป็นประสบการณ์ที่สอดคล้องกันในอุปกรณ์ที่คุณจะต้องให้การดำเนินงาน API มีระบบไฟล์ที่มีการทำงานไฟล์อ่านและฟังก์ชั่นไดเรกทอรีอ่านเขียนตามที่กำหนดไว้ใน อินเตอร์เฟซที่เพิ่มขึ้นสำหรับ USERSPACE FS เอกสาร

นอกจากนี้การใช้งานต้องมี ตัวเลือก mount และ ไฟล์พิเศษ ที่ตรงกับหน้าที่ 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 ลินุกซ์
  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 ลินุกซ์ต่อไปนี้ที่มีอยู่ file.te ไฟล์ของคุณที่พบใน /system/sepolicy/vendor โฟลเดอร์:

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

    ผนวกกฎ SE ลินุกซ์ต่อไปนี้ที่มีอยู่ 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 และไม่รองรับอุปกรณ์ใหม่ อนุญาตเฉพาะสำหรับการอัพเกรดหรือสำหรับการหยุดอิมเมจของผู้ขายเมื่อเคอร์เนลดั้งเดิมสร้างเป็นโมดูลแล้ว

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

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

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