获取处理器硬件信息
बनाया गया: 6 दिसंबर 2024
बनाया गया: 6 दिसंबर 2024
Android 13如何获取 处理器硬件信息,如三星note10的硬件名universal9825 是如何从系统中获取的
在 Android 13 以及现代 Android 设备上,获取底层处理器硬件名称(如三星 Note10 的 Exynos "universal9825")的方式与过去(如 Android 7/8)相比有了较大改变。传统上读取 /proc/cpuinfo
文件或许可以直接看到 "Hardware: universalXXXX" 这种标识,但近些年的变化(特别是 Treble 架构、权限和隔离策略的加强)导致许多直接从 /proc
、/sys
文件系统读取的老方法受限,或者信息不再明显提供。
以下是几种可尝试的方法和信息来源:
许多设备厂商会将 SoC 的名称、平台信息存放在系统属性中。你可以在已解锁调试的设备上通过 ADB 来查看相关属性。例如:
textadb shell getprop | grep -i "soc" adb shell getprop | grep -i "chip" adb shell getprop | grep -i "platform"
在三星设备上,一些常见属性键值可能为:
ro.chipname
ro.soc.name
ro.vendor.soc.name
ro.board.platform
这些属性中有可能包含类似 "universal9825" 的字样。
在较新的 Android 版本中,/proc/cpuinfo
中的 Hardware 字段可能被隐藏或移除。如果你的设备仍然能在 /proc/cpuinfo
中看到硬件信息,可通过以下命令查看:
adb shell cat /proc/cpuinfo
寻找 "Hardware" 字段。但在许多 Android 10+ 的设备中,该字段可能只显示通用信息(如 "aarch64"),不再提供 SoC 具体型号。
有时,厂商定制信息可能出现在 /sys
下的某些特定节点,比如:
textadb shell ls /sys/devices/soc0 adb shell cat /sys/devices/soc0/family adb shell cat /sys/devices/soc0/machine adb shell cat /sys/devices/soc0/platform_subtype_id adb shell cat /sys/devices/soc0/hardware_version
不同设备可能存在不同的节点,需要一定程度的探索。
某些 OEM(如三星)可能会在其定制的框架、HAL 层或 Vendor 分区中提供特定接口或属性文件来描述当前的 SoC 型号。如果是对 ROM 进行研究或逆向工程,则可在 /vendor/build.prop
或相关 vendor 属性文件(/vendor/default.prop
、/odm/build.prop
)查找包含 "universal9825" 字样的属性。例如:
adb shell cat /vendor/build.prop | grep universal
在较新的 Android 版本中,Google 对硬件信息获取限制更多是出于安全与隐私考虑。在原生 API 中,Build.SOC_MODEL
、Build.SOC_MANUFACTURER
(仅在高 API level 的设备存在)等字段有可能提供有限的官方信息。
示例(Java/Kotlin 代码片段):
javaif (android.os.Build.VERSION.SDK_INT >= 31) { // Android 12及以上 String socManufacturer = Build.SOC_MANUFACTURER; String socModel = Build.SOC_MODEL; // 可能会返回类似 "Samsung" 以及 "Exynos 9825" 之类的字符串 }
注意,这些字段在不同设备和厂商定制ROM上表现不一,可能为空或通用值。
ro.soc.name
)。在实际设备(如三星 Note10)上,通常可以通过 getprop
命令快速找到包含 "universal9825" 的属性值。
用哪些方法可以获取note10中 “Samsung Galaxy Note10” 的设备名
要在 Samsung Galaxy Note10 上获取类似于 "Samsung Galaxy Note10" 的设备市场名称(marketing name),可以尝试以下几种方法:
从 Android 11 开始,Google 引入了 ro.product.marketname
属性,用于标识设备的市场名称。对于三星设备,常常也会有 ro.config.marketing_name
这一属性。你可以通过 ADB 命令获取这些属性。
bashadb shell getprop ro.product.marketname adb shell getprop ro.config.marketing_name
如果上述命令返回了 "Samsung Galaxy Note10" 或类似的字符串,即可得到设备的市场名称。
其他可能的属性还包括:
bashadb shell getprop ro.product.model adb shell getprop ro.product.brand adb shell getprop ro.product.vendor.marketname
虽然 model
和 brand
通常返回的是机型代码(如 "SM-N970F")和品牌名称("samsung"),但不会直接给出类似 "Galaxy Note10" 的友好名称。
在应用中,你可以使用 Build
类读取相关字段。当然,Build.MODEL
常常只能得到类似 "SM-N970F" 的型号代码,而非完整的市场名称。但在新的设备和定制 ROM 上,Build.MODEL
有时可能直接返回产品名称。
javaString model = Build.MODEL; // 通常为 "SM-N970F"
同时,设备供应商可能在系统属性中存有市场名称,可通过 Android 原生的 System Properties API(仅限有访问权限的场景)获取,如:
java// 需要使用反射或特定权限来调用android.os.SystemProperties String marketName = SystemProperties.get("ro.product.marketname"); String marketingName = SystemProperties.get("ro.config.marketing_name");
在一些设备上,/system/build.prop
、/vendor/build.prop
或 adb shell cat /vendor/build.prop | grep marketing_name
中可能存有 ro.config.marketing_name
属性,可以通过上述方法间接获得。
总结:
在三星 Galaxy Note10 上最为直接的方法是使用 ADB 命令查询 ro.product.marketname
或 ro.config.marketing_name
系统属性,通常就能直接得到 "Samsung Galaxy Note10" 这种完整的市场名称。