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

lar*_*am1 15 android arm mips android-x86

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

Log.i("mytag", "os.arch: " + System.getProperty("os.arch"));
Run Code Online (Sandbox Code Playgroud)

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

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

真正的英特尔和MIPS设备有哪些输出?

x86 Android设备:??????

mips安卓设备:??????

还有其他平台和变种吗?

编辑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代码预期的输出.

Mic*_*ael 11

根据我在Android源代码树中可以找到的ro.product.cpu.abi属性(您可以CPU_ABI通过Build类访问)应具有以下架构到值的映射:

32位ABI:

ARM:"armeabi-v7a"(如果是真正的旧/低端设备,可能是"armeabi")

x86:"x86"

MIPS:"mips"


64位ABI:

ARM:"arm64-v8a"

x86:"x86_64"

MIPS:"mips64"


art*_*ise 4

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

grep cpu_arch_name * | grep string | cut -d \, -f2 | sort | uniq
Run Code Online (Sandbox Code Playgroud)
  • ARMv4
  • ARMV4T
  • ARMV5T
  • ARMV5TE
  • ARMV5TEJ
  • ARMv6
  • ARMv7

arm7l表示“little endian”模式,但这是可选并且取决于内核。我认为大多数 ARM 内核将是“小端”,除非它是一个以网络为中心的产品(如 Android 路由器)。这与 相同uname -m。在 x86 上,它返回“i686”,在 PowerPC 上,它返回“ppc”。我没有 MIPS 系统,但我的猜测是“mips”,但它可能是cpu-probe.c中找到的分类

Linux 中有 20 多种架构,每种架构都有不同的 CPU 版本。对于当前的 Android 端口来说,答案要少得多。然而,它们中的任何一个都可能在将来被使用。我认为ARM是唯一发送子架构的

另请参阅:uname()手册页维基百科的Uname服务器故障的 uname 机器OpenJdk 邮件列表