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 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 ra 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 các nhà phát triển ứng dụng và trò chơi triển khai các APK lớn thông qua ADB cho một thiết bị chạy trên Android 11 trở lên.
Thay đổi nhân cho phép định dạng Sơ đồ chữ ký APK v4 mới và hỗ trợ các thay đổi 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.
Thực hiện
Để 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 nhân mới vào các 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 xây dựng 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ó bất kỳ ứng dụng nào được cài đặt thông qua cài đặt gia tăng ADB, thì thiết bị sẽ không tải trình điều khiển nhân.
Mặt khác, khi nó được xây dựng như một phần của hình ảnh hạt nhân, trình điều khiển luôn được tải. Triển khai này hợp lệ cho Android 12 trở lên và có thể được sử dụng với Android 11 . Để biết thông tin về cách nâng cấp trình điều khiển kernel lên Android 12, hãy xem Nâng cấp trình điều khiển kernel .
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 được phát trực tuyến. OEM và nhà cung cấp không cần sử dụng mã IncFS chính xác được cung cấp trong 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 giao diện Không gian người dùng cho tài liệu FS gia tăng .
Ngoài ra, việc triển khai phải có các tùy chọn gắn kết và các tệp đặc biệt phù hợp về mặt chức năng với việc triển khai mẫu IncFS.
Sau đây liệt kê những thay đổi cần thiết để thực hiện:
- Thiết lập máy phát triển để xây dựng hạt nhân.
- Nhắm mục tiêu kernel 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 những thay đổi sau cần thiết cho IncFS có trong thanh toán chi 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 thêm
CONFIG_INCREMENTAL_FS=y
hoặc chỉ dành cho Android 11 ,CONFIG_INCREMENTAL_FS=m
ở cuối tệpdefconfig
. Để xem ví dụ, hãy nhấp vào một trong các liên kết bên dưới: - Xây dựng hạt nhân
- Nhúng hạt 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 của bạn, 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
của bạn ( tùy chọn trong 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 giả lập 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 SE Linux Rules . -
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 tin 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 nối tệp với một trong các tệp sau:
Khi bạn đang sử dụng CONFIG_INCREMENTAL_FS=m
( chỉ dành cho Android 11 ), hãy nối tệp bằng một trong các tệp sau:
Tạo và thêm tệp vold.te
vào thư mục /system/sepolicy/vendor
thiết bị với nội dung sau:
Cho phép nó tải trình điều khiển hệ thống tệp gia tăng:
Nối các quy tắc SE Linux sau vào tệp file.te
hiện có trong thư mục /system/sepolicy/vendor
của bạn:
Nối các quy tắc SE Linux sau vào tệp file_contents
hiện có trong thư mục /system/sepolicy/vendor
của bạn:
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 cũ hơn của trình điều khiển IncFS. Đố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 được phát hành cùng với Android 11 là phiên bản triển khai ban đầu của IncFS, chỉ nhắm mục tiêu 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 Play, yêu cầu các tính năng mới và tối ưu hóa của IncFS v2 để có trải nghiệm người dùng tốt hơn.
- V1 hỗ trợ phát trực tuyến trò chơi, nhưng làm như vậy với các hình phạt về hiệu suất và mức sử dụng pin, CPU và RAM cao hơn so với v2.
- V2 cung cấp trải nghiệm người dùng được cải tiến để phát trực tuyến, với hoạt ảnh tiến trình mượt mà, báo cáo sử dụng dung lượng ổ đĩa chính xác và ngăn chặn sự can thiệp của ứng dụng bên thứ 3 khi phát trực tuyến.
Để nâng cấp trình điều khiển IncFS trong nhân của bạn, hãy áp dụng các bản vá sau cho nhân 4.14 hoặc nhân 4.19:
- Bản vá hạt nhân 4.14
- Bản vá hạt nhân 4.19
Đối với tất cả các phiên bản nhân tùy chỉnh khác, vui lòng chuyển một trong các bản vá lỗi. Chúng chỉ ảnh hưởng đến thư mục fs/incfs
và áp dụng rõ ràng cho mã v1 hiện có.
- Kernel 4.14 sửa lỗi cho trình điều khiển v1
- Kernel 4.19 sửa lỗi cho trình điều khiển v1
- Kernel 5.4 sửa lỗi 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 Android 11 ban đầu nhưng hiện đã được nâng cấp, 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 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 trình điều khiển IncFS (v2) mới nhất, được định cấu hình như một phần của hình ảnh nhân. Điều này không yêu cầu các bước bổ sung.
Cấu hình mô-đun có thể tải không được dùng trong Android 12 và không được hỗ trợ cho các thiết bị mới. Nó chỉ được phép nâng cấp hoặc đóng băng hình ảnh nhà cung cấp khi hạt nhân ban đầu đã được xây dựng dưới dạng mô-đun.
triển khai tham khảo
Việc triển khai này có thể được coi là một phần của hình ảnh hạt nhân hoặc ( chỉ dành cho Android 11 ) dưới dạng 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 dựng 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 nhận và thử nghiệm
Xác thực việc triển khai bằng cách sử dụng Kiểm tra đơn vị tính năng, CTS và GTS.
CTS
Sử dụngCtsIncrementalInstallHostTestCases
.GTS
atest GtsIncrementalInstallTestCases
:
/gts-tests/tests/packageinstaller/incremental/src/com/google/android/packageinstaller/incremental/gts/IncrementalInstallerTest.java
Kiểm tra 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 tra thủ công sau:
mmma system/incremental_delivery/incfs/tests
atest libincfs-test
atest IncrementalServiceTest
atest PackageManagerShellCommandTest
PackageManagerShellCommandIncrementalTest
Cách kiểm tra IncFS với Android SDK (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.
- Flash bản dựng trên thiết bị vật lý đích hoặc trình giả lập.
- Tạo hoặc lấy APK hiện có.
- Tạo khóa ký gỡ lỗi .
- Ký APK với định dạng chữ ký v4 từ 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

Xác định vị trí các bài kiểm tra 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