Является ли Android 32-битной или 64-битной ОС?

46

Название довольно очевидно: Android - это 32- или 64-битная ОС? Я предполагаю, что это один или другой, а не оба, так как это приведет к тому, что 32-битные и 64-битные двоичные файлы будут размещены в Google Play. Я знаю, что это простой вопрос, и что его задавали другие люди, но за всю свою жизнь я не смог найти ответ в Интернете, и, конечно, в SE нет такого ответа.

fouric
источник

Ответы:

48

В области наборов микросхем ARM, что является общим фактором, весь стек Android, из почти идентичного ядра на базе Linux, фактически является 32-битным, кросс-компилируемым из обычно либо 32-битной / 64-битной хост-среды, хост-среды обычно это один из дистрибутивов Linux. Рекомендуемый Google дистрибутив для сборки и кросс-компиляции Android - Ubuntu .

Библиотека времени выполнения Android (мультимедиа, графика, файловая система и многие другие) также 32-битные, но когда мы достигаем уровня dalvikvm, то количество бит становится неактуальным, как и в этот момент, когда приходит apks из Google Play Store исходный байт-код («побочный продукт» сгенерированного Java-кода, скомпилированного в переносимый байт-код), который нацелен на DalvikVM (виртуальную машину), которая, в свою очередь, интерпретирует и переводит байт-код, нацеленный на необработанный набор команд ARM.

Froyo был последним Android, который включил компиляцию в 32-битной среде, в которой он был кросс-компилирован с использованием чипсета ARM.

Gingerbread был первым из «будущих» Android, тогда, около трех лет назад, который ввел требование использовать 64-битную среду, в которой он был построен. Было много способов взломать Gingerbread в 32-битной среде.

ICS и JB, и выше, безусловно, требуют 64-битной среды для ускорения компиляции и сокращения времени оборота в строительстве.

Итак, подведем итог: то, что вы видите в магазине Play Store, не имеет никакого отношения к тому, используются ли 32-битные или 64-битные версии, и, следовательно, не имеют значения.

Примечание: типичный 16-Гбайт ОЗУ / четырехъядерный / 64-битный дистрибутив Linux, время, необходимое для создания ICS с нуля, занимает максимум 30 минут, если бы это был 32-битный дистрибутив Linux, это заняло бы больше времени, на самом деле это может привести к падению ЦП поскольку просто не хватает вычислительной мощности, чтобы взбивать и запускать кросс-скомпилированный код, что является очень сложным и трудоемким процессом!

Доказательство этого.

Вставьте любой собственный двоичный файл ARM, найденный в, /system/binили /system/xbin, например, /system/bin/dalvikvmэто двоичный файл Dalvik VM, который отвечает за верхние уровни Java и APK.

Теперь, проверьте двоичный файл, выполнив эту команду: file dalvikvmкоторая дает краткую информацию о типе файла, ожидаемый результат будет следующим:

dalvikvm: исполняемый 32-разрядный LSB ELF, ARM, версия 1 (SYSV), динамически связанный (использует общие библиотеки), удаленный

Обратите внимание на ссылку на 32-битный ELF, он кросс-компилируется в ARM и является двоичным исполняемым файлом.

Итак, давайте продолжим, давайте проверим собственную разделяемую библиотеку, найденную /system/lib, например, в /system/lib/libandroid_runtime.soвыпуске сейчас file libandroid_runtime.so, ожидаемый результат будет следующим:

libandroid_runtime.so: общий 32-разрядный LSB-объект ELF, ARM, версия 1 (SYSV), динамически связан, удален

Опять же, обратите внимание, это 32-битный ELF, кросс-компилированный в ARM и являющийся общей библиотекой.

Ключ к кросс-компиляции хоста можно найти в источнике AOSP, т.е. Gingerbread сборки изначально было требование , чтобы быть построена на хост - системе 64 - битной, вот группа новостей Linky со ссылкой на как пропатчить сценарии , чтобы заставить его строить на 32-битный хост с двумя исправлениями, найденными здесь, build/core.mkи build/main.mk( вместе ) в обзоре Gerrit AOSP.

В результате этот патч попал в сценарии сборки ICS, в которых у меня была привилегия компилировать ICS на 32-битной платформе, сборка которой заняла 3 дня ( это был порт ICS для Zte Blade ). Теперь эти требования увеличили, вы же обязательно нужен 64биную хост , чтобы включить кросс-компиляцию построения AOSP от ICS вверх :)

