如何原生获取SoC(系统级芯片)厂商及型号?Android Build.SOC_MODEL属性报错问题解析
问题解答
1. 官方文档中黄色高亮的含义
Android官方文档里的黄色高亮是用来标记API的引入版本的,直白点说就是这个属性/方法是在指定Android版本(这里是Android 12,对应API等级31)才新增的,更早的系统版本里根本没有这个字段。这也是你在低版本系统项目里调用Build.SOC_MODEL会报错“无法找到该属性”的核心原因——你的目标系统版本低于Android 12,系统框架里压根不存在这个属性。
2. 兼容多版本的SoC信息获取函数
要同时适配Android 12+和更低版本,得用反射来安全获取这些字段(直接引用的话,低版本系统会出现编译或运行报错)。这里给你封装好一个工具函数:
import android.os.Build; import java.lang.reflect.Field; public class DeviceInfoUtils { /** * 获取SoC制造商 * @return SoC厂商名称,低版本系统返回null */ public static String getSocManufacturer() { return getSocField("SOC_MANUFACTURER"); } /** * 获取SoC型号 * @return SoC型号,低版本系统返回null */ public static String getSocModel() { return getSocField("SOC_MODEL"); } private static String getSocField(String fieldName) { try { // 反射获取Build类中的目标字段 Field field = Build.class.getDeclaredField(fieldName); field.setAccessible(true); return (String) field.get(null); } catch (NoSuchFieldException | IllegalAccessException e) { // 低版本系统字段不存在,捕获异常返回null e.printStackTrace(); return null; } } }
小提示:
- 反射方式能避免低版本系统里因引用不存在的字段而崩溃;
- 如果用Kotlin开发,也可以照搬这个反射逻辑实现;
- 要是觉得返回
null不够友好,你可以改成返回"Unknown"这类默认提示文本。
补充说明
既然你提到问题已经解决,估计你要么是升级了项目的目标SDK版本,要么是用上了类似的兼容方案,也有可能在低版本系统里换了其他替代方式(比如读取/proc/cpuinfo这类系统文件,但这种方式兼容性差还可能需要额外权限)。
内容的提问来源于stack exchange,提问作者Aleksandar Zoric
相关产品推荐
相关产品推荐

