Получить информацию о состоянии системы

Когда устройство Android 16 (или выше) загружается, оно переходит в режим обмена , который позволяет вам подключиться к устройству с помощью adb и использовать команду для получения информации об устройстве. Для перехода устройства в режим обмена должны быть выполнены следующие предварительные условия:

  • Необходимо выполнить сброс настроек устройства до заводских.
  • Устройство не должно иметь сотовой связи.
  • На устройстве не должно быть установлено подключение или создана учетная запись.
  • На устройстве должна быть запущена неотлаживаемая сборка.

После прохождения мастера настройки устройство переводится в режим оценки , который позволяет выполнять полный спектр команд adb и проводить дополнительную диагностику устройства.

Соберите общую информацию о состоянии здоровья

Чтобы собрать общую информацию о состоянии вашего устройства, например информацию о состоянии аккумулятора, состоянии хранилища и международных номерах идентификаторов мобильного оборудования (IMEI), выполните следующие действия:

  1. Убедитесь, что ваше устройство соответствует предварительным условиям для обмена.

  2. Подключите устройство к рабочей станции.

  3. На рабочей станции выполните следующую команду:

    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, например, является ли она одобренной сборкой, выполните следующие действия:

  1. Подключите устройство к рабочей станции.
  2. Убедитесь, что устройство подключено к Интернету.
  3. На рабочей станции выполните следующую команду:

    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 или выше, требуют подключения к Интернету для создания записи аттестации. Аттестация должна выполняться в режиме оценки после настройки соединения, поскольку она не будет выполнена, если она выполняется в мастере настройки.

  4. Проанализируйте информацию об аттестации, используя один из следующих методов:

    Например, чтобы использовать инструмент 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 не подделан.

    Обратите внимание, что для выполнения аттестации необходимо подключение к Интернету как на устройстве, так и на хосте.

Тестовый режим обмена

Во время разработки вам следует протестировать свое устройство, чтобы убедиться, что оно правильно входит и существует в режиме обмена. Выполните следующие шаги, чтобы проверить способность вашего устройства входить и выходить из режима обмена:

  1. Подключите устройство к рабочей станции.

  2. С рабочей станции перезагрузите устройство в режим обмена:

    adb shell tradeinmode testing start

    Устройство перезагрузится и перейдет в режим trade-in. После перехода в режим trade-in вы можете использовать любую команду adb shell tradein .

  3. Убедитесь, что режим обмена активен:

    adb shell tradeinmode testing status

    Устройство определяет, что тестирование в режиме обмена активно.

  4. Выйдите из режима обмена и восстановите полный доступ к adb:

    adb shell tradeinmode testing stop

Интеграция мастера индивидуальной настройки

Команда evaluate не будет работать на устройствах с пользовательскими мастерами настройки, если не добавлен приемник вещания. Чтобы добавить приемник вещания в приложение пользовательского мастера настройки:

  1. Объявите получателя в манифесте приложения:

    <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>
    
  2. Создайте вещательный приемник, аналогичный следующему:

    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.
     }
    }
    

Получатель должен выполнить следующие действия в указанном порядке.

  1. Проверьте, что persist.adb.tradeinmode равен 2 .
  2. Проверьте, нет ли защиты от сброса настроек к заводским или блокировки от кражи.
  3. Выполните подготовку устройства, убедившись, что Settings.Secure.USER_SETUP_COMPLETE и Settings.Global.DEVICE_PROVISIONED равны 1 .
  4. Закройте мастер настройки, чтобы устройство перешло на главный экран.

Ссылка на режим 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