16

为了识别 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 对构建代码使用了“无”。

Vizio 联合主演:os.arch:armv7l,Build.CPU_ABI/Build.CPU_ABI2:无/未知

罗技 Revue:os.arch:i686,Build.CPU_ABI/Build.CPU_ABI2:无/未知

编辑以澄清意图:

这里的目标是将真实设备列表的编译及其输出众包。AOSP 代码的预期输出很有趣,但设备制造商(如上面的旧 Google TV 设备)可能会偏离提供 AOSP 代码的预期输出。

4

3 回答 3

12

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

32 位 ABI:

ARM:“armeabi-v7a”(如果它是一个非常旧/低端的设备,也可能是“armeabi”)

x86:“x86”

米普斯:“米普斯”


64 位 ABI:

ARM:“arm64-v8a”

x86:“x86_64”

MIPS:“mips64”

于 2013-03-22T15:11:11.977 回答
3

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

grep cpu_arch_name * | grep string | cut -d \, -f2 | sort | uniq
  • armv4
  • armv4t
  • armv5t
  • armv5te
  • armv5tej
  • armv6
  • armv7

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

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

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

于 2013-03-09T22:11:47.453 回答
0

这可能会有所帮助

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

更多信息 Android 构建类

于 2014-07-10T03:59:26.533 回答