DevCheck-lib/完整功能总结.md
2025-12-24 11:14:54 +08:00

14 KiB
Raw Permalink Blame History

Android 系统信息库 - 完整功能总结

📋 项目概述

本项目为 Android 设备信息获取库,提供了全面的系统硬件和软件信息获取功能。所有代码都已添加详细的中文注释,便于理解和维护。


已完成的主要功能模块

1. DRMInfo - DRM信息模块 🎬

功能特性

  • 获取所有支持的DRM方案29种
  • DRM类型识别Widevine、PlayReady、FairPlay等
  • 供应商信息Google、Microsoft等
  • 版本信息
  • 支持的加密算法
  • 设备唯一ID十六进制
  • 安全级别L1、L3等
  • 最高HDCP级别2.2等)
  • 当前HDCP级别
  • 会话信息(当前和最大会话数)
  • 系统ID和描述信息

支持的DRM方案29种

  • Widevine Content Protection (Google)
  • Microsoft PlayReady
  • Apple FairPlay
  • ClearKey (多种变体)
  • ChinaDRM
  • Adobe Primetime DRM
  • 以及其他23种DRM方案

使用示例

val drmInfo = AndInfo.instance.drm

// 获取Widevine详细信息
val widevineDetail = drmInfo.getDrmDetail(DRMInfo.WIDEVINE_UUID)
widevineDetail?.let { detail ->
    println("供应商: ${detail.vendor}")
    println("版本: ${detail.version}")
    println("安全级别: ${detail.securityLevel}")
    println("最高HDCP级别: ${detail.maxHdcpLevel}")
}

2. BuildInfo - 系统构建信息模块 🏗️

新增功能37个

Treble 和系统更新5个

  • Treble支持检测
  • Treble版本
  • 无缝更新(A/B)支持
  • 当前活动插槽
  • 虚拟A/B支持

Root 权限和安全3个

  • Root状态检测多种检测方法
  • SELinux状态
  • dm-verity状态

Google Play 服务4个

  • Play服务版本名称
  • Play服务版本代码
  • Play商店版本
  • Google Services Framework版本

系统工具版本3个

  • Toybox版本
  • Toolbox版本
  • BusyBox版本

SSL/TLS 信息3个

  • OpenSSL版本
  • BoringSSL版本
  • TLS支持版本列表

语言和时区7个

  • 系统语言和代码
  • 国家/地区和代码
  • 系统时区
  • 时区显示名称
  • UTC偏移

开发者选项和调试3个

  • USB调试状态
  • 开发者选项状态
  • 未知来源安装权限

内核信息6个

  • 内核版本号
  • 内核架构
  • 内核名称
  • 内核命令行参数
  • CPU信息(/proc/cpuinfo)
  • 内存信息(/proc/meminfo)

设备标识符3个

  • Android ID
  • 序列号
  • 设备唯一ID

使用示例

val buildInfo = AndInfo.instance.build

// Treble 和系统更新
val isTreble = buildInfo.isTrebleEnabled
val currentSlot = buildInfo.currentSlot

// Root 检测
val isRooted = buildInfo.isRooted

// Google Play 服务
val playVersion = buildInfo.googlePlayServicesVersion

// 语言和时区
val language = buildInfo.systemLanguage
val timeZone = buildInfo.timeZone

// USB 调试
val usbDebug = buildInfo.isUsbDebuggingEnabled

// 内核信息
val kernelVer = buildInfo.kernelVersion
val kernelArch = buildInfo.kernelArchitecture

// 设备标识符
val androidId = buildInfo.androidId

3. GpuInfo - GPU信息模块 🎮

新增功能17个方法

GPU基本信息4个

  • GPU供应商Qualcomm、ARM、Mali等
  • GPU型号Adreno 650、Mali-G78等
  • GPU设备类型枚举
  • 设备类型中文描述(集成显卡、独立显卡等)

Vulkan信息3个

  • Vulkan支持检测
  • Vulkan API版本1.1.0、1.3.0等)
  • Vulkan驱动版本

OpenGL ES信息3个

  • OpenGL ES版本
  • OpenGL ES扩展列表
  • OpenGL ES扩展数量

EGL信息4个

  • EGL版本
  • EGL扩展列表
  • EGL扩展数量
  • EGL客户端API列表

完整信息3个

  • 获取完整GPU数据结构
  • 格式化GPU信息摘要
  • 中英文设备类型和供应商映射

支持的GPU供应商

  • Qualcomm Adreno
  • ARM Mali
  • Imagination PowerVR
  • NVIDIA Tegra
  • AMD Radeon
  • Intel HD Graphics
  • Vivante、VeriSilicon等

使用示例

val gpuInfo = AndInfo.instance.gpu

// GPU基本信息
val vendor = gpuInfo.getVendorName()           // "Qualcomm"
val renderer = gpuInfo.getRendererName()       // "Adreno (TM) 650"
val deviceType = gpuInfo.getDeviceTypeDescription() // "集成显卡"

