Saat perangkat Android 16 (atau yang lebih baru) melakukan booting, perangkat akan dimasukkan ke 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.
Setelah Anda membuka wizard penyiapan, perangkat akan ditempatkan dalam 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 International Mobile Equipment Identity (IMEI), ikuti langkah-langkah berikut:
Pastikan perangkat Anda memenuhi prasyarat untuk mode tukar tambah.
Colokkan perangkat ke workstation.
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
ditetapkan ketrue
, perangkat aman dan tidak dapat direset. Jika tidak dapat direset, perangkat tidak dapat dievaluasi.
Mengidentifikasi status Android OS
Untuk mengumpulkan informasi tentang status sistem operasi Android, seperti apakah build tersebut disetujui, ikuti langkah-langkah berikut:
- Colokkan perangkat ke workstation.
- Pastikan perangkat memiliki koneksi internet.
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 termasuk 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 data 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_attestation
yang dibuat saat Anda mem-build AOSP. - Gunakan library pengesahan kunci Android.
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 akan dibaca dari stdin.
Objek JSON dengan informasi Android OS 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 denganyes
, sistem operasi dianggap tepercaya; build ditandatangani dan IMEI tidak dipalsukan.Perhatikan bahwa konektivitas 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 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:
Colokkan perangkat ke workstation.
Dari workstation, mulai ulang perangkat ke mode tukar tambah:
adb shell tradeinmode testing start
Perangkat dimulai ulang dan memasuki mode tukar tambah. Setelah memasuki mode tukar tambah, Anda dapat menggunakan perintah
adb shell tradein
apa pun.Pastikan mode tukar tambah aktif:
adb shell tradeinmode testing status
Perangkat mengidentifikasi bahwa pengujian mode tukar tambah 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.
- Pastikan
persist.adb.tradeinmode
adalah2
. - Pastikan tidak ada perlindungan reset ke setelan pabrik atau kunci anti-pencurian.
- Sediakan perangkat, pastikan
Settings.Secure.USER_SETUP_COMPLETE
danSettings.Global.DEVICE_PROVISIONED
adalah1
. - Tutup aktivitas wizard penyiapan agar perangkat berada di layar utama.
Referensi mode trade-in
Bagian ini menjelaskan semua perintah mode tukar tambah.
mengevaluasi
adb shell tradeinmode evaluate
Membuka mode evaluasi dengan melewati wizard penyiapan seolah-olah setiap layar penyiapan dilewatkan 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 dilakukan untuk memastikan tidak ada artefak dari pengujian yang 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
, diikuti dengan kunci tantangan alfanumerik
yang dibuat secara acak untuk menampilkan kolom pengesahan tambahan. Mengurai
respons ini untuk mengidentifikasi informasi sistem operasi utama, seperti
status bootloader (terkunci atau tidak terkunci) dan validitas
nomor seri IMEI.
poweroff
adb shell tradeinmode poweroff
Mematikan perangkat. Gunakan perintah ini untuk mencegah baterai habis saat perangkat tidak diuji atau dievaluasi secara aktif.
mulai ulang
adb shell tradeinmode reboot
Memulai ulang perangkat.
pengujian dimulai
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 diabaikan dan hanya perintah mode tukar tambah yang berfungsi.
Perintah ini hanya berfungsi di perangkat dengan build
userdebug
, eng
, atau user
. Build user
harus menetapkan 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 menetapkan ro=debuggable=1
.
perhentian pengujian
adb shell tradeinmode testing stop
Menampilkan perangkat ke mode apa pun sebelum Anda mengeluarkan
perintah adb shell tradeinmode testing start
.
Perintah ini hanya berfungsi di perangkat dengan build
userdebug
, eng
, atau user
. Build user
harus menetapkan ro=debuggable=1
.
menghapus total pengujian
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 menetapkan 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 adalah wait-until-ready
yang dirantai ke getstatus
:
adb shell tradeinmode wait-until-ready getstatus