Android os.arch выход для ARM, MIPS, x86?

Чтобы определить платформу устройства Android, кажется, что системного свойства java "os.arch" будет достаточно:

Log.i("mytag", "os.arch: " + System.getProperty("os.arch"));

большинство устройств ARM отвечают: os.arch: armv7l

Эмулятор x86 отвечает: os.arch: i686

Каковы выходы этого для реальных устройств Intel и MIPS?

Android-устройство x86:??????

mips Android-устройство:??????

Какие-нибудь другие платформы и варианты?

РЕДАКТИРОВАТЬ для Google TV:

Похоже, что Google TV использует "нет" для кода сборки.

Vizio Co-Star: os.arch: armv7l, Build.CPU_ABI / Build.CPU_ABI2: нет / неизвестно

Logitech Revue: os.arch: i686, Build.CPU_ABI/Build.CPU_ABI2: нет / неизвестно

РЕДАКТИРОВАТЬ для уточнения намерения:

Целью здесь является краудсорсинг составления списка реальных устройств с их выводом. Ожидаемый вывод из кода AOSP интересен, но производители устройств, как и вышеприведенные блоки Google TV, могут отклоняться от предоставления вывода, ожидаемого от кода AOSP.

3 ответа

Согласно тому, что я могу найти в дереве исходников 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"

Эти значения происходят из структуры 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 указывает режим "little endian", но он выбирается и зависит от ядра. Я бы подумал, что большинство ядер ARM будут иметь "младший порядок", если только это не продукт, ориентированный на сеть (например, маршрутизатор Android). Это так же, как uname -m, На x86 он возвращает "i686" на PowerPC, он возвращает "ppc". У меня нет системы MIPS, но я думаю, что это "mips", но это может быть ассортимент, найденный в cpu-probe.c

В Linux существует более 20 архитектур с разными версиями процессора. Ответ гораздо меньше для текущих портов Android. Тем не менее, возможно, что любой из них может быть использован в будущем. Я думаю, что ARM - единственный, кто посылает субархитектуру.

Смотрите также: uname() man-страница, Wikipedia Uname, Uname- машины с ошибками сервера, список рассылки OpenJdk

Это может быть помощь

  1. Build.CPU_ABI Имя набора команд (тип процессора + соглашение ABI) собственного кода.
  2. Build.CPU_ABI2 Имя второго набора команд (тип CPU + соглашение ABI) собственного кода.

Больше информации Android Build Class

Другие вопросы по тегам