เมื่ออุปกรณ์ 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
จะใช้ไม่ได้ในอุปกรณ์ที่มีตัวช่วยการตั้งค่าที่กำหนดเอง
เว้นแต่จะมีการเพิ่มเครื่องรับการออกอากาศ วิธีเพิ่ม Broadcast Receiver ลงในแอปวิซาร์ดการตั้งค่าที่กำหนดเอง
ประกาศตัวรับสัญญาณในไฟล์ Manifest ของแอป
<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 /receiverสร้าง Broadcast 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 activ
ity. } }
ผู้รับต้องดำเนินการต่อไปนี้ตามลำดับ
- ตรวจสอบว่า
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
ตามด้วยคีย์ความท้าทายที่เป็นตัวอักษรและตัวเลขที่สร้างขึ้นแบบสุ่ม
เพื่อแสดงช่องการรับรองเพิ่มเติม แยกวิเคราะห์
การตอบกลับนี้เพื่อระบุข้อมูลระบบปฏิบัติการที่สำคัญ เช่น
สถานะของ Bootloader (ล็อกหรือปลดล็อก) และความถูกต้องของ
หมายเลขซีเรียล 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