ARM、MIPS和x86的Android操作系统架构输出是什么?

17

为了识别Android设备的平台,似乎Java系统属性 "os.arch" 就足够了:

Log.i("mytag", "os.arch: " + System.getProperty("os.arch"));

大多数ARM设备的响应:os.arch: armv7l

x86模拟器的响应:os.arch: i686

对于实际的英特尔和MIPS设备,输出是什么?

x86 Android 设备:??????

mips Android 设备:??????

还有其他平台和变种吗?

Google TV 的编辑:

看起来 Google TV 使用“none”作为 Build 代码。

Vizio Co-Star:os.arch: armv7l,Build.CPU_ABI/Build.CPU_ABI2:none/unknown

Logitech Revue:os.arch: i686,Build.CPU_ABI/Build.CPU_ABI2:none/unknown

澄清意图的编辑:

这里的目标是众包编制一个含有真实设备及其输出的列表。AOSP 代码的预期输出很有趣,但是设备制造商(例如上述旧版 Google TV 设备)可能会偏离提供 AOSP 代码所期望的输出。


你应该使用android.os.Build.CPU_ABI和CPU_ABI2。 - tc.
你为什么想要这样做? - Martin Thoma
3个回答

12
根据我在Android源代码树中所找到的信息,可以通过Build class访问的ro.product.cpu.abi属性(也可以通过CPU_ABI来访问)应该有以下架构对应值的映射:

32位ABI:

ARM:"armeabi-v7a" (如果是旧版本/低端设备,则可能是"armeabi")

x86:"x86"

MIPS:"mips"


64位ABI:

ARM:"arm64-v8a"

x86:"x86_64"

MIPS:"mips64"


Android支持的ABI文档:http://developer.android.com/ndk/guides/abis.html#sa - Rupert Rawnsley

3

这些值来自于 Linux 结构体。可以通过命令行使用 cat /proc/cpuinfo 命令查看。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上,返回 "i686",在PowerPC上,返回 "ppc"。我没有MIPS系统,但我猜测是 "mips",但它可能是在cpu-probe.c中找到的各种版本。

Linux中有20多种架构,都有不同的CPU版本。对于当前的Android端口来说,答案要少得多。但是,未来可能会使用其中任何一种。我认为ARM是唯一发送 子体系结构 的架构。

另请参见:uname() man页面维基百科的 UnameServer faults 的uname机器OpenJdk邮件列表


1
这很有用。我主要对在x86和MIPS上运行的实际Android设备的报告感兴趣,并且我同意BUILD.CPU_ABI可能是更好的度量标准。顺便说一下,在ARM设备(Galaxy Nexus)上,Build.CPU_ABI / CPU_ABI2为:armeabi-v7a / armeabi。 - larham1

0

这可能会有所帮助

  1. Build.CPU_ABI 本机代码的指令集(CPU类型+ABI约定)的名称。
  2. Build.CPU_ABI2 本机代码的第二个指令集(CPU类型+ABI约定)的名称。

更多信息 Android Build Class


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接