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 hạt nhân độ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 kernel cho phép sử dụng định dạng Lược đồ chữ ký APK phiên bản 4 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, nhà sản xuất thiết bị gốc (OEM) và nhà sản xuất SoC phải thêm trình điều khiển hạt nhân mới vào bản dựng thiết bị Android.
Chỉ dành cho Android 11, nếu trình điều khiển hạt nhân được tạo dưới dạng mô-đun, thì trình điều khiển này 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 quá trình cài đặt gia tăng ADB, thì thiết bị sẽ không tải trình điều khiển hạt nhân.
Nếu không, khi được tạo dưới dạng một phần của hình ảnh hạt nhân, trình điều khiển sẽ luôn được tải. Phương thức triển khai này hợp lệ cho Android 12 trở lên và có thể dùng được với Android 11. Để biết thông tin về cách nâng cấp trình điều khiển hạt nhân lên Android 12, hãy xem phần Nâng cấp trình điều khiển hạt nhân.
Trình điều khiển hạt nhân là một phần của hệ thống lớn hơn để cho phép cài đặt APK theo luồng. Nhà sản xuất thiết bị gố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 hoạt động 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, quá trình triển khai phải có các tuỳ chọn gắn và các tệp đặc biệt phù hợp về chức năng với quá trình triển khai mẫu IncFS.
Sau đây là danh sách các thay đổi cần thiết để triển khai:
- Thiết lập máy phát triển để tạo nhân.
- 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
- Xác thực rằng các thay đổi sau đây cần thiết cho IncFS có trong quy trình thanh toán nhánh:
- https://android-review.googlesource.com/c/kernel/common/+/1222869/
- https://android-review.googlesource.com/c/kernel/common/+/1222870
- https://android-review.googlesource.com/c/kernel/common/+/1222871
- https://android-review.googlesource.com/q/%2522ANDROID:+Incremental+fs:%2522+branch:android-mainline+status:merg
- Nối
CONFIG_INCREMENTAL_FS=y
hoặcCONFIG_INCREMENTAL_FS=m
(chỉ dành cho Android 11) ở cuối tệpdefconfig
. Để xem ví dụ, hãy nhấp vào một trong các đường liên kết bên dưới: - Tạo nhân
- Nhúng nhân vào bản dựng hình ảnh thiết bị Android.
- Đố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 đây 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): PRODUCT_PROPERTY_OVERRIDES += \
ro.incremental.enable=yes
PRODUCT_PROPERTY_OVERRIDES += \
ro.incremental.enable=module:/vendor/lib/modules/incrementalfs.ko
- Xem các tệp
device.mk
mẫu cho trình mô phỏng Android và Pixel 4. - Chỉ dành cho Android 11: Nếu bạn đang sử dụng
CONFIG_INCREMENTAL_FS=m
, hãy thêm Quy tắc SE Linux. 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;
-
Tệp
file.te
– Để biết ví dụ, hãy xem tệpfile.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;
-
Tệp
file_contents
– Để biết ví dụ, hãy xem tệpfile_contents
này. # Incremental file system driver
/vendor/lib/modules/incrementalfs\.ko
u:object_r:vendor_incremental_module:s0
Khi bạn đang sử dụng CONFIG_INCREMENTAL_FS=y
, hãy thêm tệp bằng một trong những cách sau:
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:
Tạo và thêm tệp vold.te
vào thư mục /system/sepolicy/vendor
của thiết bị với nội dung sau:
Cho phép tải trình điều khiển hệ thống tệp gia tăng:
Hãy 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
:
Hãy 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
:
Nâng cấp trình điều khiển hạt nhân
Các thiết bị nâng cấp lên Android 12 có thể bao gồm phiên bản trình điều khiển IncFS cũ. Đối với những thiết bị đó, AOSP khuyên bạn nê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à v2) vì những lý do sau:
- Phiên bản phát hành cùng với Android 11 là phương thức 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 để cài đặt trực tuyến các trò chơi trên Play. Điều này đòi hỏi các tính năng và tính năng tối ưu hoá mới của IncFS v2 để mang lại trải nghiệm tốt hơn cho người dùng.
- Phiên bản 1 hỗ trợ tính năng phát trực tuyến trò chơi, nhưng làm như vậy sẽ bị phạt về hiệu suất và mức sử dụng pin, CPU và RAM cao hơn so với phiên bản 2.
- Phiên bản 2 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 hạt nhân, hãy áp dụng các bản vá sau đây cho hạt nhân 4.14 hoặc hạt nhân 4.19:
- Bản vá Kernel 4.14
- Bản vá Kernel 4.19
Đối với tất cả các phiên bản hạt nhân tuỳ chỉnh khác, vui lòng chuyển một trong các bộ 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ó.
- Sửa lỗi Kernel 4.14 cho trình điều khiển v1
- Sửa lỗi Kernel 4.19 cho trình điều khiển v1
- Sửa lỗi Kernel 5.4 cho trình điều khiển v1
Tiếp tục sử dụng trình điều khiển IncFS theo cách tương tự như đối với phiên bản gốc nhưng hiện đã nâng cấp lên Android 11, dưới dạng một phần tích hợp sẵn của hình ảnh hạt nhân hoặc dưới dạng một mô-đun riêng biệt. Không thay đổi cấu hình của 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 hạt nhân GKI sẽ tự động nhận trình điều khiển IncFS (phiên bản 2) mới nhất, được định cấu hình như một phần của hình ảnh hạt nhân. Bạn không cần làm gì thêm.
Cấu hình mô-đun có thể tải không còn được dùng trong Android 12 và không được hỗ trợ cho các thiết bị mới. Bạn chỉ được phép thực hiện việc này đối với các bản nâng cấp hoặc khi hình ảnh của nhà cung cấp bị treo khi hạt nhân gốc đã tạo hình ảnh đó dưới dạng mô-đun.
Triển khai tham chiếu
Bạn có thể coi phương thức triển khai này là một phần của hình ảnh hạt 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)- Thêm mô-đun hạt nhân tạo sẵn
- Thêm và Bật thay đổi thuộc tính hệ thống mô-đun hạt nhân trên thiết bị
- Cập nhật quy tắc SE Linux
Xác thực và kiểm thử
Xác thực quá trình triển khai bằng cách sử dụ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
- Thiết lập môi trường phát triển.
- Hoàn thành các nhiệm vụ triển khai được nêu trong phần triển khai.
- 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 SDK Android (ADB và apksigner)
- Thiết lập môi trường phát triển.
- Hoàn thành các nhiệm vụ triển khai được nêu trong phần triển khai.
- Cài đặt ROM cho bản dựng trên một trình mô phỏng hoặc thiết bị thực tế mục tiêu.
- Tạo hoặc lấy tệp APK hiện có.
- Tạo khoá ký gỡ lỗi.
- Ký tệp 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 tệp APK trên thiết bị từ thư mục
platform-tools
../adb install game.apk

Tìm các bài kiểm thử này
- /android/kernel/common/tools/testing/selftests/filesystems/incfs/
- /android/system/incremental_delivery/incfs/tests/incfs_test.cpp
- /android/cts/tests/tests/content/src/android/content/pm/cts/PackageManagerShellCommandIncrementalTest.java