Bạn có thể sử dụng công cụ ota_from_target_files
được cung cấp trong build/make/tools/releasetools
để xây dựng các gói OTA đầy đủ và gia tăng cho các thiết bị sử dụng bản cập nhật hệ thống A/B hoặc bản cập nhật hệ thống không phải A/B . Công cụ này lấy tệp target-files.zip
do hệ thống xây dựng Android tạo ra làm đầu vào.
Đối với các thiết bị chạy Android 11 trở lên, bạn có thể xây dựng một gói OTA cho nhiều thiết bị có SKU khác nhau. Làm như vậy yêu cầu định cấu hình thiết bị mục tiêu để sử dụng dấu vân tay động và cập nhật siêu dữ liệu OTA để bao gồm tên thiết bị và dấu vân tay trong các mục nhập điều kiện trước và sau.
Android 8.0 không dùng nữa các gói OTA dựa trên tệp dành cho các thiết bị không phải A/B, thay vào đó các gói này phải sử dụng các gói OTA dựa trên khối . Để tạo các gói OTA hoặc thiết bị dựa trên khối chạy Android 7.x trở xuống, hãy chuyển tùy chọn --block
cho tham số ota_from_target_files
.
Xây dựng bản cập nhật đầy đủ
Bản cập nhật đầy đủ là gói OTA chứa toàn bộ trạng thái cuối cùng của thiết bị (phân vùng hệ thống, khởi động và phục hồi). Miễn là thiết bị có khả năng nhận và áp dụng gói, gói đó có thể cài đặt bản dựng bất kể trạng thái hiện tại của thiết bị. Ví dụ: các lệnh sau sử dụng công cụ phát hành để xây dựng kho lưu trữ target-files.zip
cho thiết bị tardis
.
. build/envsetup.sh && lunch tardis-eng
mkdir dist_output
make dist DIST_DIR=dist_output
make dist
xây dựng gói OTA đầy đủ (bằng $OUT
). Tệp .zip
kết quả chứa mọi thứ cần thiết để xây dựng các gói OTA cho thiết bị tardis
. Bạn cũng có thể xây dựng ota_from_target_files
dưới dạng nhị phân python và gọi nó để xây dựng các gói đầy đủ hoặc gói tăng dần.
ota_from_target_files dist_output/tardis-target_files.zip ota_update.zip
Đường dẫn ota_from_target_files
được thiết lập trong $PATH
và kết quả nhị phân python nằm trong thư mục out/
.
ota_update.zip
hiện đã sẵn sàng để gửi đến các thiết bị thử nghiệm (mọi thứ đều được ký bằng khóa kiểm tra). Đối với thiết bị của người dùng, hãy tạo và sử dụng khóa riêng của bạn như được nêu chi tiết trong Ký bản dựng để phát hành .
Xây dựng các bản cập nhật gia tăng
Bản cập nhật gia tăng là gói OTA chứa các bản vá nhị phân cho dữ liệu đã có trên thiết bị. Các gói có bản cập nhật gia tăng thường nhỏ hơn vì chúng không cần bao gồm các tệp không thay đổi. Ngoài ra, vì các tệp đã thay đổi thường rất giống với các phiên bản trước đó nên gói chỉ cần bao gồm mã hóa về sự khác biệt giữa hai tệp.
Bạn chỉ có thể cài đặt gói cập nhật gia tăng trên các thiết bị có bản dựng nguồn được sử dụng để xây dựng gói. Để xây dựng bản cập nhật gia tăng, bạn cần có tệp target_files.zip
từ bản dựng trước (tệp bạn muốn cập nhật từ ) cũng như tệp target_files.zip
từ bản dựng mới. Ví dụ: các lệnh sau sử dụng công cụ phát hành để tạo bản cập nhật gia tăng cho thiết bị tardis
.
ota_from_target_files -i PREVIOUS-tardis-target_files.zip dist_output/tardis-target_files.zip incremental_ota_update.zip
Bản dựng này rất giống với bản dựng trước và gói cập nhật gia tăng ( incremental_ota_update.zip
) nhỏ hơn nhiều so với bản cập nhật đầy đủ tương ứng (khoảng 1 MB thay vì 60 MB).
Chỉ phân phối gói gia tăng cho các thiết bị chạy chính xác cùng bản dựng trước đó được dùng làm điểm bắt đầu của gói gia tăng. Bạn phải flash các hình ảnh trong PREVIOUS-tardis-target_files.zip
hoặc PREVIOUS-tardis-img.zip
(cả hai đều được xây dựng bằng make dist
, để được flash bằng fastboot update
), thay vì các hình ảnh trong thư mục PRODUCT_OUT
(được xây dựng bằng make
, mà sẽ được flash bằng fastboot flashall
). Việc cố gắng cài đặt gói gia tăng trên thiết bị có một số bản dựng khác sẽ dẫn đến lỗi cài đặt. Khi cài đặt không thành công, thiết bị vẫn giữ nguyên trạng thái làm việc (chạy hệ thống cũ); gói sẽ xác minh trạng thái trước đó của tất cả các tệp mà nó cập nhật trước khi chạm vào chúng, do đó thiết bị không bị mắc kẹt ở trạng thái được nâng cấp một nửa.
Để có trải nghiệm người dùng tốt nhất, hãy cung cấp bản cập nhật đầy đủ cho mỗi 3–4 bản cập nhật gia tăng. Điều này giúp người dùng cập nhật bản phát hành mới nhất và tránh phải cài đặt dài dòng các bản cập nhật gia tăng.
Xây dựng các gói OTA cho nhiều SKU
Android 11 trở lên hỗ trợ sử dụng một gói OTA cho nhiều thiết bị có SKU khác nhau. Làm như vậy yêu cầu định cấu hình thiết bị mục tiêu để sử dụng dấu vân tay động và cập nhật siêu dữ liệu OTA (sử dụng công cụ OTA) để bao gồm tên thiết bị và dấu vân tay trong các mục nhập điều kiện trước và sau.
Giới thiệu về SKU
Định dạng của SKU là một biến thể của các giá trị tham số bản dựng kết hợp và thường là tập hợp con chưa được khai báo của các tham số build_fingerprint
hiện tại. OEM có thể sử dụng bất kỳ kết hợp tham số bản dựng nào được CDD phê duyệt cho SKU, đồng thời sử dụng một hình ảnh duy nhất cho các SKU đó. Ví dụ: SKU sau có nhiều biến thể:
SKU = <product><device><modifierA><modifierB><modifierC>
-
modifierA
là cấp độ thiết bị (chẳng hạn như Pro, Premium hoặc Plus) -
modifierB
là biến thể phần cứng (chẳng hạn như radio) -
modifierC
là khu vực, có thể là chung (chẳng hạn như NA, EMEA hoặc CHN) hoặc theo quốc gia hoặc ngôn ngữ cụ thể (chẳng hạn như JPN, ENG hoặc CHN)
Nhiều OEM sử dụng một hình ảnh duy nhất cho nhiều SKU, sau đó lấy tên sản phẩm cuối cùng và dấu vân tay của thiết bị trong thời gian chạy sau khi thiết bị khởi động. Quá trình này đơn giản hóa quá trình phát triển nền tảng, cho phép các thiết bị có các tùy chỉnh nhỏ nhưng tên sản phẩm khác nhau chia sẻ các hình ảnh chung (chẳng hạn như tardis
và tardispro
).
Sử dụng dấu vân tay động
Dấu vân tay là sự kết hợp xác định của các tham số bản dựng , chẳng hạn như ro.product.brand
, ro.product.name
và ro.product.device
. Dấu vân tay của thiết bị được lấy từ dấu vân tay của phân vùng hệ thống và được sử dụng làm mã định danh duy nhất cho hình ảnh (và byte) đang chạy trên thiết bị. Để tạo vân tay động , hãy sử dụng logic động trong tệp build.prop
của thiết bị để lấy giá trị của các biến bootloader tại thời điểm khởi động thiết bị, sau đó sử dụng dữ liệu đó để tạo vân tay động cho thiết bị đó.
Ví dụ: để sử dụng dấu vân tay động cho thiết bị tardis
và tardispro
, hãy cập nhật các tệp sau như hiển thị bên dưới.
Cập nhật tệp
odm/etc/build_std.prop
để chứa dòng sau.ro.odm.product.device=tardis
Cập nhật tệp
odm/etc/build_pro.prop
để chứa dòng sau.ro.odm.product.device=tardispro
Cập nhật tệp
odm/etc/build.prop
để chứa các dòng sau.ro.odm.product.device=tardis import /odm/etc/build_${ro.boot.product.hardware.sku}.prop
Những dòng này tự động đặt tên thiết bị, dấu vân tay và giá trị ro.build.fingerprint
dựa trên giá trị của thuộc tính bộ tải khởi động ro.boot.product.hardware.sku
(chỉ đọc).
Cập nhật siêu dữ liệu gói OTA
Gói OTA chứa tệp siêu dữ liệu ( META-INF/com/android/metadata
) mô tả gói, bao gồm điều kiện tiên quyết và điều kiện hậu của gói OTA. Ví dụ: mã sau đây là tệp siêu dữ liệu cho gói OTA nhắm mục tiêu thiết bị tardis
.
post-build=google/tardis/tardis:11/RP1A.200521.001/6516341:userdebug/dev-keys
post-build-incremental=6516341
post-sdk-level=30
post-security-patch-level=2020-07-05
post-timestamp=1590026334
pre-build=google/tardis/tardis:11/RP1A.200519.002.A1/6515794:userdebug/dev-keys
pre-build-incremental=6515794
pre-device=tardis
Các giá trị pre-device
, pre-build-incremental
và pre-build
xác định trạng thái mà thiết bị phải có trước khi gói OTA có thể cài đặt. Các giá trị post-build-incremental
và post-build
xác định trạng thái mà thiết bị dự kiến sẽ có sau khi cài đặt gói OTA. Giá trị của trường pre-
và post-
được lấy từ các thuộc tính bản dựng tương ứng sau.
- Giá trị
pre-device
được lấy từ thuộc tính bản dựngro.product.device
. - Các giá trị gia
pre-build-incremental
vàpost-build-incremental
được lấy từ thuộc tính bản dựngro.build.version.incremental
. - Các giá trị
pre-build
vàpost-build
được lấy từ thuộc tính bản dựngro.build.fingerprint
.
Trên các thiết bị chạy Android 11 trở lên, bạn có thể sử dụng cờ --boot_variable_file
trong công cụ OTA để chỉ định đường dẫn đến tệp chứa giá trị của các biến thời gian chạy được dùng để tạo vân tay động của thiết bị. Sau đó, dữ liệu được sử dụng để cập nhật siêu dữ liệu OTA nhằm bao gồm tên thiết bị và dấu vân tay trong các điều kiện pre-
và post-
(sử dụng ký tự ống | làm dấu phân cách). Cờ --boot_variable_file
có cú pháp và mô tả sau.
- Cú pháp:
--boot_variable_file <path>
- Mô tả: Chỉ định đường dẫn đến tệp chứa các giá trị có thể có của thuộc tính
ro.boot.*
. Được dùng để tính toán các dấu vân tay có thể có trong thời gian chạy khi một số thuộc tínhro.product.*
bị câu lệnh nhập ghi đè. Tệp yêu cầu một thuộc tính trên mỗi dòng trong đó mỗi dòng có định dạng sau:prop_name=value1,value2
.
Ví dụ: khi thuộc tính là ro.boot.product.hardware.sku=std,pro
, siêu dữ liệu OTA cho các thiết bị tardis
và tardispro
sẽ như hiển thị bên dưới.
post-build=google/tardis/tardis:11/<suffix>|google/tardis/tardispro:11/<suffix>
pre-build=google/tardis/tardis:11/<suffix>|google/tardis/tardispro:11/<suffix>
pre-device=tardis|tardispro
Để hỗ trợ chức năng này trên các thiết bị chạy Android 10, hãy xem cách triển khai tham khảo . Danh sách thay đổi này phân tích cú pháp có điều kiện các câu lệnh import
trong tệp build.prop
, cho phép ghi đè thuộc tính được nhận dạng và phản ánh trong siêu dữ liệu OTA cuối cùng.