Hệ thống tệp gia tăng

Mô-đun hạt nhân Hệ thống tệp gia tăng (IncFS) được giới thiệu trong Android 11 cho phép hệ điều hành Android nhận các tệp APK được truyền trực tuyến qua Cầu gỡ lỗi Android (ADB).

Mô-đun kernel độc lập này tạo một hệ thống tệp ảo mới nằm trên hệ thống tệp Android hiện có. Điều này bổ sung cho các thay đổi trong khung và SDK để cho phép nhà phát triển ứng dụng và trò chơi triển khai các tệp APK lớn thông qua ADB cho một thiết bị chạy Android 11 trở lên.

Thay đổi về nhân cho phép định dạng Lược đồ chữ ký APK v4 mới và hỗ trợ các thay đổi về khung Android trong Trình quản lý gói Android, các dịch vụ hệ thống mới và các thay đổi đối với ADB.

Triển khai

Để triển khai IncFS, các OEM và nhà sản xuất SoC phải thêm một trình điều khiển hạt nhân mới vào bản dựng thiết bị Android của họ.

Chỉ dành cho Android 11, nếu trình điều khiển nhân được tạo dưới dạng một mô-đun, thì trình điều khiển đó sẽ được tải theo yêu cầu. Nếu không có ứng dụng nào được cài đặt thông qua quy trình cài đặt gia tăng ADB, thì thiết bị sẽ không tải trình điều khiển nhân.

Nếu không, khi được tạo dưới dạng một phần của hình ảnh nhân, trình điều khiển sẽ luôn được tải. Cách triển khai này hợp lệ cho Android 12 trở lên và có thể dùng với Android 11. Để biết thông tin về cách nâng cấp trình điều khiển nhân lên Android 12, hãy xem phần Nâng cấp trình điều khiển nhân.

Trình điều khiển nhân là một phần của hệ thống lớn hơn để cho phép cài đặt APK truyền trực tuyến. Các OEM và nhà cung cấp không cần sử dụng chính xác mã IncFS được cung cấp trong các triển khai mẫu. Tuy nhiên, để đảm bảo trải nghiệm nhất quán trên các thiết bị, bạn phải đảm bảo việc triển khai API có một hệ thống tệp có chức năng đọc tệp và chức năng đọc-ghi thư mục như được xác định trong tài liệu Giao diện không gian người dùng cho FS gia tăng.

Ngoài ra, các hoạt động triển khai phải có lựa chọn gắn kếttệp đặc biệt có chức năng khớp với hoạt động triển khai mẫu IncFS.

Sau đây là danh sách những thay đổi cần thiết để triển khai:

  1. Thiết lập máy phát triển để tạo nhân.
  2. Nhắm đến nhân chung từ nhánh common-android-mainline.
    repo init -u https://android.googlesource.com/kernel/manifest -b common-android-mainline
    repo sync
  3. Xác thực rằng những thay đổi sau đây cần thiết cho IncFS nằm trong quá trình kiểm xuất nhánh:
  4. Thêm CONFIG_INCREMENTAL_FS=y hoặc CONFIG_INCREMENTAL_FS=m (chỉ dành cho Android 11) vào cuối tệp defconfig. Để xem ví dụ, hãy nhấp vào một trong các đường liên kết bên dưới:
  5. Tạo nhân
  6. Nhúng nhân vào bản dựng hình ảnh thiết bị Android.
  7. Đối với thiết bị Android mục tiêu, hãy thêm một trong các dòng thuộc tính hệ thống dành riêng cho nhà cung cấp sau vào tệp device.mk (không bắt buộc đối với các thiết bị chạy Android 12 trở lên):
  8. Khi bạn đang sử dụng CONFIG_INCREMENTAL_FS=y, hãy thêm tệp bằng một trong các cách sau:

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

    Khi bạn đang sử dụng CONFIG_INCREMENTAL_FS=m (chỉ dành cho Android 11), hãy thêm tệp bằng một trong những cách sau:

    • PRODUCT_PROPERTY_OVERRIDES += \
    • ro.incremental.enable=module:/vendor/lib/modules/incrementalfs.ko
  9. Xem các tệp ví dụ device.mk cho trình mô phỏng Android và Pixel 4.
  10. Chỉ dành cho Android 11: Nếu bạn đang dùng CONFIG_INCREMENTAL_FS=m, hãy thêm Quy tắc SE Linux.
  11. Tạo và thêm tệp vold.te vào thư mục /system/sepolicy/vendor trên thiết bị của bạn bằng nội dung sau:

    • vold.te

    Cho phép tải trình điều khiển hệ thống tệp gia tăng:

    • allow vold self:capability sys_module;
    • allow vold vendor_incremental_module:file r_file_perms;
    • allow vold vendor_incremental_module:system module_load;

    Thêm các quy tắc SE Linux sau vào tệp file.te hiện có trong thư mục /system/sepolicy/vendor:

    • tệp file.te – Để xem ví dụ, hãy xem tệp file.te này.)
    • Trình điều khiển hệ thống tệp gia tăng
    • type vendor_incremental_module, vendor_file_type, file_type;

    Thêm các quy tắc SE Linux sau vào tệp file_contents hiện có trong thư mục /system/sepolicy/vendor:

    • Tệp file_contents – Để xem ví dụ, hãy xem tệp file_contents này.
    • # Incremental file system driver
    • /vendor/lib/modules/incrementalfs\.ko
    • u:object_r:vendor_incremental_module:s0

