Когда устройство 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" }
Если
factory_reset_protection
установлен наtrue
, устройство защищено и не может быть сброшено. Если устройство не может быть сброшено, его нельзя оценить.
Определить состояние ОС Android
Чтобы собрать информацию о состоянии операционной системы Android, например, является ли она одобренной сборкой, выполните следующие действия:
- Подключите устройство к рабочей станции.
- Убедитесь, что устройство подключено к Интернету.
На рабочей станции выполните следующую команду:
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 или выше, требуют подключения к Интернету для создания записи аттестации. Аттестация должна выполняться в режиме оценки после настройки соединения, поскольку она не будет выполнена, если она выполняется в мастере настройки.
Проанализируйте информацию об аттестации, используя один из следующих методов:
- Используйте инструмент
parse_tim_attestation
, который создается при сборке AOSP. - Используйте библиотеку подтверждения ключей Android .
Например, чтобы использовать инструмент
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 не подделан.Обратите внимание, что для выполнения аттестации необходимо подключение к Интернету как на устройстве, так и на хосте.
- Используйте инструмент
Тестовый режим обмена
Во время разработки вам следует протестировать свое устройство, чтобы убедиться, что оно правильно входит и существует в режиме обмена. Выполните следующие шаги, чтобы проверить способность вашего устройства входить и выходить из режима обмена:
Подключите устройство к рабочей станции.
С рабочей станции перезагрузите устройство в режим обмена:
adb shell tradeinmode testing start
Устройство перезагрузится и перейдет в режим trade-in. После перехода в режим trade-in вы можете использовать любую команду
adb shell tradein
.Убедитесь, что режим обмена активен:
adb shell tradeinmode testing status
Устройство определяет, что тестирование в режиме обмена активно.
Выйдите из режима обмена и восстановите полный доступ к adb:
adb shell tradeinmode testing stop
Интеграция мастера индивидуальной настройки
Команда evaluate
не будет работать на устройствах с пользовательскими мастерами настройки, если не добавлен приемник вещания. Чтобы добавить приемник вещания в приложение пользовательского мастера настройки:
Объявите получателя в манифесте приложения:
<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>
Создайте вещательный приемник, аналогичный следующему:
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
. - Закройте мастер настройки, чтобы устройство перешло на главный экран.
Ссылка на режим Trade-in
В этом разделе объясняются все команды режима обмена.
оценивать
adb shell tradeinmode evaluate
Переход в режим оценки путем пропуска мастера настройки, как если бы каждый экран настройки был пропущен пользователем вручную.
Пропустив мастер настройки, вы можете запустить дополнительные команды ADB или функциональные тесты на устройстве.
После выхода из режима оценки происходит сброс настроек к заводским, чтобы гарантировать, что никакие артефакты тестирования не будут случайно переданы каким-либо клиентам.
получитьстатус
adb shell tradeinmode getstatus [--challenge CHALLENGE]
Возвращает строку JSON с системной информацией, включая информацию о состоянии аккумулятора и хранилища для устройства.
Включите параметр --challenge
, за которым следует случайно сгенерированный буквенно-цифровой ключ вызова, чтобы вернуть дополнительное поле подтверждения. Проанализируйте этот ответ, чтобы определить ключевую информацию об операционной системе, такую как статус загрузчика (заблокирован или разблокирован) и действительность серийных номеров IMEI.
выключение питания
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
.
ждать-до-готовности
adb shell tradeinmode wait-until-ready
Ожидает готовности системных служб, чтобы режим обмена мог функционировать в полном объеме. Используйте эту команду в своей автоматизации, чтобы гарантировать успешность команд режима обмена.
Вы можете добавить wait-until-ready
перед другими командами режима trade-in. Например, вот wait-until-ready
связанный с getstatus
:
adb shell tradeinmode wait-until-ready getstatus