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

При загрузке устройства 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",
      "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

Чтобы получить информацию о состоянии ОС Android, например о том, является ли она одобренной сборкой, выполните следующие действия:

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

    adb shell tradeinmode getstatus --challenge CHALLENGE

    CHALLENGE – это случайно сгенерированная буквенно-цифровая строка, например p4tRsuHjWB. Эта команда возвращает JSON, в том числе поле attestation, содержащее запись аттестации в кодировке 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, укажите его название. В противном случае информация об аттестации считывается со стандартного ввода.

    Возвращается объект 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

    Устройство перезагрузится и перейдет в режим трейд-ин. После перехода в режим обмена вы можете использовать любую команду 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. Закройте мастер настройки, чтобы перейти на главный экран.

Общие сведения о режиме трейд-ин

В этом разделе описаны все команды режима обмена.

evaluate

adb shell tradeinmode evaluate

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

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

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

getstatus

adb shell tradeinmode getstatus [--challenge CHALLENGE]

Возвращает строку JSON с системной информацией об устройстве, в том числе о состоянии батареи и хранилища.

Добавьте параметр --challenge, а затем случайно сгенерированный буквенно-цифровой ключ запроса, чтобы вернуть дополнительное поле подтверждения. Проанализируйте этот ответ, чтобы определить ключевую информацию об операционной системе, например статус загрузчика (заблокирован или разблокирован) и действительность серийных номеров IMEI.

poweroff

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.

wait-until-ready

adb shell tradeinmode wait-until-ready

Ожидает готовности системных сервисов, чтобы режим обмена работал корректно. Используйте эту команду в автоматизации, чтобы команды режима обмена работали корректно.

Перед другими командами режима трейд-ин можно добавить wait-until-ready. Например, вот как выглядит цепочка из wait-until-ready и getstatus:

adb shell tradeinmode wait-until-ready getstatus