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 输出?的主要内容,如果未能解决你的问题,请参考以下文章

求助jni 加载so库的问题

MIPS简单入门

ARM PWN基础教程

linux查询静态库是arm平台还是x86平台

ida调试mips架构程序boa

android开发libs下的armeabi、armeabi-v7a、arm64-v8a等及导入so所踩过的坑