You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin开发Android应用如何编程获取CPU/GPU/RAM等硬件信息

Android Kotlin 实现设备硬件信息编程获取

前置配置

在AndroidManifest.xml中添加所需权限:

<!-- Android 12+ 读取部分硬件信息需声明该权限 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

注:RAM、CPU基础信息获取无需动态申请权限,部分厂商ROM对系统节点读取做了限制,无权限时会返回兜底值


RAM(运行内存)获取

通过系统ActivityManager服务读取物理内存总大小、可用大小,全版本系统通用:

import android.app.ActivityManager
import android.content.Context

fun getDeviceRam(context: Context): RamInfo {
    val am = context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
    val memInfo = ActivityManager.MemoryInfo()
    am.getMemoryInfo(memInfo)
    return RamInfo(
        totalBytes = memInfo.totalMem,
        availableBytes = memInfo.availMem,
        isLowMemory = memInfo.lowMemory
    )
}

data class RamInfo(
    val totalBytes: Long,
    val availableBytes: Long,
    val isLowMemory: Boolean
)

返回值单位为字节,可自行除以1024 * 1024 * 1024转换为GB单位。


CPU信息获取

包含CPU型号、物理核心数两个维度,核心数通过系统Runtime接口获取,型号读取系统CPU信息节点兜底:

import android.os.Build
import java.io.File

fun getCpuInfo(): CpuInfo {
    // 获取CPU核心数
    val coreCount = Runtime.getRuntime().availableProcessors()
    // 读取CPU型号
    var model = ""
    runCatching {
        File("/proc/cpuinfo").forEachLine { line ->
            when {
                line.contains("model name", true)
                        || line.contains("Hardware", true)
                        || line.contains("Processor", true) -> {
                    val parts = line.split(":")
                    if (parts.size >= 2) {
                        model = parts[1].trim()
                        return@forEachLine
                    }
                }
            }
        }
    }
    // 节点读取失败时兜底取系统硬件标识
    if (model.isBlank()) model = Build.HARDWARE
    return CpuInfo(
        model = model,
        coreCount = coreCount
    )
}

data class CpuInfo(
    val model: String,
    val coreCount: Int
)

注:部分定制ROM会修改/proc/cpuinfo节点内容,兜底返回的Build.HARDWARE为硬件板卡标识,和民用CPU型号存在命名差异,属于正常情况


GPU信息获取

Android未提供GPU信息统一读取公开API,型号需通过OpenGL渲染上下文获取,显存仅能通过厂商私有节点读取:

import android.opengl.GLES20
import java.io.File

// 必须在GL渲染线程调用,建议在GLSurfaceView.Renderer的onSurfaceCreated回调中执行
fun getGpuModel(): String {
    return GLES20.glGetString(GLES20.GL_RENDERER) ?: "Unknown"
}

// 显存仅适配高通、联发科主流芯片,其余品牌芯片需自行匹配对应系统节点
fun getGpuVramBytes(): Long {
    val nodeList = listOf(
        "/sys/class/kgsl/kgsl-3d0/mem/max_alloc", // 高通芯片节点
        "/sys/module/ged/parameters/gx_mem_total" // 联发科芯片节点
    )
    nodeList.forEach { path ->
        runCatching {
            val file = File(path)
            if (file.exists()) return file.readText().trim().toLong()
        }
    }
    return 0L
}

data class GpuInfo(
    val model: String,
    val vramBytes: Long
)

注:GPU型号无法在主线程直接获取,必须等OpenGL上下文初始化完成后调用;显存无全机型通用获取方案,返回0时代表当前机型未匹配到读取节点


所有硬件信息读取结果均受系统版本、厂商ROM定制策略影响,不存在100%覆盖所有设备的实现方案,业务逻辑必须做好空值、异常值兜底。

内容的提问来源于stack exchange,提问作者Art

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 22:18:42