Thiết Lập Phiên Bản Lunch Mới và Tối Ưu Hóa Fingerprint Trong Hệ Thống Build Android

Khi triển khai các dự án Android dựa trên nền tảng SDK của SoC nhà sản xuất, đặc biệt là trong mô hình GRF (Google Requirements Freeze), việc quản lý cấu hình build đóng vai trò quan trọng. Cơ chế này yêu cầu SoC sau khi được khóa tính năng ở một phiên bản Android nhất định thì sẽ duy trì ổn định qua ít nhất 4 thế hệ nâng cấp tiếp theo, giảm thiểu tác động lên vendor.

Cấu trúc nguồn và quy trình hợp nhất

Đối với các chip hỗ trợ GRF, quy trình xây dựng firmware bao gồm hai bước chính:

  1. Bán kính thấp (BSP/Vendor): Sử dụng SDK GRF để compile các thành phần liên quan đến phần cứng.
  2. Bán kính cao (Frameworks/App): Compile các thành phần ứng dụng và framework hệ thống.

Sau đó, hai phần này sẽ được merge lại để tạo ra bản build hoàn chỉnh phục vụ cho mục đích thử nghiệm hoặc thương mại hóa.

Danh sách hỗ trợ

Đối với dòng chip Rockchip phổ biến, khả năng tương thích với chuẩn GRF Android 15+ như sau:

Chip Set Phiên bản GRF Android 15+ Android 16+ Android 17+
RK332614Hỗ trợHỗ trợHỗ trợ
RK356x14Hỗ trợHỗ trợHỗ trợ
RK358814Hỗ trợHỗ trợHỗ trợ
RK339914Hỗ trợHỗ trợHỗ trợ

Từ Android 15 trở đi, cấu trúc thư mục nguồn thường được phân chia thành hai kho lưu trữ riêng biệt: tầng dưới (urelease) và tầng trên (vrelease). Do đó, việc thêm một tùy chọn lunch mới cần đồng thời cập nhật cả hai nơi.

1. Thực hiện thêm tùy chọn Lunch

1.1. Tại thư mục Urelease

Bạn cần chỉnh sửa file định nghĩa làm việc chính tại đường dẫn thiết bị. File AndroidProducts.mk là điểm khởi đầu quan trọng để khai báo các tập tin sản phẩm và danh sách lựa chọn.

# Đường dẫn root là .\urelease\device\rockchip\rk3588\

PRODUCT_MAKEFILES := \
    $(LOCAL_DIR)/rk3588_s/rk3588_s.mk \
    $(LOCAL_DIR)/rk3588_t/rk3588_t.mk \
    $(LOCAL_DIR)/rk3588_u/rk3588_u.mk \
# Thêm dòng mới sau đây
    $(LOCAL_DIR)/my_variant/custom_variant.mk \

COMMON_LUNCH_CHOICES := \
    rk3588_s-userdebug \
    rk3588_s-user \
    rk3588_t-userdebug \
    rk3588_t-user \
    rk3588_u-userdebug \
    rk3588_u-user \
# Thêm dòng mới vào đây
    my_variant-userdebug \
    my_variant-user

Tiếp theo, sao chép toàn bộ thư mục của một cấu hình đã có sẵn (ví dụ: rk3588_u) và đặt tên mới (ví dụ: custom_variant). Sau đó, sửa đổi file .mk chính bên trong thư mục đó:

# File: custom_variant.mk

PRODUCT_SHIPPING_API_LEVEL := 35
PRODUCT_DTBO_TEMPLATE := $(LOCAL_PATH)/dt-overlay.in

include device/rockchip/common/build/rockchip/DynamicPartitions.mk
# Thay đổi đường dẫn include BoardConfig
include device/rockchip/rk3588/custom_variant/BoardConfig.mk 
include device/rockchip/common/BoardConfig.mk

DEVICE_PACKAGE_OVERLAYS += $(LOCAL_PATH)/../overlay

# Cấu hình đặc điểm thiết bị
PRODUCT_CHARACTERISTICS := tablet
PRODUCT_NAME := custom_variant
PRODUCT_DEVICE := custom_variant
PRODUCT_MODEL := rk3588_sample

# Các thuộc tính mặc định khác
PRODUCT_PROPERTY_OVERRIDES += ro.sf.lcd_density=320
PRODUCT_PROPERTY_OVERRIDES += persist.wifi.sleep.delay.ms=0

$(call inherit-product, vendor/partner_modules/build/mainline_modules.mk)

Lưu ý: Tham số PRODUCT_DEVICE phải khớp với tên mà bạn sử dụng trong lệnh lunch. Nếu không khớp, quá trình biên dịch sẽ thất bại.

1.2. Tại thư mục Vrelease

Tương tự như tầng dưới, tại thư mục vrelease, bạn cũng cần bổ sung mục cấu hình mới vào file AndroidProducts.mk. Sự khác biệt nằm ở cách tham chiếu các biến, ví dụ như sự tồn tại của biến ap4a trong một số trường hợp cụ thể, hãy đảm bảo cú pháp tuân thủ đúng chuẩn định dạng của dự án.

Để kiểm tra kết quả, chạy lệnh lunch trên terminal. Bạn sẽ thấy tùy chọn mới xuất hiện trong danh sách:

Các cấu hình có sẵn:
1. custom_variant-user
2. custom_variant-userdebug
...

Với các nền tảng không phải Rockchip, nguyên tắc vẫn giữ nguyên: tìm đến vị trí tương ứng trong cây thư mục nguồn và điều chỉnh file cấu hình tương ứng.

2. Tùy chỉnh chuỗi Fingerprint

Fingerprint (chữ ký nhận dạng) là chuỗi định danh duy nhất dùng cho máy chủ OTA và xác minh phiên bản build. Logic sinh ra chuỗi này nằm trong file core/sysprop.mk:

ifeq (,$(strip $(BUILD_FINGERPRINT)))
  BUILD_FINGERPRINT := $(PRODUCT_BRAND)/$(TARGET_PRODUCT)/$(TARGET_DEVICE):$(PLATFORM_VERSION)/$(BUILD_ID)/$(BUILD_NUMBER_FROM_FILE):$(TARGET_BUILD_VARIANT)/$(BUILD_VERSION_TAGS)
endif

Chuỗi kết quả được xây dựng dựa trên sự kết hợp của các biến sau:

  • PRODUCT_BRAND: Thương hiệu thiết bị (thường được đặt trong file .mk).
  • TARGET_PRODUCT: Tên sản phẩm mục tiêu (được chọn khi chạy menu lunch).
  • TARGET_DEVICE: Mã thiết bị mục tiêu (cần cập nhật lại khi tạo lunch mới).
  • PLATFORM_VERSION: Số version nền tảng Android (ví dụ: 14, 15).
  • BUILD_ID: Ký hiệu định danh xây dựng cụ thể.
  • BUILD_NUMBER_FROM_FILE: Số đếm chi tiết xác định phiên bản.
  • TARGET_BUILD_VARIANT: Loại bản build (eng, userdebug, user).
  • BUILD_VERSION_TAGS: Thẻ bảo mật (dev-keys, release-keys).

Thẻ: android-build lunch-option fingerprint rockchip-software grf-specs

Đăng vào ngày 6 tháng 10 lúc 00:07