ดูข้อมูลประสิทธิภาพของระบบ

เมื่ออุปกรณ์ Android 16 (หรือเวอร์ชันที่ใหม่กว่า) เริ่มทำงาน ระบบจะเข้าสู่โหมดการแลกซื้อ ซึ่งจะช่วยให้คุณเชื่อมต่อกับอุปกรณ์โดยใช้ adb และใช้คำสั่งเพื่อรับข้อมูลเกี่ยวกับอุปกรณ์ได้ อุปกรณ์ต้องมีคุณสมบัติตรงตามเงื่อนไขเบื้องต้นต่อไปนี้จึงจะเข้าสู่โหมดแลกซื้อเครื่องใหม่ได้

  • อุปกรณ์ต้องรีเซ็ตเป็นค่าเริ่มต้น
  • อุปกรณ์ต้องไม่มีบริการเครือข่ายมือถือ
  • อุปกรณ์ต้องไม่มีการเชื่อมต่อหรือสร้างบัญชีไว้
  • อุปกรณ์ต้องใช้บิลด์ที่แก้ไขข้อบกพร่องไม่ได้

หลังจากไปยังส่วนต่างๆ ของวิซาร์ดการตั้งค่าแล้ว อุปกรณ์จะอยู่ในโหมดการประเมิน ซึ่งจะช่วยให้คุณใช้คําสั่ง adb ได้ครบทุกรูปแบบและทําการวินิจฉัยเพิ่มเติมในอุปกรณ์

รวบรวมข้อมูลสุขภาพทั่วไป

หากต้องการรวบรวมข้อมูลด้านสุขภาพทั่วไปของอุปกรณ์ เช่น ข้อมูลเกี่ยวกับแบตเตอรี่ ประสิทธิภาพของพื้นที่เก็บข้อมูล และหมายเลข International Mobile Equipment Identity (IMEI) ให้ทำตามขั้นตอนต่อไปนี้

  1. ตรวจสอบว่าอุปกรณ์เป็นไปตามเงื่อนไขเบื้องต้นสำหรับโหมดการแลกซื้อ

  2. เสียบอุปกรณ์เข้ากับเวิร์กสเตชัน

  3. จากเวิร์กสเตชัน ให้เรียกใช้คำสั่งต่อไปนี้

    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 เช่น ว่าเป็นบิลด์ที่ได้รับอนุมัติหรือไม่ ให้ทำตามขั้นตอนต่อไปนี้

  1. เสียบอุปกรณ์เข้ากับเวิร์กสเตชัน
  2. ตรวจสอบว่าอุปกรณ์มีการเชื่อมต่ออินเทอร์เน็ต
  3. จากเวิร์กสเตชัน ให้เรียกใช้คำสั่งต่อไปนี้

    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 ขึ้นไปจำเป็นต้องมีการเชื่อมต่ออินเทอร์เน็ตเพื่อสร้างระเบียนการรับรอง การรับรองควรดำเนินการในโหมดการประเมินหลังจากกำหนดค่าการเชื่อมต่อแล้ว เนื่องจากจะดำเนินการในวิซาร์ดการตั้งค่าไม่ได้

  4. แยกวิเคราะห์ข้อมูลการรับรองโดยใช้วิธีใดวิธีหนึ่งต่อไปนี้

    เช่น หากต้องการใช้เครื่องมือ 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 ไม่ได้ถูกปลอมแปลง

    โปรดทราบว่าต้องมีการเชื่อมต่ออินเทอร์เน็ตเพื่อดำเนินการรับรองทั้งบนอุปกรณ์และบนโฮสต์

โหมดทดสอบการแลกซื้อเครื่องใหม่

ในระหว่างการพัฒนา คุณควรทดสอบอุปกรณ์เพื่อให้แน่ใจว่าอุปกรณ์เข้าสู่และออกจากโหมดการแลกซื้ออย่างถูกต้อง ทำตามขั้นตอนต่อไปนี้เพื่อทดสอบความสามารถของอุปกรณ์ในการเข้าและออกจากโหมดการแลกซื้อ

  1. เสียบอุปกรณ์เข้ากับเวิร์กสเตชัน

  2. จากเวิร์กสเตชัน ให้รีบูตอุปกรณ์เป็นโหมดการแลกซื้อโดยทำดังนี้

    adb shell tradeinmode testing start

    อุปกรณ์จะรีบูตและเข้าสู่โหมดแลกซื้อเครื่องใหม่ หลังจากเข้าสู่โหมดการแลกซื้อ คุณจะสามารถใช้คำสั่ง adb shell tradein ใดก็ได้

  3. ตรวจสอบว่าโหมดการแลกซื้ออุปกรณ์ใหม่ทำงานอยู่

    adb shell tradeinmode testing status

    อุปกรณ์ระบุว่าการทดสอบโหมดการแลกซื้ออุปกรณ์ใหม่ทำงานอยู่

  4. ออกจากโหมดแลกซื้อเครื่องใหม่และคืนค่าสิทธิ์เข้าถึง adb โดยสมบูรณ์ โดยทำดังนี้

    adb shell tradeinmode testing stop

การผสานรวมวิซาร์ดการตั้งค่าที่กำหนดเอง

คำสั่ง evaluate จะใช้ไม่ได้ในอุปกรณ์ที่มีวิซาร์ดการตั้งค่าที่กำหนดเอง เว้นแต่จะมีการเพิ่มตัวรับการออกอากาศ วิธีเพิ่มตัวรับการออกอากาศลงในแอปวิซาร์ดการตั้งค่าที่กำหนดเอง

  1. ประกาศตัวรับในไฟล์ 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>
    
  2. สร้างตัวรับการออกอากาศที่คล้ายกับตัวอย่างต่อไปนี้

    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.
     }
    }
    

ผู้รับต้องดำเนินการต่อไปนี้ตามลำดับ

  1. ตรวจสอบว่า persist.adb.tradeinmode เป็น 2
  2. ตรวจสอบว่าไม่มีการป้องกันการรีเซ็ตเป็นค่าเริ่มต้นหรือล็อกป้องกันการโจรกรรม
  3. จัดสรรอุปกรณ์โดยตรวจสอบว่า Settings.Secure.USER_SETUP_COMPLETE และ Settings.Global.DEVICE_PROVISIONED เป็น 1
  4. ปิดกิจกรรมของวิซาร์ดการตั้งค่าเพื่อให้อุปกรณ์ไปที่หน้าจอหลัก

ข้อมูลอ้างอิงสำหรับโหมดแลกซื้อเครื่องใหม่

ส่วนนี้จะอธิบายคำสั่งทั้งหมดในโหมดการแลกซื้อ

ประเมิน

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