Google cam kết thúc đẩy công bằng chủng tộc cho Cộng đồng người da đen. Xem cách thực hiện.

Xây dựng các gói OTA

Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.

Bạn có thể sử dụng công cụ ota_from_target_files được cung cấp trong build/make/tools/releasetools để tạo các gói OTA đầy đủ và gia tăng cho các thiết bị sử dụng các 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 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ể tạo một gói OTA cho nhiều thiết bị với các SKU khác nhau. Làm như vậy đòi hỏi phải định cấu hình các thiết bị mục tiêu để sử dụng dấu vân tay độngcậ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 trước và sau điều kiện.

Các gói OTA dựa trên tệp của Android 8.0 không được dùng nữa 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 dựa trên khối hoặc thiết bị 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à một 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 một gói OTA đầy đủ (trong $OUT ). Tệp .zip kết quả chứa mọi thứ cần thiết để tạo 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 tệp nhị phân python và gọi nó để tạo gói đầy đủ hoặc gói gia tăng.

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à tệp nhị phân python kết quả 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 thử nghiệm). Đối với thiết bị của người dùng, hãy tạo và sử dụng khóa cá nhân của riêng bạn như được nêu chi tiết trong các bản dựng Đăng ký để 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 đối với dữ liệu đã có trên thiết bị. Các gói có 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 của chúng, nên gói chỉ cần bao gồm mã hóa 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. Để tạo bản cập nhật gia tăng, bạn cần tệp target_files.zip từ bản dựng trước (bản bạn muốn cập nhậ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 sử 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 tạo bằng make dist , được flash bằng fastboot update ), thay vì những hình trong thư mục PRODUCT_OUT (được xây dựng bằng make , mà sẽ được flash bằng fastboot flashall ). Cố gắng cài đặt gói gia tăng trên một thiết bị có một số bản dựng khác dẫn đến lỗi cài đặt. Khi cài đặt không thành công, thiết bị vẫn ở trạng thái hoạt động như cũ (chạy hệ thống cũ); gói 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, vì vậy 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 bắt kịp bản phát hành mới nhất và tránh một chuỗi cài đặt dài 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 duy nhất cho nhiều thiết bị có SKU khác nhau. Làm như vậy đòi hỏi phải định cấu hình thiết bị đích để 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 đ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à một 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ỳ sự kết hợp nào của các thông số xây dựng được CDD phê duyệt cho một SKU trong khi cũng 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ể chung 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, 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 ra 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. Quy trình này đơn giản hóa quy trình phát triển nền tảng, cho phép các thiết bị có tùy chỉnh nhỏ nhưng có tên sản phẩm khác nhau có thể chia sẻ hình ảnh chung (chẳng hạn như tardistardispro ).

Sử dụng dấu vân tay động

Tệp tham chiếu là một tập hợp được xác định của các tham số xây dựng như ro.product.brand , ro.product.namero.product.device . Vân tay của một thiết bị được lấy từ vân tay của phân vùng hệ thống và được sử dụng làm mã nhận dạng duy nhất của các 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 build.prop của thiết bị để nhận giá trị của các biến bộ nạp khởi động 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ị tardistardispro , hãy cập nhật các tệp sau như hình 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 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 các giá trị tên thiết bị, vân tay và ro.build.fingerprint dựa trên giá trị của thuộc tính bootloader 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 trước và điều kiện sau của gói OTA. Ví dụ: mã sau 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 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-incrementalpost-build xác định trạng thái mà một thiết bị dự kiến ​​sẽ có sau khi cài đặt gói OTA. Giá trị của các trường pre-post- được lấy từ các thuộc tính xây dựng tương ứng sau đây.

  • Giá trị pre-device được lấy từ thuộc tính bản dựng ro.product.device .
  • Các giá trị pre-build-incrementalpost-build-incremental được bắt nguồn từ thuộc tính xây dựng ro.build.version.incremental .
  • Các giá trị xây dựng pre-buildpost-build được lấy từ thuộc tính bản dựng ro.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 sử 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 để bao gồm tên thiết bị và dấu vân tay trong điều kiện pre-post- (sử dụng ký tự ống dẫn | 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 sử dụng để tính toán các dấu vân tay thời gian chạy có thể có khi một số thuộc tính ro.product.* ghi đè bởi câu lệnh nhập. 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ị tardistardispro như được 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 phần triển khai tài liệu 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 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.