为了识别Android设备的平台,似乎Java系统属性“os.arch”就足够了:
Log.i("mytag", "os.arch: " + System.getProperty("os.arch"));
大多数ARM器件响应: os.arch: armv7l
在x86模拟器回应: os.arch: i686
这有什么真正的 Intel和MIPS的设备的输出?
86 Android装置:??????
MIPS Android装置:??????
任何其他平台和变种?
编辑谷歌电视:
它看起来像谷歌电视采用“无”的生成代码。
Vizio公司合作的明星:os.arch:armv7l,Build.CPU_ABI / Build.CPU_ABI2:无/未知
罗技歌剧团:os.arch:i686的,Build.CPU_ABI / Build.CPU_ABI2:无/未知
编辑澄清意图:
这里的目标是要分工处理与他们的实际输出设备的列表的编辑。 从AOSP代码预期输出是有趣的,但设备制造商,像老谷歌电视上面的单位,可从提供从AOSP代码预期输出偏离。
据我可以在Android源代码树中找到ro.product.cpu.abi
属性(可以作为访问CPU_ABI
通过构建类 )应具备以下架构到值的映射:
32位总线:
ARM:“armeabi-V7A”(也可能是“armeabi”如果是真的老了/低端设备)
86:“86”
MIPS: “MIPS”
64位总线:
ARM: “arm64-V8A”
86: “x86_64的”
MIPS: “MIPS64”
这些值来自Linux的结构。 他们可以从一个shell显示cat /proc/cpuinfo
。 所述臂限定在它们的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”,则返回“竞价排名”。 我没有MIPS的系统,但我的猜测是“MIPS”,但它可能中的分类找到CPU-probe.c
有超过20架构在Linux中都具有不同的CPU版本。 答案是远远低于当前的Android端口。 然而,这是可能的,任何人可以在未来使用。 我认为ARM是唯一一个发送子architechure。
参见: uname()
手册页 , 维基百科的uname , 服务器故障的uname机 , OpenJDK的邮件列表