为了识别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代码预期的输出。
答案 0 :(得分:10)
根据我在Android源代码树中可以找到的内容,ro.product.cpu.abi
属性(您可以通过Build class访问CPU_ABI
)应该具有以下架构到值的映射:
ARM :“armeabi-v7a”(如果它是真正的老/低端设备,可能是“armeabi”)
x86 :“x86”
MIPS :“mips”
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
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
答案 2 :(得分:0)
这可能会有所帮助
更多信息 Android Build Class