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

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

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

    32位ABI:

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

    x86 :“x86”

    MIPS :“mips”


    64位ABI:

    ARM :“arm64-v8a”

    x86 :“x86_64”

    MIPS :“mips64”

    这些值来自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中find的分类

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

    另请参阅: uname()手册页 , Wikipedia的Uname , Server faults的uname机器 , OpenJdk邮件列表

    这可能会有所帮助

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

    更多信息Android Build Class