ARM、MIPS、x86 的 Android os.arch 输出?
Posted
技术标签:
【中文标题】ARM、MIPS、x86 的 Android os.arch 输出?【英文标题】:Android os.arch output for ARM, MIPS, x86? 【发布时间】:2013-02-13 18:00:04 【问题描述】:为了识别android设备的平台,java系统属性“os.arch”似乎就足够了:
Log.i("mytag", "os.arch: " + System.getProperty("os.arch"));
大多数 ARM 设备响应:os.arch: armv7l
x86 模拟器响应:os.arch: i686
对于真实 Intel 和 MIPS 设备的输出是什么?
x86 Android 设备:??????
mips Android 设备:??????
还有其他平台和变体吗?
为 Google TV 编辑:
Google TV 似乎对构建代码使用了“无”。
Vizio 联合主演:os.arch: armv7l , Build.CPU_ABI/Build.CPU_ABI2: none/unknown
罗技 Revue:os.arch:i686,Build.CPU_ABI/Build.CPU_ABI2:无/未知
为澄清意图而编辑:
这里的目标是众包真实设备列表的编译及其输出。 AOSP 代码的预期输出很有趣,但设备制造商(如上面的旧 Google TV 设备)可能会偏离提供 AOSP 代码的预期输出。
【问题讨论】:
你应该使用android.os.Build.CPU_ABI和CPU_ABI2。 你为什么要这样做? 【参考方案1】:根据我在 Android 源代码树中可以找到的内容,ro.product.cpu.abi
属性(您可以通过 Build class 作为CPU_ABI
访问)应该具有以下架构到值的映射:
32 位 ABI:
ARM:“armeabi-v7a”(如果是非常旧的/低端设备,也可能是“armeabi”)
x86:“x86”
MIPS:“mips”
64 位 ABI:
ARM:“arm64-v8a”
x86:“x86_64”
MIPS:“mips64”
【讨论】:
支持 ABI 的 Android 文档:developer.android.com/ndk/guides/abis.html#sa【参考方案2】:这些值来自 Linux 结构。它们可以通过 cat /proc/cpuinfo
从 shell 中显示。 ARM 在arch/arm/mm
目录中定义它们。从这个目录,
grep cpu_arch_name * | grep string | cut -d \, -f2 | sort | uniq
armv4
armv4t
armv5t
armv5te
armv5tej
armv6
armv7
arm7l 表示“小端”模式,但这是可选的,取决于内核。我认为大多数 ARM 内核将是“小端”,除非它是以网络为中心的产品(如 Android 路由器)。这与uname -m
相同。在 x86 上,它在 PowerPC 上返回“i686”,它返回“ppc”。我没有 MIPS 系统,但我的猜测是“mips”,但它可能是在 cpu-probe.c 中找到的分类
Linux 中有超过 20 种架构,都有不同的 CPU 版本。对于当前的 Android 端口,答案要少得多。但是,将来可能会使用其中的任何一个。我认为 ARM 是唯一发送子架构的设备。
另请参阅:uname()
man page、Wikipedia's Uname、Server faults's uname machines、OpenJdk mailing list
【讨论】:
这很有用。我主要对在 x86 和 MIPS 上运行的实际 Android 设备的报告感兴趣,我同意 BUILD.CPU_ABI 可能是更好的衡量标准。仅供参考,在 ARM 设备(Galaxy Nexus)上,Build.CPU_ABI / CPU_ABI2 是: armeabi-v7a / armeabi【参考方案3】:这可能会有所帮助
-
Build.CPU_ABI 本机代码的指令集名称(CPU 类型 + ABI 约定)。
Build.CPU_ABI2 本机代码的第二个指令集(CPU 类型 + ABI 约定)的名称。
更多信息 Android Build Class
【讨论】:
以上是关于ARM、MIPS、x86 的 Android os.arch 输出?的主要内容,如果未能解决你的问题,请参考以下文章