Khi khởi động, thiết bị Android 16 (trở lên) sẽ chuyển sang chế độ thu mua. Chế độ này cho phép bạn kết nối với thiết bị bằng adb và dùng một lệnh để lấy thông tin về thiết bị. Thiết bị phải đáp ứng các điều kiện tiên quyết sau đây để chuyển sang chế độ đổi cũ lấy mới:
- Bạn phải đặt lại thiết bị về trạng thái ban đầu.
- Thiết bị không được có dịch vụ di động.
- Thiết bị không được có kết nối hoặc tài khoản đã thiết lập.
- Thiết bị phải đang chạy một bản dựng không thể gỡ lỗi.
Chế độ đổi cũ lấy mới cho phép bạn truy vấn thông tin chẩn đoán cơ bản hoặc chuyển sang chế độ đánh giá. Chế độ này cho phép bạn thực hiện đầy đủ các lệnh adb và chạy các quy trình chẩn đoán bổ sung trên thiết bị.
Thu thập thông tin chung về sức khoẻ
Để thu thập thông tin sức khoẻ chung cho thiết bị của bạn, chẳng hạn như thông tin về pin, tình trạng bộ nhớ và số nhận dạng thiết bị di động quốc tế (IMEI), hãy làm theo các bước sau:
Đảm bảo thiết bị của bạn đáp ứng các điều kiện tiên quyết để chuyển dữ liệu ở chế độ đổi cũ lấy mới.
Cắm thiết bị vào máy trạm.
Trên máy trạm, hãy chạy lệnh sau:
adb shell tradeinmode getstatus
Lệnh này trả về một đối tượng JSON chứa thông tin về thiết bị. Sau đây là ví dụ về đầu ra từ Pixel 7:
{ "battery": { "cycle_count": 16, "health": 100, "state": 2, "manufacturing_date": 1653004800, "first_usage_date": 0 }, "storage": { "useful_lifetime_remaining": 99, "capacity_bytes": "128000000000" }, "launch_level": 33, "locks": { "factory_reset_protection": false }, "product": { "brand": "google", "device": "panther", "manufacturer": "Google", "model": "Pixel 7", "name": "panther" }, "imeis": [ "353644930127905", "353644930127913" ], "serial": "26061FDH2000AP" }
Nếu bạn đặt
factory_reset_protection
thànhtrue
, thì thiết bị sẽ được bảo mật và không thể đặt lại. Nếu không đặt lại được, thì không thể đánh giá thiết bị.
Xác định trạng thái của hệ điều hành Android
Để thu thập thông tin về trạng thái của hệ điều hành Android (chẳng hạn như liệu đó có phải là bản dựng được phê duyệt hay không), hãy làm theo các bước sau:
- Cắm thiết bị vào máy trạm.
- Đảm bảo thiết bị có kết nối Internet.
Trên máy trạm, hãy chạy lệnh sau:
adb shell tradeinmode getstatus --challenge CHALLENGE
CHALLENGE là một chuỗi dạng chữ và số được tạo ngẫu nhiên, chẳng hạn như
p4tRsuHjWB
. Lệnh này trả về JSON, bao gồm một trường chứng thực chứa bản ghi chứng thực base64.Lệnh này sẽ thêm thông tin chứng thực vào thông tin do lệnh
getstatus
trả về. Thông tin chứng thực có dạng như sau:"attestation": { "certificates": "AAAC\/DCCAvgwggKeoAMCAQICAQEwCgYIKoZIzj0EAwIwOTEMMAoGA1UEDAwDVEVFMSkwJwYDVQQF\n EyBmOTIyZTZhOWFkZmRjNjU0NmZiOWU1YmNlNzhiMDUzMzAeFw03MDAxMDEwMDAwMDBaFw00ODAx\n MDEwMDAwMDBaMB8xHTAbBgNVBAMTFEFuZHJvaWQgS2V5c3RvcmUgS2V5MFkwEwYHKoZIzj0CAQYI\n KoZIzj0DAQcDQgAEz9un3HpDJQy\/j7l0bWzw6WnRRMjFjvu6rg7+dCzFW93u+
otCPK4VjmSjyYw ... }Thiết bị chạy Android 16 trở lên cần có kết nối Internet để tạo bản ghi chứng thực. Bạn nên thực hiện chứng thực ở chế độ đánh giá, sau khi định cấu hình một kết nối, vì chứng thực sẽ không thành công nếu được thực hiện trong trình hướng dẫn thiết lập.
Phân tích cú pháp thông tin chứng thực bằng một trong các phương thức sau:
- Sử dụng công cụ
parse_tim_attestation
được tạo khi bạn tạo AOSP. - Sử dụng thư viện chứng thực khoá Android.
Ví dụ: để sử dụng công cụ
parse_tim_attestation
, hãy chạy:parse_tim_attestation --challenge CHALLENGE output_file
CHALLENGE phải là chính thử thách mà bạn đã dùng để lấy thông tin chứng thực.
Nếu đã lưu đầu ra của bước 2 vào một output_file, bạn có thể cung cấp tên tệp đó. Nếu không, thông tin chứng thực sẽ được đọc từ stdin.
Một đối tượng JSON chứa thông tin về hệ điều hành Android sẽ được trả về:
"record": { "keymaster_version": "400", "keymaster_security_level": "TRUSTED_ENVIRONMENT", "attributes": { "imeis": [ "353644930125669", "353644930125677" ], "vendor_patch_level": 20250305, "serial": "26161FDH2000NV", "os_version": 160000, "source": "hardware", "boot_patch_level": 20250305 }, "
bootloader_locked": false, "verified_boot": false, "security_level": "TRUSTED_ENVIRONMENT" }, "certificate": "verified", "trustworthy": "verified boot disabled"Nếu
trustworthy
bằngyes
, thì hệ điều hành được coi là đáng tin cậy; bản dựng được ký và IMEI không bị giả mạo.Xin lưu ý rằng bạn cần có kết nối Internet để thực hiện chứng thực, cả trên thiết bị và trên máy chủ.
- Sử dụng công cụ
Chế độ kiểm thử đổi cũ lấy mới
Trong quá trình phát triển, bạn nên kiểm thử thiết bị để đảm bảo thiết bị vào và thoát khỏi chế độ thu cũ đổi mới đúng cách. Làm theo các bước sau để kiểm tra khả năng vào và thoát khỏi chế độ thu cũ đổi mới của thiết bị:
Cắm thiết bị vào máy trạm.
Trên máy trạm, hãy khởi động lại thiết bị ở chế độ thu mua:
adb shell tradeinmode testing start
Thiết bị sẽ khởi động lại và chuyển sang chế độ đổi cũ lấy mới. Sau khi chuyển sang chế độ đổi trả một phần, bạn có thể dùng bất kỳ lệnh
adb shell tradein
nào.Đảm bảo chế độ đổi trả đang hoạt động:
adb shell tradeinmode testing status
Thiết bị xác định rằng chế độ kiểm thử chuyển đổi có hỗ trợ thu cũ đang hoạt động.
Thoát chế độ đổi cũ lấy mới và khôi phục toàn quyền truy cập adb:
adb shell tradeinmode testing stop
Tích hợp trình hướng dẫn thiết lập tuỳ chỉnh
Lệnh evaluate
sẽ không hoạt động trên các thiết bị có trình hướng dẫn thiết lập tuỳ chỉnh, trừ phi bạn thêm một bộ nhận tín hiệu truyền tin. Cách thêm broadcast receiver vào ứng dụng trình hướng dẫn thiết lập tuỳ chỉnh:
Khai báo một trình nhận trong tệp kê khai ứng dụng:
<receiver android:name=".EnterEvaluationModeReceiver" android:exported="true" android:permission="android.permis>sio<n.ENTER_TRADE>_IN_M<ODE" intent-filter action android:name="com.google.android>.setu<pwizard.ENTER_TRADE_IN_MODE" / category android:>nam<e="androi>d<.intent.c>a
tegory.DEFAULT" / /intent-filter /receiverTạo một broadcast receiver tương tự như sau:
public class EnterEvaluationModeReceiver extends BroadcastReceiver { private static final String TRADE_IN_MODE_PROPERTY = "persist.adb.tradeinmode"; private static final int TIM_EVALUATION_MODE = 2; @Override public void onReceive(Context context, Intent intent) { if (SystemProperties.getInt(TRADE_IN_MODE_PROPERTY, 0) != TIM_EVALUATION_MODE) { return; } // Check if any factory reset protection is enabled. // Provision the device. // End the setup wizard activ
ity. } }
Người nhận phải thực hiện các thao tác sau theo thứ tự.
- Kiểm tra để đảm bảo rằng
persist.adb.tradeinmode
là2
. - Kiểm tra để đảm bảo không có chế độ bảo vệ khi đặt lại về trạng thái ban đầu hoặc khoá chống trộm.
- Cung cấp dữ liệu cho thiết bị, đảm bảo rằng
Settings.Secure.USER_SETUP_COMPLETE
vàSettings.Global.DEVICE_PROVISIONED
là1
. - Đóng hoạt động của trình hướng dẫn thiết lập để thiết bị ở màn hình chính.
Tài liệu tham khảo về chế độ đổi cũ lấy mới
Phần này giải thích tất cả các lệnh ở chế độ đổi cũ lấy mới.
đánh giá
adb shell tradeinmode evaluate
Chuyển sang chế độ đánh giá bằng cách bỏ qua trình hướng dẫn thiết lập như thể người dùng đã bỏ qua mọi màn hình thiết lập theo cách thủ công.
Sau khi bỏ qua trình hướng dẫn thiết lập, bạn có thể chạy các lệnh ADB bổ sung hoặc kiểm thử chức năng trên thiết bị.
Sau khi bạn thoát khỏi chế độ đánh giá, hệ thống sẽ khôi phục cài đặt gốc để đảm bảo không có hiện vật nào từ quá trình kiểm thử vô tình được chuyển cho khách hàng.
getstatus
adb shell tradeinmode getstatus [--challenge CHALLENGE]
Trả về một chuỗi JSON có thông tin hệ thống, bao gồm cả thông tin về tình trạng pin và bộ nhớ của thiết bị.
Thêm tham số --challenge
, theo sau là một khoá thử thách gồm chữ và số được tạo ngẫu nhiên để trả về một trường chứng thực bổ sung. Phân tích cú pháp phản hồi này để xác định thông tin chính về hệ điều hành, chẳng hạn như trạng thái của trình tải khởi động (đã khoá hoặc chưa khoá) và tính hợp lệ của số sê-ri IMEI.
poweroff
adb shell tradeinmode poweroff
Tắt nguồn thiết bị. Sử dụng lệnh này để tránh hao pin trong khi thiết bị không được kiểm thử hoặc đánh giá tích cực.
khởi động lại
adb shell tradeinmode reboot
Khởi động lại thiết bị.
bắt đầu kiểm thử
adb shell tradeinmode testing start
Khởi động lại thiết bị ở chế độ đổi cũ lấy mới. Lệnh này chỉ hoạt động trong trình hướng dẫn thiết lập. Sau khi bạn đưa ra lệnh này, quá trình uỷ quyền sẽ bị bỏ qua và chỉ các lệnh ở chế độ đổi cũ mới hoạt động.
Lệnh này chỉ hoạt động trên các thiết bị có bản dựng userdebug
, eng
hoặc user
. Bản dựng user
phải được đặt thành ro=debuggable=1
.
trạng thái kiểm thử
adb shell tradeinmode testing status
Xác định xem chế độ kiểm thử trao đổi có đang hoạt động hay không.
Lệnh này chỉ hoạt động trên các thiết bị có bản dựng userdebug
, eng
hoặc user
. Bản dựng user
phải được đặt thành ro=debuggable=1
.
testing stop
adb shell tradeinmode testing stop
Đưa thiết bị về chế độ trước khi bạn phát lệnh adb shell tradeinmode testing start
.
Lệnh này chỉ hoạt động trên các thiết bị có bản dựng userdebug
, eng
hoặc user
. Bản dựng user
phải được đặt thành ro=debuggable=1
.
kiểm thử xoá sạch
adb shell tradeinmode testing wipe
Đặt lại thiết bị về trạng thái ban đầu.
Lệnh này chỉ hoạt động trên các thiết bị có bản dựng userdebug
, eng
hoặc user
. Bản dựng user
phải được đặt thành ro=debuggable=1
.
wait-until-ready
adb shell tradeinmode wait-until-ready
Chờ cho đến khi các dịch vụ hệ thống sẵn sàng để chế độ thu cũ đổi mới có thể hoạt động đầy đủ. Sử dụng lệnh này trong quy trình tự động hoá để đảm bảo các lệnh ở chế độ đổi cũ lấy mới hoạt động thành công.
Bạn có thể thêm wait-until-ready
trước các lệnh khác của chế độ thu cũ đổi mới. Ví dụ: sau đây là wait-until-ready
được liên kết với getstatus
:
adb shell tradeinmode wait-until-ready getstatus