Android 16 (이상) 기기가 부팅되면 보상 판매 사용자 모드로 전환되어 adb를 사용하여 기기에 연결하고 명령어를 사용하여 기기에 관한 정보를 가져올 수 있습니다. 기기가 보상 판매 사용자 모드로 전환되려면 다음 전제 조건이 충족되어야 합니다.
- 기기가 초기화되어야 합니다.
- 기기에 휴대전화 서비스가 없어야 합니다.
- 기기에 연결 또는 계정이 설정되어 있지 않아야 합니다.
- 기기에서 디버그 불가능한 빌드를 실행해야 합니다.
보상 판매 사용자 모드를 사용하면 기본 진단 정보를 쿼리하거나 평가 모드로 전환하여 다양한 adb 명령어를 실행하고 기기에서 추가 진단을 실행할 수 있습니다.
일반 상태 정보 수집
배터리, 저장용량 상태, 국제 모바일 기기 식별 번호 (IMEI)와 같은 기기의 일반 상태 정보를 수집하려면 다음 단계를 따르세요.
기기가 보상 판매 사용자 모드의 전제 조건을 충족하는지 확인합니다.
워크스테이션에 기기를 연결합니다.
워크스테이션에서 다음 명령어를 실행합니다.
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", "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 } ] }factory_reset_protection이true로 설정되어 있으면 기기가 안전하며 초기화할 수 없습니다. 기기를 초기화할 수 없으면 평가할 수 없습니다.cameras및uiccs필드는 Android 17 이상에 있습니다.
Android OS 상태 식별
승인된 빌드인지와 같은 Android 운영체제의 상태에 관한 정보를 수집하려면 다음 단계를 따르세요.
- 워크스테이션에 기기를 연결합니다.
- 기기가 인터넷에 연결되어 있는지 확인합니다.
워크스테이션에서 다음 명령어를 실행합니다.
adb shell tradeinmode getstatus --challenge CHALLENGECHALLENGE는 와 같은 무작위로 생성된 영숫자 문자열입니다.
p4tRsuHjWB이 명령어는 base64 증명 기록이 포함된 증명 필드를 포함하는 JSON을 반환합니다.이 명령어는
getstatus명령어에서 반환된 정보에 증명 정보를 추가합니다. 증명 정보는 다음과 같습니다."attestation": { "certificates": "AAAC\/DCCAvgwggKeoAMCAQICAQEwCgYIKoZIzj0EAwIwOTEMMAoGA1UEDAwDVEVFMSkwJwYDVQQF\n EyBmOTIyZTZhOWFkZmRjNjU0NmZiOWU1YmNlNzhiMDUzMzAeFw03MDAxMDEwMDAwMDBaFw00ODAx\n MDEwMDAwMDBaMB8xHTAbBgNVBAMTFEFuZHJvaWQgS2V5c3RvcmUgS2V5MFkwEwYHKoZIzj0CAQYI\n KoZIzj0DAQcDQgAEz9un3HpDJQy\/j7l0bWzw6WnRRMjFjvu6rg7+dCzFW93u+otCPK4VjmSjyYw ... }Android 16 이상으로 출시되는 기기는 증명 기록을 생성하기 위해 인터넷 연결이 필요합니다. 증명은 연결을 구성한 후 평가 모드에서 실행해야 합니다. 설정 마법사에서 실행하면 실패합니다.
다음 방법 중 하나를 사용하여 증명 정보를 파싱합니다.
- AOSP를 빌드할 때 빌드되는
parse_tim_attestation도구를 사용합니다. - Android 키 증명 라이브러리를 사용합니다.
예를 들어
parse_tim_attestation도구를 사용하려면 다음을 실행합니다.parse_tim_attestation --challenge CHALLENGE output_fileCHALLENGE는 증명 정보를 가져오는 데 사용한 챌린지와 동일해야 합니다.
2단계의 출력을 output_file에 저장한 경우, 파일 이름을 제공할 수 있습니다. 그렇지 않으면 증명 정보가 stdin에서 읽힙니다.
Android OS 정보가 포함된 JSON 객체가 반환됩니다.
"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가 위조되지 않습니다.기기와 호스트 모두에서 증명을 실행하려면 인터넷 연결이 필요합니다.
- AOSP를 빌드할 때 빌드되는
보상 판매 사용자 모드 테스트
개발 중에 기기가 보상 판매 사용자 모드로 올바르게 전환되고 종료되는지 확인하기 위해 기기를 테스트해야 합니다. 다음 단계에 따라 기기가 보상 판매 사용자 모드로 전환되고 종료되는 기능을 테스트합니다.
워크스테이션에 기기를 연결합니다.
워크스테이션에서 기기를 보상 판매 사용자 모드로 재부팅합니다.
adb shell tradeinmode testing start기기가 재부팅되고 보상 판매 사용자 모드로 전환됩니다. 보상 판매 사용자 모드로 전환한 후에는
adb shell tradein명령어를 사용할 수 있습니다.보상 판매 사용자 모드가 활성 상태인지 확인합니다.
adb shell tradeinmode testing status기기에서 보상 판매 사용자 모드 테스트가 활성 상태임을 식별합니다.
보상 판매 사용자 모드를 종료하고 전체 adb 액세스 권한을 복원합니다.
adb shell tradeinmode testing stop
맞춤 설정 마법사 통합
broadcast receiver가 추가되지 않으면 맞춤 설정 마법사가 있는 기기에서 evaluate 명령어가 작동하지 않습니다. 맞춤 설정 마법사 앱에 broadcast receiver를 추가하려면 다음 단계를 따르세요.
앱 매니페스트에서 수신자를 선언합니다.
<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>다음과 유사한 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. } }
수신자는 다음 작업을 순서대로 실행해야 합니다.
persist.adb.tradeinmode가2인지 확인합니다.- 초기화 보호 또는 도난 방지 잠금이 없는지 확인합니다.
Settings.Secure.USER_SETUP_COMPLETE및Settings.Global.DEVICE_PROVISIONED가1인지 확인하면서 기기를 프로비저닝합니다.- 기기가 홈 화면에 있도록 설정 마법사 활동을 닫습니다.
보상 판매 사용자 모드 참조
이 섹션에서는 모든 보상 판매 사용자 모드 명령어를 설명합니다.
evaluate
adb shell tradeinmode evaluate사용자가 모든 설정 화면을 수동으로 건너뛴 것처럼 설정 마법사를 건너뛰어 평가 모드로 전환합니다.
설정 마법사를 건너뛴 후 기기에서 추가 ADB 명령어 또는 기능 테스트를 실행할 수 있습니다.
평가 모드를 종료한 후 테스트의 아티팩트가 실수로 고객에게 전송되지 않도록 초기화가 실행됩니다.
getstatus
adb shell tradeinmode getstatus [--challenge CHALLENGE]기기의 배터리 및 저장용량 상태 정보를 비롯한 시스템 정보가 포함된 JSON 문자열을 반환합니다.
무작위로 생성된 영숫자 챌린지 키가 뒤따르는 --challenge 매개변수를 포함하여 추가 증명 필드를 반환합니다. 이 응답을 파싱하여 부트로더 상태 (잠김 또는 잠금 해제) 및 IMEI 일련번호의 유효성과 같은 주요 운영체제 정보를 식별합니다.
poweroff
adb shell tradeinmode poweroff기기의 전원을 끕니다. 기기가 활발하게 테스트되거나 평가되지 않는 동안 배터리 소모를 방지하려면 이 명령어를 사용하세요.
reboot
adb shell tradeinmode reboot기기를 재부팅합니다.
testing start
adb shell tradeinmode testing start기기를 보상 판매 사용자 모드로 재부팅합니다. 이 명령어는 설정 마법사 내에서만 작동합니다. 이 명령어를 실행하면 승인이 우회되고 보상 판매 사용자 모드 명령어만 작동합니다.
이 명령어는 userdebug, eng 또는 user
빌드가 있는 기기에서만 작동합니다. user 빌드에는 ro=debuggable=1이 설정되어 있어야 합니다.
testing status
adb shell tradeinmode testing status보상 판매 사용자 모드 테스트가 활성 상태인지 식별합니다.
이 명령어는 userdebug, eng 또는 user
빌드가 있는 기기에서만 작동합니다. user 빌드에는 ro=debuggable=1이 설정되어 있어야 합니다.
testing stop
adb shell tradeinmode testing stopadb shell tradeinmode testing start 명령어를 실행하기 전의 모드로 기기를 반환합니다.
이 명령어는 userdebug, eng 또는 user
빌드가 있는 기기에서만 작동합니다. user 빌드에는 ro=debuggable=1이 설정되어 있어야 합니다.
testing wipe
adb shell tradeinmode testing wipe기기를 초기화합니다.
이 명령어는 userdebug, eng 또는 user
빌드가 있는 기기에서만 작동합니다. user 빌드에는 ro=debuggable=1이 설정되어 있어야 합니다.
wait-until-ready
adb shell tradeinmode wait-until-ready보상 판매 사용자 모드가 완전히 작동할 수 있도록 시스템 서비스가 준비될 때까지 기다립니다. 자동화 내에서 이 명령어를 사용하여 보상 판매 사용자 모드 명령어가 성공하도록 합니다.
다른 보상 판매 사용자 모드 명령어 앞에 wait-until-ready를 추가할 수 있습니다. 예를 들어 다음은 getstatus에 연결된 wait-until-ready입니다.
adb shell tradeinmode wait-until-ready getstatus