В области наборов микросхем 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 вверх :)
Первоначально 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-битной среды только в том случае, если оно содержит собственный код и хочет использовать более высокий предел ОЗУ или новые функции архитектуры.
источник
Все чипы ARM в настоящее время 32-битные. Из-за этого Android в настоящее время выполняет весь код в 32-битной среде.
64-разрядные процессоры планируется запустить в 2014 году .
источник
Ни на самом деле. Android - это ОС на базе виртуальной машины Dalvik, а в Google Play размещаются приложения Dalvik. Сама Dalvik VM, как и Java VM, всегда является 32-битной независимо от разрядности физической машины.
Как вы и подозревали, приложения, поставляемые с собственными двоичными файлами, и приложения NDK должны поставляться с двоичными файлами, скомпилированными для каждой архитектуры, для которой он предназначен. Наиболее распространенная архитектура, на которой работает Android, - это ARM 32-bit; Однако есть также устройства, которые работают на x86 и MIPS.
источник
Я просто догадываюсь, но я думаю, это также объясняет это просто. Это зависит от того, какое устройство вы используете, есть четыре типа операционной системы: ARM, ARM 64, X84 и X84_64. ARM - популярная 32-битная платформа, ARM 64 - также популярная, но 64-битная платформа, X84 - необычная платформа, используемая в Zenfones, такая же, как X84_64 - необычная и используемая в эмуляторах Android. Я получил эту информацию об ОС Open Gapps
источник