ARM,MIPS,x86的Android os.arch输出?

时间:2013-02-13 18:00:05

标签: android arm mips android-x86

为了识别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'。

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代码预期的输出。

3 个答案:

答案 0 :(得分:10)

根据我在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”

答案 1 :(得分:3)

这些值来自Linux结构。它们可以通过cat /proc/cpuinfo从shell显示。 ARM在arch/arm/mm目录中定义它们。从这个目录

grep cpu_arch_name * | grep string | cut -d \, -f2 | sort | uniq
  • ARMV4
  • ARMV4T
  • 用于ARMv5
  • 的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 pageWikipedia's UnameServer faults's uname machinesOpenJdk mailing list

答案 2 :(得分:0)

这可能会有所帮助

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