Mendapatkan informasi kesehatan sistem

Saat perangkat Android 16 (atau yang lebih tinggi) di-boot, perangkat akan ditempatkan dalam mode tukar tambah, yang memungkinkan Anda terhubung ke perangkat menggunakan adb dan menggunakan perintah untuk mendapatkan informasi tentang perangkat. Prasyarat berikut harus ada agar perangkat dapat memasuki mode tukar tambah:

  • Perangkat harus direset ke setelan pabrik.
  • Perangkat tidak boleh memiliki layanan seluler.
  • Perangkat tidak boleh memiliki konektivitas atau akun yang dibuat.
  • Perangkat harus menjalankan build yang tidak dapat di-debug.

Mode trade-in memungkinkan Anda membuat kueri informasi diagnostik dasar, atau memasuki mode evaluasi, yang memungkinkan Anda menjalankan berbagai perintah adb dan menjalankan diagnostik tambahan di perangkat.

Mengumpulkan informasi kesehatan umum

Untuk mengumpulkan informasi kesehatan umum untuk perangkat Anda, seperti informasi tentang baterai, kesehatan penyimpanan, dan nomor IMEI (International Mobile Equipment Identity), ikuti langkah-langkah berikut:

  1. Pastikan perangkat Anda memenuhi prasyarat untuk mode tukar tambah.

  2. Colokkan perangkat ke workstation.

  3. Dari workstation, jalankan perintah berikut:

    adb shell tradeinmode getstatus

    Perintah ini menampilkan objek JSON dengan informasi tentang perangkat. Berikut adalah contoh output dari 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"
    }
    

    Jika factory_reset_protection disetel ke true, perangkat aman dan tidak dapat direset. Jika perangkat tidak dapat direset, perangkat tersebut tidak dapat dievaluasi.

Mengidentifikasi status OS Android

Untuk mengumpulkan informasi tentang status sistem operasi Android, seperti apakah build yang disetujui, ikuti langkah-langkah berikut:

  1. Colokkan perangkat ke workstation.
  2. Pastikan perangkat memiliki koneksi Internet.
  3. Dari workstation, jalankan perintah berikut:

    adb shell tradeinmode getstatus --challenge CHALLENGE

    CHALLENGE adalah string alfanumerik yang dibuat secara acak, seperti p4tRsuHjWB. Perintah ini menampilkan JSON yang mencakup kolom pengesahan yang berisi catatan pengesahan base64.

    Perintah ini menambahkan informasi pengesahan ke informasi yang ditampilkan oleh perintah getstatus. Informasi pengesahan terlihat seperti ini:

    "attestation": {
      "certificates": "AAAC\/DCCAvgwggKeoAMCAQICAQEwCgYIKoZIzj0EAwIwOTEMMAoGA1UEDAwDVEVFMSkwJwYDVQQF\n
        EyBmOTIyZTZhOWFkZmRjNjU0NmZiOWU1YmNlNzhiMDUzMzAeFw03MDAxMDEwMDAwMDBaFw00ODAx\n
        MDEwMDAwMDBaMB8xHTAbBgNVBAMTFEFuZHJvaWQgS2V5c3RvcmUgS2V5MFkwEwYHKoZIzj0CAQYI\n
        KoZIzj0DAQcDQgAEz9un3HpDJQy\/j7l0bWzw6WnRRMjFjvu6rg7+dCzFW93u+otCPK4VjmSjyYw
        ...
    }
    

    Perangkat yang diluncurkan dengan Android 16 atau yang lebih tinggi memerlukan konektivitas Internet untuk membuat catatan pengesahan. Pengesahan harus dilakukan dalam mode evaluasi, setelah mengonfigurasi koneksi, karena akan gagal jika dilakukan di wizard penyiapan.

  4. Parse informasi pengesahan menggunakan salah satu metode berikut:

    Misalnya, untuk menggunakan alat parse_tim_attestation, jalankan:

    parse_tim_attestation --challenge CHALLENGE output_file

    CHALLENGE harus berupa tantangan yang sama dengan yang Anda gunakan untuk mendapatkan informasi pengesahan.

    Jika Anda menyimpan output langkah 2 ke output_file, Anda dapat memberikan nama file tersebut. Jika tidak, informasi pengesahan dibaca dari stdin.

    Objek JSON dengan informasi OS Android akan ditampilkan:

    "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"
    

    Jika trustworthy sama dengan yes, sistem operasi dianggap tepercaya; build ditandatangani dan IMEI tidak dipalsukan.

    Perhatikan bahwa konektivitas Internet diperlukan untuk melakukan pengesahan, baik di perangkat maupun di host.

Menguji mode tukar tambah

