При загрузке устройства Android 16 (или более поздней версии) оно переходит в режим обмена (trade-in) , который позволяет подключиться к устройству через adb и получить информацию об устройстве с помощью команды. Для перехода устройства в режим обмена (trade-in) должны быть выполнены следующие условия:
- Необходимо сбросить настройки устройства до заводских.
- Устройство не должно иметь сотовой связи.
- На устройстве не должно быть установлено подключение или учетная запись.
- Устройство должно работать под управлением неотлаживаемой сборки.
Режим обмена позволяет запрашивать основную диагностическую информацию или переходить в режим оценки , который позволяет выполнять полный спектр команд 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
Устройство перезагрузится и перейдёт в режим обмена. После перехода в режим обмена вы можете использовать любую команду
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
. - Закройте окно мастера настройки, чтобы устройство оказалось на главном экране.
Ссылка на режим обмена
В этом разделе объясняются все команды режима обмена.
оценивать
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
перед другими командами режима обмена. Например, вот wait-until-ready
связанная с getstatus
:
adb shell tradeinmode wait-until-ready getstatus