Вывод Android os.arch для ARM, MIPS, x86? - программирование
Подтвердить что ты не робот

Вывод 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?

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

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

Любые другие платформы и варианты?

EDIT для 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

EDIT для уточнения намерения:

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

Ответ 3

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

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

Дополнительная информация Android Build Class