Найти 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 и как это исправить

Основные причины и решения

  1. Scoped IDs и политика приватности (Android 8+ / 10+)
  • На новых версиях Android идентификатор может быть скоупнут для пары app+подпись или app+user. Некорректный вызов из контекста сервисов может вернуть null.
  • Решение: обеспечить вызов в контексте приложения с корректной подписью; использовать App‑specific IDs (App Set ID) или Firebase Instance ID для аналитики.
  1. Отсутствие прав или ограничение платформы
  • Вызов из системных или неподписанных компонентов может вернуть null.
  • Решение: выполняйте код внутри приложения с доступом к ContentResolver; не ожидайте Android ID для служб без контекста приложения.
  1. Эмуляторы и некоторые виртуалки
  • Эмуляторы иногда возвращают фиксированный «9774d56d682e549c» или null.
  • Решение: в эмуляторе задайте стабильный android_id через avd конфиг или тестовые флаги; тестируйте на реальных устройствах.
  1. Factory reset, смена учётной записи, кастомные ROM и root
  • Reset или некорректная прошивка может сбросить или не сгенерировать ID.
  • Решение: прогенерировать новый ID стандартным поведением ОС (девайс перезапустить/создать новую учётную запись) или использовать более стабильные идентификаторы уровня приложения.
  1. 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 или серверный идентификатор решает большинство проблем.