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

โมดูลเคอร์เนล Incremental 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 สำหรับเอกสาร Incremental 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.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 Emulator (เป็นส่วนหนึ่งของอิมเมจเคอร์เนล)

การตรวจสอบความถูกต้องและการทดสอบ

ตรวจสอบการใช้งานโดยใช้ Feature Unit Tests, CTS และ GTS

ซี.ที.เอส

ใช้ CtsIncrementalInstallHostTestCases

จีทีเอส

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 : ตัวอย่างการติดตั้ง

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