Android є 32-розрядною або 64-розрядною ОС?


46

Заголовок досить зрозумілий: Android є 32- або 64-бітовою ОС? Я припускаю, що це те чи інше, а не те й інше, оскільки це змусить 32- та 64-бітні бінарні файли розміщуватись у Google Play. Я знаю, що це просте запитання, і що інші люди його задавали, але за все життя я не змогла знайти відповідь в Інтернеті, і на цьому SE, безумовно, немає жодної.

Відповіді:


48

У царині наборів чіпів 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 вгору :)


2
Цікавий матеріал, але було б непогано мати у відповіді деякі джерела.
Арахіс

2
+1, тому що навіть якщо джерел немає, хоча б половина роботи для дослідження була зроблена, щоб допомогти знайти, на що звернути увагу. Не
сприймайте

1
Зараз існує 64-розрядні пристрої ARM, на яких працює 64-розрядний Android.
Матвій

1
Я виступаю за те, що більшість відповідей стосується того, які середовища використовуються для компіляції Android, що абсолютно не має значення для питання.
Dan Hulme

1
Так, це правда, і я сьогодні опублікую нову відповідь про ситуацію, але середовище компіляції завжди було червоним оселедцем.
Dan Hulme

8

Спочатку Android писався лише для 32-розрядних процесорів: а саме для 32-розрядних процесорів ARM. Пізніше Intel та MIPS багато вклали у те, щоб Android також підтримував їх архітектуру: але все-таки лише 32-бітні процесори. Вони змогли зробити це без (багатьох) проблем із сумісністю, оскільки більшість програм не постачаються як бінарні файли. Написані на Java, вони замість цього постачаються у вигляді байт-коду , який віртуальна машина на телефоні компілюється в архітектуру телефону при запуску програми. Деякі додатки включають нативнукомпоненти, які постачаються у вигляді двійкових. Це робиться для того, щоб прискорити деякі види додатків (зокрема ігри) або дозволити додатку отримувати доступ до бібліотек C, які недоступні на Java. Ці додатки можуть включати більше одного двійкового файлу для нативних кодових частин, щоб вони могли працювати в різних архітектурах. Незважаючи на це, більшість програм є лише Java, тому вони просто працюють на будь-якій архітектурі.

Сказане все було правдивим на той момент, коли це питання (і більшість інших відповідей) було написано, але вже не. Lollipop представив підтримку нових 64-розрядних процесорів ARM ( ARMv8), а також для процесорів x86_64 Intel і AMD, що означає, що 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 році .


1
Це не зовсім надійне джерело, оскільки це говорило про сервери, щоб сказати, що "смартфон трохи далі", - сказав Форсайт. , ми говоримо про ARM в контексті Android / смартфонів / планшетів.
t0mm13b

2

Android є 32- або 64-бітовою ОС? Я припускаю, що це те чи інше, а не те й інше, оскільки це змусить 32- та 64-бітні бінарні файли розміщуватись у Google Play.

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

Як ви підозрювали, що програми, які постачаються з нативних бінарних файлів та додатків NDK, повинні надсилатись із бінарними файлами, складеними для кожної архітектури, в якій вона планується працювати. Найпоширеніша архітектура, на якій працює Android, - 32-розрядна ARM; однак є також пристрої, які працюють на x86 та MIPS.


0

Я просто здогадуюсь, але я думаю, що це також пояснює це просто. Це залежить від того, яким пристроєм ви користуєтесь, є чотири типи операційних систем ARM, ARM 64, X84 та X84_64. ARM - популярна 32-бітна платформа, ARM 64 - також популярна, але 64-бітна платформа, X84 - нечаста платформа, яка використовується на Zenfones, подібно до X84_64, яка є її рідкістю, і використовується на Android-емуляторах. Я отримав цю інформацію про Open Gapps

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.