В области наборов микросхем 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 вверх :)