В Jetpack-проекте на Kotlin чаще всего нужен не настоящий UUID устройства, а стабильный идентификатор для приложения. Для этого обычно используют Settings.Secure.ANDROID_ID. В Compose не стоит читать его прямо в каждом @Composable: лучше получить id в слое данных или ViewModel и передать в UI как состояние
Базовая функция выглядит так:
fun readAndroidId(context: Context): String {
return Settings.Secure.getString(
context.contentResolver,
Settings.Secure.ANDROID_ID
)
}
Вариант для Compose
Если нужен быстрый учебный пример, можно прочитать id через LocalContext, но важно помнить: это не лучший вариант для большой архитектуры
@Composable
fun DeviceIdScreen() {
val context = LocalContext.current
val deviceId = remember {
Settings.Secure.getString(
context.contentResolver,
Settings.Secure.ANDROID_ID
)
}
Text(text = "ID: $deviceId")
}
Такой пример помогает увидеть результат, но для реального приложения лучше вынести получение id из UI
Более чистый вариант
Создайте провайдер:
class DeviceIdProvider(
private val context: Context
) {
fun getDeviceId(): String {
return Settings.Secure.getString(
context.contentResolver,
Settings.Secure.ANDROID_ID
)
}
}
Затем передайте его во ViewModel через вашу DI-схему, factory или репозиторий. Compose будет только отображать значение:
@Composable
fun DeviceIdScreen(viewModel: DeviceViewModel) {
Text(text = viewModel.deviceId)
}
Когда лучше генерировать свой UUID
Если вам нужен идентификатор установки приложения, а не Android ID, сгенерируйте UUID один раз:
val appInstallId = UUID.randomUUID().toString()
После этого сохраните его в DataStore. Такой идентификатор будет понятнее по смыслу: он относится к установке приложения. Если пользователь удалит приложение и поставит заново, id можно создать заново
Для Jetpack-проекта это часто самый честный вариант: UI не знает, откуда пришел id, ViewModel получает готовое значение, а слой хранения решает, читать старый UUID или создавать новый
Как проверить
- Запустите экран на эмуляторе.
- Убедитесь, что
Textпоказывает непустую строку. - Перезапустите приложение.
- Проверьте, что значение не меняется между обычными запусками.
Не выводите идентификатор в публичный интерфейс без причины. В статье это удобно для проверки, но в продукте такие данные лучше скрывать
Частые ошибки
Называть ANDROID_ID серийным номером
Это не серийный номер устройства. Это Android ID, и его правила зависят от Android
Читать id в каждом recomposition
В Compose функция может вызываться много раз. Используйте remember для учебного примера или, лучше, передавайте готовое значение из ViewModel
Использовать id для логина
Не привязывайте аккаунт только к идентификатору устройства. Для авторизации нужен нормальный серверный механизм
Показывать id пользователю без смысла
Идентификатор полезен для диагностики, но в обычном интерфейсе он только пугает и занимает место. Если нужен экран поддержки, можно добавить кнопку «Скопировать диагностический ID», но не выводить его постоянно
Что почитать дальше по Kotlin
Если нужен общий маршрут по теме, откройте рубрику Kotlin. Для соседних задач пригодятся эти разборы:
- UUID Android-устройства в Kotlin ViewModel: как получить безопасно
- Kotlin Android: первый экран без перегруза
- Как в Android Studio поменять Kotlin на Java
- Как воспроизвести аудио на Kotlin в Android Studio



