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

เมื่ออุปกรณ์ 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 จะใช้ไม่ได้ในอุปกรณ์ที่มีตัวช่วยการตั้งค่าที่กำหนดเอง เว้นแต่จะมีการเพิ่มเครื่องรับการออกอากาศ วิธีเพิ่ม Broadcast Receiver ลงในแอปวิซาร์ดการตั้งค่าที่กำหนดเอง

  1. ประกาศตัวรับสัญญาณในไฟล์ 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>ategory.DEFAULT" /
      /intent-filter
    /receiver
    
  2. สร้าง 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 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 ตามด้วยคีย์ความท้าทายที่เป็นตัวอักษรและตัวเลขที่สร้างขึ้นแบบสุ่ม เพื่อแสดงช่องการรับรองเพิ่มเติม แยกวิเคราะห์ การตอบกลับนี้เพื่อระบุข้อมูลระบบปฏิบัติการที่สำคัญ เช่น สถานะของ 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