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

Android 11+下通过NDK(C++)获取硬件信息的技术求助

Android 11+ 借助NDK获取硬件信息(处理器ID/设备序列号)

核心逻辑

Android 11及以上在Java层限制了硬件标识的直接访问,但部分底层系统文件仍保留相关信息,可通过NDK的C/C++代码读取对应节点来获取目标数据。

具体实现方案

1. 获取处理器ID(以ARM架构为例)

ARM架构设备的处理器ID通常存放在/proc/cpuinfo文件中,对应Processor或Serial字段(不同厂商可能有差异)。

C++代码示例:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char* get_cpu_id() {
    FILE* fp = fopen("/proc/cpuinfo", "r");
    if (!fp) return NULL;

    char* line = NULL;
    size_t len = 0;
    ssize_t read;
    static char cpu_id[256] = {0};

    while ((read = getline(&line, &len, fp)) != -1) {
        if (strstr(line, "Processor") != NULL) {
            char* ptr = strchr(line, ':');
            if (ptr) {
                ptr += 2; // 跳过冒号与空格
                strncpy(cpu_id, ptr, strlen(ptr)-1); // 移除换行符
                break;
            }
        }
    }

    fclose(fp);
    if (line) free(line);
    return strlen(cpu_id) > 0 ? cpu_id : NULL;
}

2. 获取设备序列号

设备序列号可尝试从/proc/cmdline(部分设备启动参数会携带)读取,格式通常为androidboot.serialno=xxxxxx;也可读取/sys/class/net/eth0/address获取MAC地址作为替代标识(需注意部分设备路径可能不同)。

读取/proc/cmdline的C++示例:

char* get_serial_number() {
    FILE* fp = fopen("/proc/cmdline", "r");
    if (!fp) return NULL;

    char cmdline[1024] = {0};
    fread(cmdline, 1, sizeof(cmdline)-1, fp);
    fclose(fp);

    char* serial_ptr = strstr(cmdline, "androidboot.serialno=");
    if (serial_ptr) {
        serial_ptr += strlen("androidboot.serialno=");
        char* end_ptr = strchr(serial_ptr, ' ');
        if (end_ptr) *end_ptr = '\0';
        static char serial[64] = {0};
        strncpy(serial, serial_ptr, sizeof(serial)-1);
        return serial;
    }
    return NULL;
}

关键注意事项

  • 权限与SELinux限制:多数/proc、/sys下的系统文件无需额外权限,但部分设备可能因SELinux规则限制读取,需实际测试适配。
  • 设备兼容性:不同芯片厂商(高通、联发科等)的硬件信息存储路径存在差异,需针对不同架构和厂商做适配。
  • 合规风险:Google隐私政策限制硬件标识的收集与使用,需确保符合应用商店审核规则,避免应用被拒。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 18:45:49