Команда adb shell getprop выводит сотни строк системных свойств Android, и без фильтрации найти в этом списке нужное значение — например, версию прошивки или имя модели — почти невозможно. Именно поэтому разработчики редко запускают её «в лоб»: вместо этого указывают конкретный ключ вроде ro.product.model или комбинируют вывод с поиском по подстроке.
Эта команда — один из основных инструментов диагностики Android-устройства через Android Debug Bridge. Она читает системные свойства (system properties) — пары «ключ-значение», которые ядро системы и службы используют для хранения конфигурации: от серийного номера сборки до состояния отладки. В статье разберём синтаксис, самые полезные ключи, способы фильтрации и типичные ошибки.
Что такое системные свойства Android и зачем их читать
Системные свойства — это глобальное хранилище конфигурации в формате ключ=значение, которое заполняется при загрузке устройства. Часть значений задаётся производителем в прошивке, часть формируется динамически во время работы системы. Службы Android, приложения и скрипты обращаются к этим свойствам, чтобы определить окружение: модель устройства, уровень API, регион, состояние загрузки.
Чтение свойств через getprop полезно в нескольких сценариях. Разработчик проверяет, на какой версии SDK запущено тестовое устройство. Тестировщик уточняет фингерпринт сборки перед воспроизведением бага. Энтузиаст убеждается, что кастомная прошивка встала корректно. Во всех случаях команда выполняется без root-прав — это безопасная операция только для чтения.
Важно понимать различие префиксов ключей: свойства ro. (read-only) задаются один раз при загрузке и не меняются, persist. сохраняются между перезагрузками, а остальные могут обновляться системой на лету. Это помогает правильно интерпретировать вывод.
Подготовка: подключение устройства через ADB
Прежде чем выполнять getprop, нужно установить соединение между компьютером и устройством. Порядок действий стандартный для любых команд ADB.
- 🔧 Установите Platform Tools — официальный пакет с утилитой adb от Google.
- отладку по USB: сначала активируйте режим разработчика (несколько нажатий на пункт «Номер сборки» в разделе «О телефоне»), затем включите саму опцию.
- 🔌 Подключите устройство кабелем и подтвердите запрос на разрешение отладки на экране.
- ✅ Проверьте соединение командой
adb devices— устройство должно отображаться со статусомdevice.
Если в списке adb devices устройство видно как unauthorized, отзовите разрешения отладки в настройках разработчика и подключите кабель заново — появится диалог подтверждения. Статус offline чаще всего лечится перезапуском сервера командой adb kill-server с последующим adb start-server.
⚠️ Внимание: путь к пунктам «Номер сборки» и «Отладка по USB» может отличаться в оболочках производителей (MIUI, One UI, ColorOS). Если не находите нужный раздел, сверьтесь с документацией конкретной модели.
☑️ Подготовка к работе с getprop
Синтаксис команды adb shell getprop
Базовая форма команды предельно проста. Запуск без аргументов выводит полный список всех свойств устройства:
adb shell getprop
Чтобы получить значение одного конкретного свойства, передайте его имя аргументом:
adb shell getprop ro.product.model
Вывод полного списка имеет формат [ключ]: [значение] — квадратные скобки являются частью оформления, а не самих данных. При запросе одиночного ключа возвращается только значение, без имени свойства, что удобно для использования в скриптах. Если ключ не существует, команда вернёт пустую строку без ошибки — это важно учитывать при автоматизации.
Обратите внимание: getprop выполняется внутри оболочки устройства, поэтому вся конструкция adb shell getprop ... — это последовательность «подключиться к shell и запустить там утилиту getprop». Саму утилиту можно вызывать и в интерактивной сессии adb shell.
Самые полезные системные свойства
Полный дамп содержит сотни записей, но на практике регулярно нужны лишь несколько десятков ключей. Ниже — те, что востребованы чаще всего.
| Ключ | Что возвращает | Пример значения |
|---|---|---|
ro.product.model | Маркетинговое имя модели | Pixel 7 |
ro.build.version.release | Версия Android | 14 |
ro.build.version.sdk | Уровень API | 34 |
ro.build.fingerprint | Полный фингерпринт сборки | google/panther/panther:14/... |
ro.serialno | Серийный номер устройства | зависит от устройства |
sys.boot_completed | Завершена ли загрузка (1 — да) | 1 |
Отдельного внимания заслуживает ro.build.fingerprint — это самая информативная строка для идентификации прошивки: она объединяет бренд, кодовое имя устройства, версию системы и идентификатор сборки. Именно фингерпринт стоит прикладывать к баг-репортам и запросам в поддержку.
Свойство sys.boot_completed полезно в скриптах: перед выполнением действий на устройстве автоматизация может дождаться значения 1, чтобы гарантировать, что система полностью загрузилась. Аналогично service.bootanim.exit сигнализирует о завершении анимации загрузки.
Фильтрация вывода: как найти нужное свойство
Когда точное имя ключа неизвестно, полный список фильтруют по подстроке. На Windows в cmd или PowerShell используется findstr:
adb shell getprop | findstr "product"
На Linux и macOS применяется grep:
adb shell getprop | grep "density"
Такой подход помогает, например, отыскать все свойства, связанные с экраном (display, density), сетью (gsm, wifi) или регионом (locale, country). Учтите, что фильтрация чувствительна к регистру: имена свойств в Android традиционно пишутся строчными буквами.
- 🔍 Ищите по корню слова:
buildпокажет и версию, и фингерпринт, и дату сборки. - 🧩 Комбинируйте фильтры, если совпадений слишком много — например, сначала
ro., затем уточняющее слово. - 📄 Сохраняйте дамп в файл и ищите уже в нём, если устройство отвечает медленно.
Запись свойств и почему setprop отличается от getprop
Логичный вопрос после знакомства с чтением: можно ли изменить свойство? Для этого существует команда setprop, но её возможности сильно ограничены. Обычный shell-пользователь без root может менять лишь небольшой набор свойств, а ключи ro.* не изменяются в принципе — они фиксируются при загрузке.
Даже при наличии root-доступа правка системных свойств — рискованная операция: некоторые службы читают значения только при старте и не заметят изменения, а некорректные правки отдельных ключей способны нарушить работу системы. Для подавляющего большинства задач диагностики достаточно чтения через getprop.
⚠️ Внимание: изменение свойств через setprop с root-правами может привести к нестабильной работе устройства или bootloop. Перед экспериментами убедитесь, что у вас есть резервная копия данных и вы понимаете назначение конкретного ключа.
Типичные ошибки и их решения
Проблемы при работе с getprop почти всегда связаны не с самой командой, а с окружением ADB. Разберём частые сценарии.
«adb: command not found» — утилита не установлена или её путь не добавлен в переменную окружения PATH. Решение: установить Platform Tools и либо прописать путь, либо запускать команды из папки с adb.
«error: no devices/emulators found» — компьютер не видит устройство. Проверьте кабель (некоторые кабели передают только питание), включённую отладку по USB и драйверы устройства на Windows. Пустой ответ на запрос ключа означает, что такого свойства нет на данном устройстве — набор ключей различается между производителями и версиями Android, поэтому отсутствие значения не является ошибкой.
Почему на разных устройствах разный набор свойств
Производители добавляют собственные ключи для фирменных функций, а часть стандартных свойств появляется или исчезает между версиями Android. Поэтому скрипты, рассчитанные на конкретный ключ, стоит проверять на целевом устройстве — надёжнее обрабатывать случай пустого значения.
Практические примеры использования
Соберём типовые сценарии, где getprop экономит время. Быстрая проверка версии системы перед установкой приложения с ограничением по API:
adb shell getprop ro.build.version.sdk
Ожидание полной загрузки устройства в скрипте автоматизации реализуется циклом с опросом sys.boot_completed, пока значение не станет равным 1. Определение плотности экрана для тестирования интерфейса — через ключ ro.sf.lcd_density, если он присутствует на устройстве.
Для диагностики региональных настроек полезны свойства с префиксом persist.sys. — например, persist.sys.locale и persist.sys.timezone. Они показывают, какие язык и часовой пояс реально закреплены в системе, что помогает при отладке локализации приложений.
Часто задаваемые вопросы
Нужен ли root для adb shell getprop?
Нет. Чтение системных свойств доступно обычному shell-пользователю, root-доступ не требуется. Ограничения касаются в основном записи через setprop.
Почему getprop возвращает пустую строку?
Запрошенный ключ не существует на данном устройстве. Набор свойств зависит от производителя и версии Android. Найдите похожий ключ, отфильтровав полный вывод по подстроке.
Чем getprop отличается от settings get?
getprop читает системные свойства — низкоуровневую конфигурацию, задаваемую при загрузке. Команда settings get обращается к базе настроек Android (system, secure, global), которую меняют пользователь и приложения. Это разные хранилища с разным назначением.
Можно ли выполнить getprop без кабеля, по Wi-Fi?
Да, если настроена отладка по сети: устройство и компьютер должны быть в одной сети, а подключение выполняется через adb connect с указанием IP-адреса. После этого все команды, включая getprop, работают как при USB-подключении.
Как сохранить все свойства в файл?
Перенаправьте вывод: adb shell getprop > props.txt на Windows, Linux или macOS. Файл появится в текущей рабочей папке терминала.