Вывод 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.
Ответы
Ответ 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