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

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

Справочная информация о режиме обмена

В этом разделе объясняется назначение всех команд режима обмена.

оценивать

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