Bạn có thể sử dụng ota_from_target_files
được cung cấp trong build/make/tools/releasetools
để tạo báo cáo đầy đủ và tăng dần
Gói OTA cho thiết bị sử dụng bản cập nhật hệ thống A/B hoặc
các bản cập nhật hệ thống không thuộc A/B. Công cụ này sẽ lấy
Tệp target-files.zip
do hệ thống xây dựng Android tạo ra làm dữ liệu đầu vào.
Đối với các thiết bị chạy Android 11 trở lên, bạn có thể tạo một gói OTA cho nhiều thiết bị có SKU khác nhau. Để làm như vậy, bạn cần định cấu hình thiết bị mục tiêu để sử dụng vân tay động và cập nhật siêu dữ liệu OTA để bao gồm thiết bị tên và vân tay số trong các mục trước và sau điều kiện.
Các gói OTA dựa trên tệp không được dùng nữa trên Android 8.0 đối với các thiết bị không phải A/B. Các gói này phải
thay vào đó, hãy sử dụng gói OTA dựa trên khối. Người nhận
tạo gói OTA dựa trên khối hoặc thiết bị chạy Android 7.x trở xuống, vượt qua
lựa 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à một gói OTA chứa toàn bộ trạng thái cuối cùng của
thiết bị (hệ thống, phân vùng khởi động và khôi phục). Miễn là thiết bị có thể
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ị là gì. Ví dụ: như sau
sử dụng công cụ phát hành để tạo kho lưu trữ target-files.zip
cho
tardis
thiết bị.
. build/envsetup.sh && lunch tardis-eng
mkdir dist_output
make dist DIST_DIR=dist_output
make dist
tạo gói OTA đầy đủ (trong $OUT
). Tệp .zip
tổng hợp
chứa mọi thứ cần thiết để tạo gói OTA cho thiết bị tardis
.
Bạn cũng có thể tạo ota_from_target_files
dưới dạng tệp nhị phân python và gọi tệp đó là
tạo 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à thu được kết quả là python
tệp nhị phân 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ứ đã được ký
bằng khoá kiểm tra). Đối với thiết bị của người dùng, hãy tạo và sử dụng khoá riêng tư của bạn để
được nêu chi tiết trong bài viết 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à một 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 có kích thước nhỏ hơn vì chúng không cần bao gồm các tệp không thay đổi. Ngoài ra, giống như các tệp được thay đổi, thường rất giống với các phiên bản trước của chúng, gói chỉ cần bao gồm mã hoá 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 dùng khi tạo gói. Để tạo một bản cập nhật dần dần,
bạn cần tệp target_files.zip
từ bản dựng trước (phiên bản bạn muốn
để cập nhật từ) cũng như tệp target_files.zip
từ bản dựng mới. Cho
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à bản cập nhật gia tăng
gói (incremental_ota_update.zip
) nhỏ hơn nhiều so với gói tin
bản cập nhật đầy đủ (khoảng 1 MB thay vì 60 MB).
Chỉ phân phối gói tăng dần cho các thiết bị chạy giống hệt nhau
bản dựng trước đó được dùng làm điểm bắt đầu của gói tăng dần. Bạn phải cài đặt ROM
hình ảnh trong PREVIOUS-tardis-target_files.zip
hoặc PREVIOUS-tardis-img.zip
(cả hai đều được tạo bằng make dist
, sẽ được cài đặt ROM bằng fastboot update
), thay vì
các tệp trong thư mục PRODUCT_OUT
(được tạo bằng make
,
cài đặt ROM bằng fastboot flashall
). Đang cố cài đặt gói tăng dần
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 hoạt động (chạy phiên bản cũ
hệ thống); gói sẽ xác minh trạng thái trước đó của tất cả các tệp mà gói cập nhật
trước khi chạm vào chúng để thiết bị không bị mắc kẹt ở trạng thái đã nâng cấp một nửa.
Để mang đến trải nghiệm tốt nhất cho người dùng, hãy cung cấp bản cập nhật đầy đủ cho mỗi 3-4 mức độ tăng dần bản cập nhật. Điều này giúp người dùng cập nhật phiên bản mới nhất và tránh phải chờ lâu trình tự cài đặt gồm các bản cập nhật gia tăng.
Xây dựng gói OTA cho nhiều SKU
Android 11 trở lên hỗ trợ bằng cách sử dụng một OTA cho nhiều thiết bị có SKU khác nhau. Thao tác này yêu cầu bạn định cấu hình thiết bị mục tiêu để sử dụng vân tay động và cập nhật siêu dữ liệu OTA (sử dụng các công cụ OTA) để thêm tên thiết bị và vân tay số trong phần trước và sau mục nhập điều kiện.
Giới thiệu về SKU
Định dạng của SKU là biến thể của 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 tham số build_fingerprint
hiện tại.
OEM có thể sử dụng mọi tổ hợp tham số bản dựng được CDD phê duyệt cho SKU trong khi
cũng sử dụng một hình ảnh duy nhất cho các SKU đó. Ví dụ: SKU sau đây 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ư đài)modifierC
là khu vực, có thể gọi là khu vực chung (chẳng hạn như NA, EMEA hoặc CHN ) hoặc quốc gia hoặc ngôn ngữ cụ thể (chẳng hạn như JPN, Tiếng Anh hoặc CHN)
Nhiều OEM sử dụng một hình ảnh duy nhất cho nhiều SKU, sau đó lấy sản phẩm cuối cùng
tên và vân tay số của thiết bị trong thời gian chạy sau khi thiết bị khởi động. Quy trình này
đơn giản hoá quá trình phát triển nền tảng, cho phép các thiết bị có
nhưng các tên sản phẩm khác nhau để chia sẻ những hình ảnh phổ biến (chẳng hạn như
tardis
và tardispro
).
Sử dụng vân tay động
Vân tay số là một chuỗi nối được xác định của bản dựng
tham số như
ro.product.brand
, ro.product.name
và ro.product.device
. Vân tay số
của thiết bị được lấy từ vân tay số phân vùng hệ thống và được dùng làm
mã nhận dạng duy nhất của hình ảnh (và byte) chạy trên thiết bị. Để tạo một
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 trình tải khởi động tại thời điểm khởi động thiết bị, sau đó sử dụng dữ liệu đó để
hãy tạo một vân tay động cho thiết bị đó.
Ví dụ: để sử dụng vân tay động cho các thiết bị tardis
và tardispro
,
hãy cập nhật các tệp sau đây như minh hoạ dưới đây.
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
Các dòng này tự động đặt tên thiết bị, vân tay số và
ro.build.fingerprint
giá trị dựa trên giá trị của thuộc tính
Thuộc tính trình tải khởi động ro.boot.product.hardware.sku
(chỉ có thể đọc).
Cập nhật siêu dữ liệu của gói OTA
Gói OTA chứa tệp siêu dữ liệu (META-INF/com/android/metadata
)
mô tả gói, kể cả điều kiện tiên quyết và điều kiện hậu kỳ của OTA
. Ví dụ: Mã sau đây là tệp siêu dữ liệu của một gói OTA
nhắm đến 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à một thiết bị phải có trước khi gói OTA có thể cài đặt. Chiến lược phát hành đĩa đơn
Các giá trị post-build-incremental
và post-build
xác định trạng thái của thiết bị
sẽ có sau khi cài đặt gói OTA. Các giá trị của pre-
và
Các trường post-
được lấy từ các thuộc tính bản dựng tương ứng sau đây.
- Giá trị
pre-device
được lấy từ thuộc tính bản dựngro.product.device
. - Các giá trị
pre-build-incremental
vàpost-build-incremental
được suy ra qua thuộc tính bản dựngro.build.version.incremental
. - Các giá trị
pre-build
vàpost-build
bắt nguồn 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ác công cụ OTA để chỉ định đường dẫn đến một 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. Sau đó, dữ liệu này được dùng để cập nhật siêu dữ liệu OTA để đưa vào
tên thiết bị và vân tay trong điều kiện pre-
và post-
(sử dụng phương thức
ký tự gạch đứng | làm dấu phân cách). Cờ --boot_variable_file
có
có cú pháp và mô tả sau.
- Cú pháp:
--boot_variable_file <path>
- Mô tả: Chỉ định đường dẫn đến một tệp có chứa các giá trị có thể có của
ro.boot.*
thuộc tính. Dùng để tính toán vân tay số 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 này 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:prop_name=value1,value2
.
Ví dụ: khi thuộc tính là ro.boot.product.hardware.sku=std,pro
, phương thức
Siêu dữ liệu OTA cho các thiết bị tardis
và tardispro
như minh hoạ dưới đây.
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 tài liệu tham khảo
triển khai.
Danh sách thay đổi này sẽ phân tích cú pháp câu lệnh import
trong build.prop
theo cách có điều kiện
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.