Найти Android ID и Device ID быстро и исправить null
Android ID — программный уникальный идентификатор (для устройства/пользователя/приложения), Device ID — аппаратный идентификатор (IMEI/MEID/серийный номер). Посмотреть их можно в Настройки → О телефоне, через *#06# или ADB; Android ID бывает null из‑за scoped‑идентификаторов, отсутствия прав или эмуляторов — ниже приведены конкретные проверки и способы обхода.
Что такое Android ID и Device ID и в чём разница
Android ID
- Программный 64‑битный идентификатор (Settings.Secure.ANDROID_ID).
- Может быть уникален для комбинации app+подпись (scoped) на новых версиях Android.
- Меняется при factory reset, при смене учётной записи на устройстве или при политике приватности ОС.
Device ID
- Аппаратный (IMEI/MEID) — привязан к модему/сим‑слоту; серийный номер — ro.serialno.
- Не меняется после производства (за исключением аппаратной замены).
- Используется операторами, сервисами связи и низкоуровневыми функциями.
Быстрая таблица сравнения
| Идентификатор | Источник | Меняется | Применение |
|---|---|---|---|
| Android ID | ОС (Settings.Secure) | Да: reset/учётка/scoped | Аналитика, персонализация, авторизация в приложениях |
| Device ID (IMEI/серийник) | Аппаратно/прошивка | Нет (аппаратно) | Сеть, звонки, привязка аккаунта оператора |
Где посмотреть: пошагово для пользователя и разработчика
Для пользователя
- Настройки → О телефоне → Статус / Идентификаторы — ищите Android ID и IMEI.
- Наберите *#06# в звонилке — моментально покажет IMEI(я).
- Включите режим разработчика: Настройки → О телефоне → 7 тапов по "Номер сборки", затем → Для разработчиков (если нужно дополнительное отображение).
Для разработчика / продвинутого пользователя
- ADB:
- IMEI/серийник: adb shell getprop ro.serialno
- Просмотр Android ID на устройстве: adb shell settings get secure android_id
- В коде Android:
- Получение:
String androidId = Settings.Secure.getString(getContentResolver(), Settings.Secure.ANDROID_ID);
- Инструменты: AIDA64, Device Info HW, CPU‑Z показывают набор идентификаторов.
На планшетах без модема IMEI может отсутствовать — используйте Android ID или серийник устройства.
Почему Android ID бывает null и как это исправить
Основные причины и решения
- Scoped IDs и политика приватности (Android 8+ / 10+)
- На новых версиях Android идентификатор может быть скоупнут для пары app+подпись или app+user. Некорректный вызов из контекста сервисов может вернуть null.
- Решение: обеспечить вызов в контексте приложения с корректной подписью; использовать App‑specific IDs (App Set ID) или Firebase Instance ID для аналитики.
- Отсутствие прав или ограничение платформы
- Вызов из системных или неподписанных компонентов может вернуть null.
- Решение: выполняйте код внутри приложения с доступом к ContentResolver; не ожидайте Android ID для служб без контекста приложения.
- Эмуляторы и некоторые виртуалки
- Эмуляторы иногда возвращают фиксированный «9774d56d682e549c» или null.
- Решение: в эмуляторе задайте стабильный android_id через avd конфиг или тестовые флаги; тестируйте на реальных устройствах.
- Factory reset, смена учётной записи, кастомные ROM и root
- Reset или некорректная прошивка может сбросить или не сгенерировать ID.
- Решение: прогенерировать новый ID стандартным поведением ОС (девайс перезапустить/создать новую учётную запись) или использовать более стабильные идентификаторы уровня приложения.
- Deprecated/недоступные разрешения
- READ_PHONE_STATE и пр. устарели и не дают гарантии доступа.
- Решение: не полагайтесь на эти разрешения; переходите на Advertising ID (если подходит) или App Set ID.
Нельзя пытаться обходить ограничения (чтение через приватные API или манипуляции с системными файлами) — это нарушает политику магазинов и может привести к блокировкам.
Частые ошибки
- Ожидать, что Android ID постоянен между переустановками приложения — нет, он может быть скоупнут.
- Использовать IMEI там, где устройство без модема — будет отсутствовать.
- Тестировать только в эмуляторе и считать результат глобальным.
FAQ
- Как быстро узнать IMEI? — Наберите *#06# или в Настройки → О телефоне → IMEI.
- Вернёт ли Android ID null на реальном устройстве? — В редких случаях: при ошибках прошивки или если вызов выполняется вне контекста приложения.
- Что использовать для аналитики? — App Set ID (Android 12+), Advertising ID (если разрешено) или Firebase Instance ID — они более стабильны и соответствуют требованиям приватности.
- Можно ли хранить ID в открытом виде? — Нет; шифруйте и минимизируйте сроки хранения (GDPR/CCPA).
Заключение: для большинства задач пользуйтесь Android ID или современными app‑level идентификаторами (App Set ID, Firebase), проверяйте на реальных устройствах и обрабатывайте null‑случаи — fallback на безопасный UUID, Advertising ID или серверный идентификатор решает большинство проблем.