У царині наборів чіпів ARM, що є загальним фактором, весь стек Android, з майже ідентичного ядра, заснованого на Linux, насправді є 32-бітовим, перехресно компільованим із зазвичай 32-бітового / 64-бітного середовища хоста, хост-середовища зазвичай є одним з дистрибутивів Linux. Рекомендована дистрибуція від Google для створення та перехресного компілювання Android - це Ubuntu .
Бібліотека часу запуску Android (медіа, графіка, файлова система, якщо назвати, але декілька) також 32-бітові, але, коли ми досягнемо шару далвіквм, то кількість бітів стає неактуальною, як і в цей момент, приходить додатків з Google Play Store - це власний байт-код ("побічний продукт" згенерованого коду Java, зібраний у переносний байт-код), який націлений на DalvikVM (Virtual Machine), який, в свою чергу, інтерпретує та перекладає байт-код, орієнтований на необроблений набір інструкцій ARM.
Froyo був останнім Android, який включив компіляцію в 32-бітовому середовищі, в якому вона була перекомпільована націленням на набір мікросхем ARM.
Пряник був першим із "майбутніх" Android, ще близько трьох років тому, який запровадив вимогу використовувати 64-бітове середовище, в якому він був побудований. Було багато хак, щоб змусити будувати пряники під 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: ELF 32-розрядний виконуваний LSB, ARM, версія 1 (SYSV), динамічно пов'язаний (використовує спільні лібри), позбавлений
Зверніть увагу на посилання на 32-бітний ELF, і він перетинається на ARM і є двійковим виконуваним файлом.
Правильно, продовжуючи перевіряти рідну спільну бібліотеку, яку можна знайти /system/lib
, наприклад /system/lib/libandroid_runtime.so
, у теперішньому номері file libandroid_runtime.so
, очікуваний результат буде таким:
libandroid_runtime.so: 32-бітний об'єкт спільного використання LSB, ARM, версія 1 (SYSV), динамічно пов'язаний, позбавлений
Знову зауважте, його 32-бітний ELF, перекладений на ARM і є спільною бібліотекою.
Ключ до перехресної компіляції хоста можна знайти в джерелі AOSP, тобто спочатку збірка Gingerbread мала вимогу будуватись на 64- бітовій системі хостів, ось посилання на групу новин, що посилається на те, як виправити сценарії, щоб змусити її будувати 32-бітний хост, який має два виправлення, знайдені тут, для build/core.mk
та build/main.mk
( комбінованих ) на огляді AOSP на Герріт.
Як наступний результат, цей патч пробився до сценаріїв збирання ICS, в якому я мав привілей складати ICS на 32-бітній платформі, на створення якої пішло 3 дні ( це був порт ICS для Zte Blade ). Тепер ці вимоги збільшили, ви ж обов'язково потрібен 64біную хост , щоб включити крос-компіляцію побудови AOSP від ICS вгору :)