t0mm13b
источник
2
Интересная штука, но было бы неплохо иметь несколько источников в ответе.
арахис
2
+1, потому что, даже если нет источников, по крайней мере половина работы была сделана, чтобы помочь найти то, что искать. Не надо парня из-за того, что он сделал приличную попытку помочь и ответить на вопрос ...
Хейлем
1
Сейчас есть 64-битные устройства ARM под управлением 64-битной версии Android.
Мэтью Читал
1
Я опускаю голос, потому что большая часть ответа о том, какие среды используются для компиляции Android, что совершенно не имеет отношения к вопросу.
Дэн Халм
1
Да, это правда, и я собираюсь опубликовать новый ответ о ситуации сегодня, но среда компиляции всегда была красной сельдью.
Дэн Халм
8

Первоначально Android был написан только для 32-разрядных процессоров: в частности, для 32-разрядных процессоров ARM. Позже Intel и MIPS вложили немало средств в поддержку Android своих архитектур: но все же только 32-разрядных процессоров. Они смогли сделать это без (многих) проблем с совместимостью, потому что большинство приложений не поставляются в виде двоичных файлов. Написанные на Java, они вместо этого поставляются в виде байт-кода , который виртуальная машина на телефоне компилирует в архитектуру телефона при запуске приложения. Некоторые приложения включают в себя роднойкомпоненты, которые поставляются в виде двоичного файла. Это делается для того, чтобы ускорить работу некоторых типов приложений (в частности, игр) или позволить приложению получать доступ к библиотекам C, которые недоступны в Java. Эти приложения могут включать в себя несколько двоичных файлов для частей собственного кода, что позволяет им работать на разных архитектурах. Несмотря на это, большинство приложений предназначены только для Java, поэтому они просто работают на любой архитектуре.

Выше было все верно в то время, когда этот вопрос (и большинство других ответов) был написан, но больше не. Lollipop представил поддержку новых 64-битных процессоров ARM ( ARMv8), а также для процессоров Intel и AMD x86_64, что означает, что Android теперь поддерживает как 32-разрядные, так и 64-разрядные процессоры. Nexus 9 был первым флагманским 64-битным устройством Android. Наряду с предоставлением доступа к новым расширениям набора команд, 64-разрядная поддержка означает, что приложения могут использовать более 4 ГБ ОЗУ. Большинству приложений не понадобится так много, но оно, безусловно, может использовать высококачественные игры и программное обеспечение для создания фото / видео: продвижение Android в качестве платформы для игр консольного качества (включая игры VR) и для создания контента. Приложения Java не нуждаются в обновлении, чтобы воспользоваться этим преимуществом, потому что виртуальная машина всегда компилирует их в архитектуру телефона, но приложения с собственным кодом это сделают.

Поскольку ARMv8 обратно совместим с 32-разрядным кодом (точно так же, как x86_64 может по-прежнему выполнять код x86), даже приложения, которые включают собственный код для 32-разрядных процессоров, все еще могут работать на 64-разрядном Android. Таким образом, приложение должно быть скомпилировано для 64-битной среды только в том случае, если оно содержит собственный код и хочет использовать более высокий предел ОЗУ или новые функции архитектуры.

Дэн Халм
источник
5

Все чипы ARM в настоящее время 32-битные. Из-за этого Android в настоящее время выполняет весь код в 32-битной среде.

64-разрядные процессоры планируется запустить в 2014 году .

free3dom
источник
1
Это не совсем надежный источник, поскольку речь шла о серверах, чтобы процитировать «Смартфон немного дальше», сказал Форсайт. Мы говорим об ARM в контексте Android / Смартфоны / Планшеты.
t0mm13b
2

Является ли Android 32- или 64-разрядной ОС? Я предполагаю, что это один или другой, а не оба, так как это приведет к тому, что 32-битные и 64-битные двоичные файлы будут размещены в Google Play.

Ни на самом деле. Android - это ОС на базе виртуальной машины Dalvik, а в Google Play размещаются приложения Dalvik. Сама Dalvik VM, как и Java VM, всегда является 32-битной независимо от разрядности физической машины.

Как вы и подозревали, приложения, поставляемые с собственными двоичными файлами, и приложения NDK должны поставляться с двоичными файлами, скомпилированными для каждой архитектуры, для которой он предназначен. Наиболее распространенная архитектура, на которой работает Android, - это ARM 32-bit; Однако есть также устройства, которые работают на x86 и MIPS.

Ли Райан
источник
0

Я просто догадываюсь, но я думаю, это также объясняет это просто. Это зависит от того, какое устройство вы используете, есть четыре типа операционной системы: ARM, ARM 64, X84 и X84_64. ARM - популярная 32-битная платформа, ARM 64 - также популярная, но 64-битная платформа, X84 - необычная платформа, используемая в Zenfones, такая же, как X84_64 - необычная и используемая в эмуляторах Android. Я получил эту информацию об ОС Open Gapps

NeonzYT
источник