Selama pengembangan, Anda harus menguji perangkat untuk memastikan perangkat memasuki dan keluar dari mode tukar tambah dengan benar. Ikuti langkah-langkah berikut untuk menguji kemampuan perangkat Anda untuk masuk dan keluar dari mode tukar tambah:

  1. Colokkan perangkat ke workstation.

  2. Dari workstation, mulai ulang perangkat ke mode tukar tambah:

    adb shell tradeinmode testing start

    Perangkat akan dimulai ulang dan memasuki mode tukar tambah. Setelah memasuki mode tukar tambah, Anda dapat menggunakan perintah adb shell tradein apa pun.

  3. Pastikan mode tukar tambah aktif:

    adb shell tradeinmode testing status

    Perangkat mengidentifikasi bahwa pengujian mode tukar tambah sedang aktif.

  4. Keluar dari mode tukar tambah dan pulihkan akses adb penuh:

    adb shell tradeinmode testing stop

Integrasi wizard penyiapan kustom

Perintah evaluate tidak akan berfungsi di perangkat dengan wizard penyiapan kustom, kecuali jika penerima siaran ditambahkan. Untuk menambahkan penerima siaran ke aplikasi wizard penyiapan kustom:

  1. Deklarasikan penerima dalam manifes aplikasi:

    <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. Buat penerima siaran yang mirip dengan:

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

Penerima harus melakukan tindakan berikut secara berurutan.

  1. Pastikan persist.adb.tradeinmode adalah 2.
  2. Pastikan tidak ada perlindungan reset ke setelan pabrik atau kunci anti-pencurian.
  3. Sediakan perangkat, pastikan Settings.Secure.USER_SETUP_COMPLETE dan Settings.Global.DEVICE_PROVISIONED adalah 1.
  4. Tutup aktivitas wizard penyiapan agar perangkat berada di layar utama.

Referensi mode tukar tambah

Bagian ini menjelaskan semua perintah mode tukar tambah.

evaluate

adb shell tradeinmode evaluate

Memasuki mode evaluasi dengan melewati wizard penyiapan seolah-olah setiap layar penyiapan dilewati secara manual oleh pengguna.

Setelah melewati wizard penyiapan, Anda dapat menjalankan perintah ADB tambahan atau pengujian fungsional pada perangkat.

Setelah Anda keluar dari mode evaluasi, reset ke setelan pabrik akan terjadi untuk memastikan bahwa tidak ada artefak dari pengujian yang secara tidak sengaja ditransfer ke pelanggan mana pun.

getstatus

adb shell tradeinmode getstatus [--challenge CHALLENGE]

Menampilkan string JSON dengan informasi sistem, termasuk informasi kesehatan baterai dan penyimpanan, untuk perangkat.

Sertakan parameter --challenge yang diikuti dengan kunci tantangan alfanumerik yang dibuat secara acak untuk menampilkan kolom pengesahan tambahan. Parsing respons ini untuk mengidentifikasi informasi sistem operasi utama, seperti status bootloader (dikunci atau tidak dikunci) dan validitas nomor seri IMEI.

poweroff

adb shell tradeinmode poweroff

Mematikan perangkat. Gunakan perintah ini untuk mencegah pengurasan baterai saat perangkat tidak diuji atau dievaluasi secara aktif.

mulai ulang

adb shell tradeinmode reboot

Memulai ulang perangkat.

mulai pengujian

adb shell tradeinmode testing start

Memulai ulang perangkat ke mode tukar tambah. Perintah ini hanya berfungsi dalam wizard penyiapan. Setelah mengeluarkan perintah ini, otorisasi akan dilewati dan hanya perintah mode tukar tambah yang berfungsi.

Perintah ini hanya berfungsi di perangkat dengan build userdebug, eng, atau user. Build user harus memiliki setelan ro=debuggable=1.

status pengujian

adb shell tradeinmode testing status

Mengidentifikasi apakah pengujian mode tukar tambah aktif.

Perintah ini hanya berfungsi di perangkat dengan build userdebug, eng, atau user. Build user harus memiliki setelan ro=debuggable=1.

pengujian berhenti

adb shell tradeinmode testing stop

Mengembalikan perangkat ke mode apa pun yang digunakan sebelum Anda mengeluarkan perintah adb shell tradeinmode testing start.

Perintah ini hanya berfungsi di perangkat dengan build userdebug, eng, atau user. Build user harus memiliki setelan ro=debuggable=1.

pengujian penghapusan

adb shell tradeinmode testing wipe

Mereset perangkat ke setelan pabrik.

Perintah ini hanya berfungsi di perangkat dengan build userdebug, eng, atau user. Build user harus memiliki setelan ro=debuggable=1.

wait-until-ready

adb shell tradeinmode wait-until-ready

Menunggu hingga layanan sistem siap sehingga mode tukar tambah dapat berfungsi sepenuhnya. Gunakan perintah ini dalam otomatisasi Anda untuk memastikan perintah mode tukar tambah berhasil.

Anda dapat menambahkan wait-until-ready sebelum perintah mode tukar tambah lainnya. Misalnya, berikut wait-until-ready yang dirangkai dengan getstatus:

adb shell tradeinmode wait-until-ready getstatus