Saat perangkat Android 16 (atau yang lebih tinggi) di-boot, perangkat tersebut akan dimasukkan ke mode trade-in, 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 trade-in:
- 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 perangkat Anda, seperti informasi tentang baterai, kesehatan penyimpanan, dan nomor identitas peralatan seluler internasional (IMEI), ikuti langkah-langkah berikut:
Pastikan perangkat Anda memenuhi prasyarat untuk mode trade-in.
Colokkan perangkat ke workstation.
Dari workstation, jalankan perintah berikut:
adb shell tradeinmode getstatusPerintah ini akan 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", "cameras": [ { "num_physical": 3, "lens_facing": "back" }, { "num_physical": 2, "lens_facing": "front" } ], "uiccs": [ { "eid": "89033023427100000000007982221521", "removable": false, "physical_slot_index": 0 }, { "removable": true, "physical_slot_index": 1 } ] }Jika
factory_reset_protectionditetapkan ketrue, perangkat akan aman dan tidak dapat direset. Jika perangkat tidak dapat direset, perangkat tersebut tidak dapat dievaluasi.Kolom
camerasdanuiccsada di Android 17 atau yang lebih tinggi.
Mengidentifikasi status Android OS
Untuk mengumpulkan informasi tentang status sistem operasi Android, seperti apakah sistem operasi tersebut merupakan build yang disetujui, ikuti langkah-langkah berikut:
- Colokkan perangkat ke workstation.
- Pastikan perangkat memiliki koneksi internet.
Dari workstation, jalankan perintah berikut:
adb shell tradeinmode getstatus --challenge CHALLENGECHALLENGE adalah string alfanumerik yang dibuat secara acak, seperti
p4tRsuHjWB. Perintah ini akan menampilkan JSON yang menyertakan 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 koneksi internet untuk membuat catatan pengesahan. Pengesahan harus dilakukan dalam mode evaluasi, setelah mengonfigurasi koneksi, karena akan gagal jika dilakukan di wizard penyiapan.
Mengurai informasi pengesahan menggunakan salah satu metode berikut:
- Gunakan alat
parse_tim_attestationyang dibuat saat Anda membuat AOSP. - Gunakan library pengesahan kunci Android.
Misalnya, untuk menggunakan alat
parse_tim_attestation, jalankan:parse_tim_attestation --challenge CHALLENGE output_fileCHALLENGE harus sama dengan challenge 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 akan dibaca dari stdin.
Objek JSON dengan informasi Android OS 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
trustworthysama denganyes, sistem operasi akan dianggap tepercaya; build ditandatangani dan IMEI tidak dipalsukan.Perhatikan bahwa koneksi internet diperlukan untuk melakukan pengesahan, baik di perangkat maupun di host.
- Gunakan alat
Menguji mode trade-in
Selama pengembangan, Anda harus menguji perangkat untuk memastikan perangkat Anda memasuki dan keluar dari mode trade-in dengan benar. Ikuti langkah-langkah berikut untuk menguji kemampuan perangkat Anda dalam memasuki dan keluar dari mode trade-in:
Colokkan perangkat ke workstation.
Dari workstation, reboot perangkat ke mode trade-in:
adb shell tradeinmode testing startPerangkat akan di-reboot dan memasuki mode trade-in. Setelah memasuki mode trade-in, Anda dapat menggunakan perintah
adb shell tradein.Pastikan mode trade-in aktif:
adb shell tradeinmode testing statusPerangkat mengidentifikasi bahwa pengujian mode trade-in aktif.
Keluar dari mode trade-in 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:
Deklarasikan penerima di manifes aplikasi:
<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>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.
- Periksa apakah
persist.adb.tradeinmodeadalah2. - Periksa apakah tidak ada perlindungan reset ke setelan pabrik atau kunci antimaling.
- Sediakan perangkat, pastikan
Settings.Secure.USER_SETUP_COMPLETEdanSettings.Global.DEVICE_PROVISIONEDadalah1. - Tutup aktivitas wizard penyiapan sehingga perangkat berada di layar utama.
Referensi mode trade-in
Bagian ini menjelaskan semua perintah mode trade-in.
evaluate
adb shell tradeinmode evaluateMemasuki 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 di perangkat.
Setelah Anda keluar dari mode evaluasi, reset ke setelan pabrik akan terjadi untuk memastikan tidak ada artefak dari pengujian yang tidak sengaja ditransfer ke pelanggan.
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 oleh kunci challenge alfanumerik yang dibuat secara acak untuk menampilkan kolom pengesahan tambahan. Urai respons ini untuk mengidentifikasi informasi sistem operasi utama, seperti status bootloader (dikunci atau tidak dikunci) dan validitas nomor seri IMEI.
poweroff
adb shell tradeinmode poweroffMematikan perangkat. Gunakan perintah ini untuk mencegah baterai cepat habis saat perangkat tidak diuji atau dievaluasi secara aktif.
reboot
adb shell tradeinmode rebootMemulai ulang perangkat.
testing start
adb shell tradeinmode testing startMemulai ulang perangkat ke mode trade-in. Perintah ini hanya berfungsi dalam wizard penyiapan. Setelah mengeluarkan perintah ini, otorisasi akan dilewati dan hanya perintah mode trade-in yang berfungsi.
Perintah ini hanya berfungsi di perangkat dengan userdebug, eng, atau user
builds. Build user harus memiliki setelan ro=debuggable=1.
testing status
adb shell tradeinmode testing statusMengidentifikasi apakah pengujian mode trade-in aktif.
Perintah ini hanya berfungsi di perangkat dengan userdebug, eng, atau user
builds. Build user harus memiliki setelan ro=debuggable=1.
testing stop
adb shell tradeinmode testing stopMengembalikan perangkat ke mode apa pun yang digunakan sebelum Anda mengeluarkan perintah adb shell tradeinmode testing start.
Perintah ini hanya berfungsi di perangkat dengan userdebug, eng, atau user
builds. Build user harus memiliki setelan ro=debuggable=1.
testing wipe
adb shell tradeinmode testing wipeMereset perangkat ke setelan pabrik.
Perintah ini hanya berfungsi di perangkat dengan userdebug, eng, atau user
builds. Build user harus memiliki setelan ro=debuggable=1.
wait-until-ready
adb shell tradeinmode wait-until-readyMenunggu hingga layanan sistem siap sehingga mode trade-in dapat berfungsi sepenuhnya. Gunakan perintah ini dalam otomatisasi Anda untuk memastikan perintah mode trade-in berhasil.
Anda dapat menambahkan wait-until-ready sebelum perintah mode trade-in lainnya. Misalnya, berikut adalah wait-until-ready yang dirangkai ke getstatus:
adb shell tradeinmode wait-until-ready getstatus