Выход 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 использует "none" для кода сборки.

Партнер Vizio: os.arch: armv7l , Build.CPU_ABI/Build.CPU_ABI2: нет/неизвестно

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

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

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


person larham1    schedule 13.02.2013    source источник
comment
Вероятно, вам следует использовать android.os.Build.CPU_ABI. и ЦП_ABI2.   -  person tc.    schedule 10.03.2013
comment
почему ты хочешь сделать это?   -  person Martin Thoma    schedule 22.03.2013


Ответы (3)


Согласно тому, что я могу найти в дереве исходного кода Android, свойство ro.product.cpu.abi (к которому вы можете получить доступ как CPU_ABI через класс сборки) должен иметь следующее сопоставление архитектуры и значения:

32-битные ABI:

ARM: armeabi-v7a (или, возможно, armeabi, если это действительно старое/дешевое устройство)

x86: x86

MIPS: MIPS


64-битные ABI:

ARM: arm64-v8a

x86: x86_64

MIPS: mips64

person Michael    schedule 22.03.2013
comment
Документация Android по поддерживаемым ABI: developer.android.com/ndk/guides/abis. html#sa - person Rupert Rawnsley; 10.02.2016

Эти значения исходят из структуры 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 он возвращает «i686», на PowerPC он возвращает «ppc». У меня нет системы MIPS, но я предполагаю, что это «mips», но это может быть ассортимент, найденный в cpu-probe.c

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

См. также: uname() справочная страница, Uname из Википедии, Ошибки сервера на машинах uname, список рассылки OpenJdk

person artless noise    schedule 09.03.2013
comment
Это полезно. Меня в основном интересуют отчеты с реальных устройств Android, работающих на x86 и MIPS, и я согласен, что BUILD.CPU_ABI может быть лучшим показателем. К вашему сведению, на устройстве ARM (Galaxy Nexus) Build.CPU_ABI/CPU_ABI2: armeabi-v7a/armeabi - person larham1; 11.03.2013

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

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

Дополнительная информация Класс сборки Android

person crazyjune    schedule 10.07.2014