เมื่ออุปกรณ์ Android 16 (หรือเวอร์ชันที่ใหม่กว่า) เริ่มทำงาน ระบบจะเข้าสู่โหมดการแลกซื้อ ซึ่งจะช่วยให้คุณเชื่อมต่อกับอุปกรณ์โดยใช้ adb และใช้คำสั่งเพื่อรับข้อมูลเกี่ยวกับอุปกรณ์ได้ อุปกรณ์ต้องมีคุณสมบัติตรงตามเงื่อนไขเบื้องต้นต่อไปนี้จึงจะเข้าสู่โหมดแลกซื้อเครื่องใหม่ได้
- อุปกรณ์ต้องรีเซ็ตเป็นค่าเริ่มต้น
- อุปกรณ์ต้องไม่มีบริการเครือข่ายมือถือ
- อุปกรณ์ต้องไม่มีการเชื่อมต่อหรือสร้างบัญชีไว้
- อุปกรณ์ต้องใช้บิลด์ที่แก้ไขข้อบกพร่องไม่ได้
หลังจากไปยังส่วนต่างๆ ของวิซาร์ดการตั้งค่าแล้ว อุปกรณ์จะอยู่ในโหมดการประเมิน ซึ่งจะช่วยให้คุณใช้คําสั่ง adb ได้ครบทุกรูปแบบและทําการวินิจฉัยเพิ่มเติมในอุปกรณ์
รวบรวมข้อมูลสุขภาพทั่วไป
หากต้องการรวบรวมข้อมูลด้านสุขภาพทั่วไปของอุปกรณ์ เช่น ข้อมูลเกี่ยวกับแบตเตอรี่ ประสิทธิภาพของพื้นที่เก็บข้อมูล และหมายเลข International Mobile Equipment Identity (IMEI) ให้ทำตามขั้นตอนต่อไปนี้
ตรวจสอบว่าอุปกรณ์เป็นไปตามเงื่อนไขเบื้องต้นสำหรับโหมดการแลกซื้อ
เสียบอุปกรณ์เข้ากับเวิร์กสเตชัน
จากเวิร์กสเตชัน ให้เรียกใช้คำสั่งต่อไปนี้
adb shell tradeinmode getstatus
คำสั่งนี้จะแสดงผลออบเจ็กต์ JSON ที่มีข้อมูลเกี่ยวกับอุปกรณ์ ตัวอย่างเอาต์พุตจาก 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" }
หากตั้งค่า
factory_reset_protection
เป็นtrue
แสดงว่าอุปกรณ์ปลอดภัยและรีเซ็ตไม่ได้ หากรีเซ็ตอุปกรณ์ไม่ได้ ก็จะประเมินไม่ได้
ระบุสถานะระบบปฏิบัติการ Android
หากต้องการรวบรวมข้อมูลเกี่ยวกับสถานะของระบบปฏิบัติการ Android เช่น ว่าเป็นบิลด์ที่ได้รับอนุมัติหรือไม่ ให้ทำตามขั้นตอนต่อไปนี้
- เสียบอุปกรณ์เข้ากับเวิร์กสเตชัน
- ตรวจสอบว่าอุปกรณ์มีการเชื่อมต่ออินเทอร์เน็ต
จากเวิร์กสเตชัน ให้เรียกใช้คำสั่งต่อไปนี้
adb shell tradeinmode getstatus --challenge CHALLENGE
CHALLENGE คือสตริงตัวอักษรและตัวเลขคละกันที่สร้างขึ้นแบบสุ่ม เช่น
p4tRsuHjWB
คำสั่งนี้จะแสดงผล JSON รวมถึงช่องการรับรองที่มีระเบียนการรับรอง Base64คำสั่งนี้จะเพิ่มข้อมูลการรับรองต่อท้ายข้อมูลที่แสดงผลโดยคำสั่ง
getstatus
ข้อมูลการรับรองจะมีลักษณะดังนี้"attestation": { "certificates": "AAAC\/DCCAvgwggKeoAMCAQICAQEwCgYIKoZIzj0EAwIwOTEMMAoGA1UEDAwDVEVFMSkwJwYDVQQF\n EyBmOTIyZTZhOWFkZmRjNjU0NmZiOWU1YmNlNzhiMDUzMzAeFw03MDAxMDEwMDAwMDBaFw00ODAx\n MDEwMDAwMDBaMB8xHTAbBgNVBAMTFEFuZHJvaWQgS2V5c3RvcmUgS2V5MFkwEwYHKoZIzj0CAQYI\n KoZIzj0DAQcDQgAEz9un3HpDJQy\/j7l0bWzw6WnRRMjFjvu6rg7+dCzFW93u+otCPK4VjmSjyYw ... }
อุปกรณ์ที่เปิดตัวด้วย Android 16 ขึ้นไปจำเป็นต้องมีการเชื่อมต่ออินเทอร์เน็ตเพื่อสร้างระเบียนการรับรอง การรับรองควรดำเนินการในโหมดการประเมินหลังจากกำหนดค่าการเชื่อมต่อแล้ว เนื่องจากจะดำเนินการในวิซาร์ดการตั้งค่าไม่ได้
แยกวิเคราะห์ข้อมูลการรับรองโดยใช้วิธีใดวิธีหนึ่งต่อไปนี้
- ใช้เครื่องมือ
parse_tim_attestation
ที่สร้างขึ้นเมื่อคุณสร้าง AOSP - ใช้ไลบรารีการรับรองคีย์ของ Android
เช่น หากต้องการใช้เครื่องมือ
parse_tim_attestation
ให้เรียกใช้คำสั่งต่อไปนี้parse_tim_attestation --challenge CHALLENGE output_file
CHALLENGE ต้องเป็นคำถามเดียวกันกับที่คุณใช้รับข้อมูลการรับรอง
หากบันทึกเอาต์พุตของขั้นตอนที่ 2 ลงใน output_file ให้ระบุชื่อไฟล์นั้น มิฉะนั้น ระบบจะอ่านข้อมูลการรับรองจาก stdin
ระบบจะแสดงผลออบเจ็กต์ JSON ที่มีข้อมูลระบบปฏิบัติการ Android ดังนี้
"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"
หาก
trustworthy
เท่ากับyes
ระบบจะถือว่าระบบปฏิบัติการเชื่อถือได้ บิลด์ได้รับการรับรอง และ IMEI ไม่ได้ถูกปลอมแปลงโปรดทราบว่าต้องมีการเชื่อมต่ออินเทอร์เน็ตเพื่อดำเนินการรับรองทั้งบนอุปกรณ์และบนโฮสต์
- ใช้เครื่องมือ
โหมดทดสอบการแลกซื้อเครื่องใหม่
ในระหว่างการพัฒนา คุณควรทดสอบอุปกรณ์เพื่อให้แน่ใจว่าอุปกรณ์เข้าสู่และออกจากโหมดการแลกซื้ออย่างถูกต้อง ทำตามขั้นตอนต่อไปนี้เพื่อทดสอบความสามารถของอุปกรณ์ในการเข้าและออกจากโหมดการแลกซื้อ
เสียบอุปกรณ์เข้ากับเวิร์กสเตชัน
จากเวิร์กสเตชัน ให้รีบูตอุปกรณ์เป็นโหมดการแลกซื้อโดยทำดังนี้
adb shell tradeinmode testing start
อุปกรณ์จะรีบูตและเข้าสู่โหมดแลกซื้อเครื่องใหม่ หลังจากเข้าสู่โหมดการแลกซื้อ คุณจะสามารถใช้คำสั่ง
adb shell tradein
ใดก็ได้ตรวจสอบว่าโหมดการแลกซื้ออุปกรณ์ใหม่ทำงานอยู่
adb shell tradeinmode testing status
อุปกรณ์ระบุว่าการทดสอบโหมดการแลกซื้ออุปกรณ์ใหม่ทำงานอยู่
ออกจากโหมดแลกซื้อเครื่องใหม่และคืนค่าสิทธิ์เข้าถึง adb โดยสมบูรณ์ โดยทำดังนี้
adb shell tradeinmode testing stop
การผสานรวมวิซาร์ดการตั้งค่าที่กำหนดเอง
คำสั่ง evaluate
จะใช้ไม่ได้ในอุปกรณ์ที่มีวิซาร์ดการตั้งค่าที่กำหนดเอง เว้นแต่จะมีการเพิ่มตัวรับการออกอากาศ วิธีเพิ่มตัวรับการออกอากาศลงในแอปวิซาร์ดการตั้งค่าที่กำหนดเอง
ประกาศตัวรับในไฟล์ Manifest ของแอป
<receiver android:name=".EnterEvaluationModeReceiver" android:exported="true" android:permission="android.permission.ENTER_TRADE_IN_MODE"> <intent-filter> <action android:name="com.google.android.setupwizard.ENTER_TRADE_IN_MODE" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver>
สร้างตัวรับการออกอากาศที่คล้ายกับตัวอย่างต่อไปนี้
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 activity. } }
ผู้รับต้องดำเนินการต่อไปนี้ตามลำดับ
- ตรวจสอบว่า
persist.adb.tradeinmode
เป็น2
- ตรวจสอบว่าไม่มีการป้องกันการรีเซ็ตเป็นค่าเริ่มต้นหรือล็อกป้องกันการโจรกรรม
- จัดสรรอุปกรณ์โดยตรวจสอบว่า
Settings.Secure.USER_SETUP_COMPLETE
และSettings.Global.DEVICE_PROVISIONED
เป็น1
- ปิดกิจกรรมของวิซาร์ดการตั้งค่าเพื่อให้อุปกรณ์ไปที่หน้าจอหลัก
ข้อมูลอ้างอิงสำหรับโหมดแลกซื้อเครื่องใหม่
ส่วนนี้จะอธิบายคำสั่งทั้งหมดในโหมดการแลกซื้อ
ประเมิน
adb shell tradeinmode evaluate
เข้าสู่โหมดการประเมินโดยข้ามวิซาร์ดการตั้งค่า ราวกับว่าผู้ใช้ข้ามหน้าจอการตั้งค่าทุกหน้าจอด้วยตนเอง
หลังจากข้ามวิซาร์ดการตั้งค่าแล้ว คุณจะเรียกใช้คําสั่ง ADB เพิ่มเติมหรือทดสอบฟังก์ชันการทำงานในอุปกรณ์ได้
หลังจากออกจากโหมดการประเมิน ระบบจะรีเซ็ตเป็นค่าเริ่มต้นเพื่อให้มั่นใจว่าไม่มีการส่งอาร์ติแฟกต์จากการทดสอบไปยังลูกค้าโดยไม่ตั้งใจ
getstatus
adb shell tradeinmode getstatus [--challenge CHALLENGE]
แสดงผลสตริง JSON ที่มีข้อมูลระบบ รวมถึงข้อมูลประสิทธิภาพการทำงานแบตเตอรี่และพื้นที่เก็บข้อมูลของอุปกรณ์
ใส่พารามิเตอร์ --challenge
ตามด้วยคีย์คำขอยืนยันแบบผสมอักขระและตัวเลขที่สร้างขึ้นแบบสุ่มเพื่อแสดงผลช่องการรับรองเพิ่มเติม แยกวิเคราะห์การตอบกลับนี้เพื่อระบุข้อมูลสำคัญเกี่ยวกับระบบปฏิบัติการ เช่น สถานะของโปรแกรมบูต (ล็อกหรือปลดล็อก) และการตรวจสอบความถูกต้องของหมายเลขซีเรียล IMEI
poweroff
adb shell tradeinmode poweroff
ปิดอุปกรณ์ ใช้คำสั่งนี้เพื่อป้องกันไม่ให้แบตเตอรี่หมดขณะที่อุปกรณ์ไม่ได้อยู่ระหว่างการทดสอบหรือประเมิน
รีบูต
adb shell tradeinmode reboot
รีบูตอุปกรณ์
เริ่มการทดสอบ
adb shell tradeinmode testing start
รีบูตอุปกรณ์ให้อยู่ในโหมดแลกซื้อเครื่องใหม่ คำสั่งนี้ใช้ได้ภายในวิซาร์ดการตั้งค่าเท่านั้น เมื่อใช้คำสั่งนี้ ระบบจะข้ามการให้สิทธิ์และเฉพาะคำสั่งโหมดการแลกซื้อเท่านั้นที่จะใช้งานได้
คำสั่งนี้ใช้ได้เฉพาะในอุปกรณ์ที่มีรุ่น userdebug
, eng
หรือ user
เท่านั้น บิลด์ user
ต้องมีการตั้งค่า ro=debuggable=1
สถานะการทดสอบ
adb shell tradeinmode testing status
ระบุว่าการทดสอบโหมดการแลกซื้ออุปกรณ์ใหม่ทำงานอยู่หรือไม่
คำสั่งนี้ใช้ได้เฉพาะในอุปกรณ์ที่มีรุ่น userdebug
, eng
หรือ user
เท่านั้น บิลด์ user
ต้องมีการตั้งค่า ro=debuggable=1
จุดจอดรถ
adb shell tradeinmode testing stop
เปลี่ยนอุปกรณ์กลับไปยังโหมดก่อนหน้าที่คุณออกคำสั่ง adb shell tradeinmode testing start
คำสั่งนี้ใช้ได้เฉพาะในอุปกรณ์ที่มีรุ่น userdebug
, eng
หรือ user
เท่านั้น บิลด์ user
ต้องมีการตั้งค่า ro=debuggable=1
การล้างข้อมูลเพื่อทดสอบ
adb shell tradeinmode testing wipe
รีเซ็ตอุปกรณ์เป็นค่าเริ่มต้น
คำสั่งนี้ใช้ได้เฉพาะในอุปกรณ์ที่มีรุ่น userdebug
, eng
หรือ user
เท่านั้น บิลด์ user
ต้องมีการตั้งค่า ro=debuggable=1
wait-until-ready
adb shell tradeinmode wait-until-ready
รอจนกว่าบริการของระบบจะพร้อมใช้งานเพื่อให้โหมดการแลกซื้อทำงานได้อย่างเต็มรูปแบบ ใช้คําสั่งนี้ภายในการทำงานอัตโนมัติเพื่อให้แน่ใจว่าคําสั่งโหมดการแลกซื้อจะทํางานได้สําเร็จ
คุณสามารถเพิ่ม wait-until-ready
ไว้ก่อนคำสั่งอื่นๆ ของโหมดการแลกซื้อ ตัวอย่างเช่น wait-until-ready
ลิงก์กับ getstatus
ดังนี้
adb shell tradeinmode wait-until-ready getstatus