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
Это может быть помощь
- Build.CPU_ABI Имя набора команд (тип процессора + соглашение ABI) собственного кода.
- Build.CPU_ABI2 Имя второго набора команд (тип CPU + соглашение ABI) собственного кода.
Больше информации Android Build Class