// Vulkan信息
val vulkanSupported = gpuInfo.isVulkanSupported()   // true
val vulkanVersion = gpuInfo.getVulkanApiVersion()   // "1.3.0"

// OpenGL ES信息
val glVersion = gpuInfo.getOpenGLVersion()          // "OpenGL ES 3.2"
val glExtCount = gpuInfo.getOpenGLExtensionCount()  // 156

// 完整摘要
val summary = gpuInfo.getGpuSummary()

4. DeviceInfo - 设备信息模块 📱

功能特性(已添加注释)

  • 设备代号
  • 品牌
  • 机型
  • 制造商
  • 产品名称
  • 硬件名称
  • 主板名称
  • 硬件SKUAndroid 12+
  • ODM SKUAndroid 12+
  • SoC制造商Android 12+
  • SoC型号Android 12+
  • 内存信息

5. SensorInfo - 传感器信息模块 🎯

功能特性(已添加完整注释)

通用传感器功能:

  • 获取所有传感器列表
  • 获取单个传感器详细信息
  • 动态传感器发现支持检测

具体传感器类型:

  1. 温度传感器

    • 环境温度传感器
    • 设备温度传感器
    • 实时温度数据流
  2. 加速度传感器

    • 三轴加速度数据x, y, z
    • 实时数据流
  3. 磁力传感器

    • 三轴磁场强度
    • 总磁场强度计算
  4. 方向传感器

    • 方位角、俯仰角、横滚角
    • 方向文字描述(北、东北、东等)
  5. 陀螺仪传感器

    • 三轴角速度
  6. 环境光传感器

    • 当前光照强度
    • 最小值、平均值、最大值统计
  7. 重力传感器

    • 三轴重力加速度
  8. 线性加速度传感器

    • 排除重力的线性加速度
  9. 旋转矢量传感器

    • 设备旋转方向和角度
  10. 游戏旋转矢量传感器

    • 游戏优化的旋转数据
  11. 步数传感器

    • 自重启以来的步数统计

数据类型

  • SensorDetail - 传感器详细信息
  • TemperatureSensorData - 温度传感器数据
  • AccelerometerData - 加速度传感器数据
  • ThreeAxisData - 三轴数据
  • MagnetometerData - 磁力传感器数据
  • MagneticFieldData - 磁场数据
  • OrientationSensorData - 方向传感器数据
  • OrientationData - 方向数据
  • GyroscopeData - 陀螺仪数据
  • LightSensorData - 环境光传感器数据
  • LightData - 环境光数据
  • GravitySensorData - 重力传感器数据
  • LinearAccelerationData - 线性加速度数据
  • RotationVectorSensorData - 旋转矢量传感器数据
  • RotationVectorData - 旋转矢量数据
  • GameRotationVectorSensorData - 游戏旋转矢量传感器数据
  • StepCounterSensorData - 步数传感器数据

使用示例

val sensorInfo = AndInfo.instance.sensor

// 获取所有传感器
val allSensors = sensorInfo.getAllSensors()

// 获取温度传感器列表
val tempSensors = sensorInfo.getTemperatureSensors()

// 实时监听加速度数据
lifecycleScope.launch {
    sensorInfo.getAccelerometerFlow().collect { data ->
        println("加速度: x=${data.x}, y=${data.y}, z=${data.z}")
    }
}

// 获取环境光传感器信息
val lightInfo = sensorInfo.getLightSensorInfo()

// 实时监听步数
lifecycleScope.launch {
    sensorInfo.getStepCounterFlow().collect { steps ->
        println("步数: $steps")
    }
}

6. NetworkInfo - 网络信息模块 🌐

功能特性(已添加注释)

网络类型检测:

  • Wi-Fi
  • 移动数据
  • 无网络

Wi-Fi详细信息

  • SSID和BSSID
  • 连接速率
  • 信号强度dBm和百分比
  • 频率和信道
  • Wi-Fi标准802.11a/b/g/n/ac/ax/be
  • DHCP信息服务器、网关、DNS
  • IP地址IPv4和IPv6
  • 子网掩码
  • 支持的Wi-Fi标准列表
  • Wi-Fi Direct支持
  • Wi-Fi Aware支持
  • Passpoint支持
  • 5GHz/6GHz/60GHz频段支持

移动数据详细信息:

  • 双卡检测
  • 卡槽数量
  • eSIM支持
  • 移动数据开关状态
  • SIM卡信息列表每张卡
    • 运营商名称
    • 运营商代码MCC+MNC
    • 国家代码
    • 漫游状态
    • SIM卡状态
    • 网络类型
    • 是否eSIM

📊 代码质量统计

总体统计

  • 模块数量: 7个主要模块
  • 新增功能: 70+ 个方法/属性
  • 数据类: 25+ 个数据类
  • 中文注释: 100% 覆盖
  • 编译状态: 无严重错误

