ITmob-Ly
发布于 2023-06-19 / 273 阅读
0

在 Kotlin 和 Android 中怎样生成 UUID?

通用唯一标识符 UUID (Universally Unique Identifier)通常用于软件系统中的唯一标识。UUID 是 128 位的字符序列,在 Kotlin 中,生成 UUID 非常简单,可以通过使用 java.util.UUID 类来实现。

生成随机 UUID

在 Kotlin 中生成 UUID 最简单的方法是通过 java.util.UUIDrandomUUID() 方法生成随机 UUID,该方法返回一个随机生成的 UUID。

示例:

package cn.itmob.demo

import java.util.UUID

fun main() {
    val uuid = UUID.randomUUID()
    println("UUID: $uuid")
}

// 输出:UUID: 5028e59a-47a5-431a-8c8e-03695b6e1bf1

在 Android 中使用 UUID

在 Android 开发中 UUID 可用于多种目的,比如作为数据库中数据生成唯一标识符或作为用户的唯一标识符。

这里以生成 UUID 作为用户唯一标识为例:

  1. 使用最简单的方式生成随机 UUID 作为用户的唯一标识

    package cn.itmob.demo
    
    import java.util.UUID
    
    fun generateDeviceUUID() = UUID.randomUUID().toString()
    

    生成的随机 UUID 可以缓存到本地,用户升级也可以继续作为唯一标识。但是这种方式生成的 UUID 是随机的,用户卸载重新安装或清楚缓存后,需要重新生成新的 UUID。

  2. 使用指定的数据构造一个新的 UUID

    使用固定数据构造的 UUID,即使应用重新安装或清理数据后仍然能保持不变。

    package cn.itmob.demo
    
    fun generateDeviceUUID(context: Context): String {
        val androidId = Settings.Secure.getString(context.contentResolver, Settings.Secure.ANDROID_ID)
        val serialNumber = Build.SERIAL
        val uuid = UUID(androidId.hashCode().toLong(), serialNumber.hashCode().toLong())
        return uuid.toString()
    }
    
    // 输出:00000000-232e-4d86-ffff-fffacf05cb4b
    

    这里只是以 ANDROID_IDSERIAL (设备序列号)为例作为固定数据生成 UUID。
    但是这种方式已经不再推荐使用:

    1. Android_ID 不推荐使用,因为它是永久性的唯一ID,可用于跟踪您的用户。
    2. Serial/序列号,在Android 8/Oreo (API 级别 26) 开始推荐使用 android.os.Build.getSerial() 方法获取,并且需要 READ_PHONE_STATE 权限。继续使用 android.os.Build.SERIAL 返回的只是 “unknown”。从 Android 10/Q(API 级别29)对于序列号的保护更加严格,需要 READ_PRIVILEGED_PHONE_STATE 权限,也就是预装应用才可以拥有读取序列号的权限。

更多关于如何生成和管理拥有唯一标识的内容参见文档: https://developer.android.com/training/articles/user-data-ids.html