Nâng cấp trình điều khiển kernel

Các thiết bị nâng cấp lên Android 12 có thể có phiên bản cũ hơn của trình điều khiển IncFS. Đối với những thiết bị đó, AOSP khuyến nghị bạn cập nhật trình điều khiển IncFS lên phiên bản hiện tại (trong trường hợp này là phiên bản 2) vì những lý do sau:

  • Phiên bản được phát hành cùng với Android 11 là bản triển khai ban đầu của IncFS, chỉ nhắm đến việc hỗ trợ cài đặt ADB.
  • Android 12 sử dụng trình điều khiển IncFS để phát trực tuyến các bản cài đặt trò chơi Play. Điều này đòi hỏi các tính năng mới và hoạt động tối ưu hoá của IncFS phiên bản 2 để mang lại trải nghiệm tốt hơn cho người dùng.
  • V1 hỗ trợ phát trực tuyến trò chơi, nhưng hiệu suất sẽ bị giảm và mức sử dụng pin, CPU và RAM cao hơn so với v2.
  • V2 cải thiện trải nghiệm người dùng khi phát trực tuyến, với ảnh động tiến trình mượt mà, báo cáo chính xác về mức sử dụng dung lượng ổ đĩa và ngăn chặn sự can thiệp của ứng dụng phát trực tuyến bên thứ ba.

Để nâng cấp trình điều khiển IncFS trong kernel, hãy áp dụng các bản vá sau cho kernel 4.14 hoặc kernel 4.19:

Đối với tất cả các phiên bản kernel tuỳ chỉnh khác, vui lòng chuyển một trong các bản vá. Các thay đổi này chỉ ảnh hưởng đến thư mục fs/incfs và áp dụng một cách rõ ràng cho mã v1 hiện có.

Tiếp tục sử dụng trình điều khiển IncFS theo cách tương tự như đối với Android 11 ban đầu nhưng hiện đã được nâng cấp, có thể là một phần tích hợp của hình ảnh nhân hoặc là một mô-đun riêng biệt. Không thay đổi cấu hình bo mạch hệ thống hoặc thuộc tính hệ thống.

Các thiết bị mới sử dụng hình ảnh nhân GKI sẽ tự động nhận được trình điều khiển IncFS mới nhất (phiên bản 2), được định cấu hình như một phần của hình ảnh nhân. Bạn không cần thực hiện thêm bước nào.

Cấu hình mô-đun có thể tải đã không được dùng nữa trong Android 12 và không được hỗ trợ cho các thiết bị mới. Chỉ được phép nâng cấp hoặc đóng băng hình ảnh nhà cung cấp khi nhân ban đầu đã được tạo dưới dạng một mô-đun.

Triển khai tham chiếu

Bạn có thể coi quá trình triển khai này là một phần của hình ảnh nhân hoặc (chỉ dành cho Android 11) là một mô-đun có thể tải.

Mô-đun có thể tải (thiết bị Pixel 4) Trình mô phỏng Android (trong hình ảnh nhân)

Xác thực và kiểm thử

Xác thực việc triển khai bằng Kiểm thử đơn vị tính năng, CTS và GTS.

CTS

Sử dụng CtsIncrementalInstallHostTestCases.

GTS

atest GtsIncrementalInstallTestCases:

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

Kiểm thử IncFS

  1. Thiết lập môi trường phát triển.
  2. Hoàn tất các việc cần làm để triển khai được nêu trong phần triển khai.
  3. Chạy các kiểm thử thủ công sau:
    mmma system/incremental_delivery/incfs/tests
    atest libincfs-test
    atest IncrementalServiceTest
    atest PackageManagerShellCommandTest
    PackageManagerShellCommandIncrementalTest

Kiểm thử IncFS bằng Android SDK (ADB và apksigner)

  • Thiết lập môi trường phát triển.
  • Hoàn tất các việc cần làm để triển khai được nêu trong phần triển khai.
  • Nạp bản dựng vào một thiết bị thực hoặc trình mô phỏng mục tiêu.
  • Tạo hoặc lấy một tệp APK hiện có.
  • Tạo một khoá ký gỡ lỗi.
  • APK bằng định dạng chữ ký v4 trong thư mục build-tools.
    ./apksigner sign --ks debug.keystore game.apk
  • Cài đặt APK trên thiết bị từ thư mục platform-tools.
    ./adb install game.apk
Ví dụ về cách cài đặt
Hình 1: Ví dụ về quy trình cài đặt

Tìm các bài kiểm thử này