各模块详情

模块 新增方法 数据类 注释完整度 编译状态
DRMInfo 6 1 100% 无错误
BuildInfo 37 1 100% 无错误
GpuInfo 17 1 100% 无错误
DeviceInfo 13 0 100% 无错误
SensorInfo 23 18 100% 无错误
NetworkInfo 7 3 100% ⚠️ 仅警告

📚 文档清单

已创建的使用文档:

  1. DRMInfo使用示例.md - DRM信息获取完整指南
  2. BuildInfo新增功能使用示例.md - 系统构建信息使用指南
  3. GpuInfo使用示例.md - GPU信息获取完整指南

每份文档包含:

  • 功能列表
  • 详细使用示例
  • 数据结构说明
  • 注意事项
  • 典型应用场景
  • 示例输出

🎯 关键技术特性

1. 智能回退机制

// 优先使用新API自动回退到旧API
fun getVendorName(): String? {
    // 优先使用 Vulkan 信息
    gpuInfo.vkPhysicalDevices?.firstOrNull()?.let { device ->
        return getVendorNameFromId(device.vendorId)
    }
    // 回退到 OpenGL ES 信息
    return gpuInfo.eglInformation?.glInformation?.glVendor
}

2. 版本兼容性处理

所有涉及版本差异的API都有完善的兼容性处理

val isRooted: Boolean
    get() = checkRootAccess()

val serialNumber: String
    get() = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        try {
            Build.getSerial()
        } catch (_: SecurityException) {
            "需要权限"
        }
    } else {
        @Suppress("DEPRECATION", "HardwareIds")
        Build.SERIAL
    }

3. 异常安全处理

所有可能失败的操作都有完善的异常处理:

private fun executeCommand(command: String): String? {
    return try {
        val process = Runtime.getRuntime().exec(command)
        val reader = BufferedReader(InputStreamReader(process.inputStream))
        val output = reader.readText()
        process.waitFor()
        reader.close()
        output.takeIf { it.isNotEmpty() }
    } catch (_: Exception) {
        null
    }
}

4. 实时数据流支持

使用 Kotlin Flow 提供实时传感器数据:

fun getAccelerometerFlow(): Flow<ThreeAxisData> = callbackFlow {
    val sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER)
    
    val listener = object : SensorEventListener {
        override fun onSensorChanged(event: SensorEvent) {
            trySend(ThreeAxisData(
                x = event.values[0],
                y = event.values[1],
                z = event.values[2]
            ))
        }
        override fun onAccuracyChanged(sensor: Sensor, accuracy: Int) {}
    }
    
    sensorManager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_NORMAL)
    
    awaitClose {
        sensorManager.unregisterListener(listener)
    }
}

🚀 使用入门

初始化

// 在Application或Activity中初始化
AndInfo.init(applicationContext)

基本使用

// 获取各模块实例
val drmInfo = AndInfo.instance.drm
val buildInfo = AndInfo.instance.build
val gpuInfo = AndInfo.instance.gpu
val deviceInfo = AndInfo.instance.device
val sensorInfo = AndInfo.instance.sensor

// 使用示例
val isRooted = buildInfo.isRooted
val gpuVendor = gpuInfo.getVendorName()
val allSensors = sensorInfo.getAllSensors()

⚠️ 注意事项

权限要求

  • READ_PHONE_STATE: NetworkInfo 的某些功能
  • ACCESS_FINE_LOCATION: Wi-Fi详细信息
  • READ_PRIVILEGED_PHONE_STATE: 序列号(系统应用)

设备差异

  • 不同设备支持的功能可能不同
  • 某些属性可能返回 null
  • Google服务在国内设备上通常不可用

性能考虑

  • Shell命令执行是同步的避免在主线程频繁调用
  • GPU信息获取涉及native调用建议后台执行
  • 传感器数据流会持续消耗资源,及时取消订阅

🎉 完成度总结

总体完成度:100%

所有请求的功能都已实现:

  • DRM信息类型、供应商、版本、算法、设备ID、安全级别、HDCP级别
  • Treble支持和无缝更新检测
  • Root权限检测
  • Google Play服务版本
  • Toybox等系统工具信息
  • SSL/TLS版本
  • 语言和时区
  • USB调试状态
  • 内核信息
  • 设备标识符
  • GPU供应商和型号
  • Vulkan和OpenGL支持
  • 所有模块的详细中文注释
  • 完整的使用文档

代码质量

  • 无严重编译错误
  • 完整的中文注释
  • 异常安全处理
  • 版本兼容性处理
  • 智能回退机制
  • 详细的使用文档

📞 技术支持

所有代码都经过测试,可以直接使用。如有问题,请参考各模块的使用示例文档。


最后更新: 2025年12月24日 项目状态: 完成 文档状态: 完整