W dziedzinie chipsetów ARM, która jest wspólnym czynnikiem, cały stos Androida, z prawie identycznego jądra opartego na systemie Linux, jest w rzeczywistości 32-bitowy, skompilowany krzyżowo z zazwyczaj 32-bitowego / 64-bitowego środowiska hosta, środowiska hosta jest zwykle jedną z dystrybucji Linuksa. Zalecaną dystrybucją przez Google do budowania i kompilowania Androida jest Ubuntu .
Biblioteka uruchomieniowa Androida (media, grafika, system plików, żeby wymienić tylko kilka) jest również 32-bitowa, ale gdy docieramy do warstwy dalvikvm, liczba bitów staje się nieistotna, ponieważ w tym momencie apki nadchodzą ze sklepu Google Play są natywnym kodem bajtowym („produktem ubocznym” wygenerowanego kodu Java skompilowanego w przenośny kod bajtowy), który jest skierowany do DalvikVM (maszyna wirtualna), który z kolei interpretuje i tłumaczy kod bajtowy kierowany na surowy zestaw instrukcji ARM.
Froyo był ostatnim Androidem, który umożliwiał kompilację w 32-bitowym środowisku hostowanym, w którym był kompilowany krzyżowo z chipsetem ARM.
Piernik był pierwszym „przyszłym” Androidem, wówczas około trzy lata temu, który wprowadził wymóg korzystania z 64-bitowego hostowanego środowiska, w którym został zbudowany. Było wiele hacków, aby Gingerbread został zbudowany w 32-bitowym środowisku hostowanym.
ICS i JB i nowsze wersje zdecydowanie wymagają 64-bitowego środowiska, aby przyspieszyć kompilację i skrócić czas kompilacji.
Podsumowując, to, co widzisz w Sklepie Play, nie ma wpływu na to, czy są używane 32-bitowe czy 64-bitowe, a zatem nie ma znaczenia.
Uwaga dodatkowa: Typowa 16 GB pamięci RAM / czterordzeniowa / 64-bitowa dystrybucja Linuksa, czas potrzebny do zbudowania ICS od zera, zajmuje maksymalnie 30 minut, gdyby to była 32-bitowa dystrybucja Linuksa, zajęłoby to dłużej, w rzeczywistości mogłoby spowodować załamanie procesora ponieważ po prostu nie ma wystarczającej mocy obliczeniowej, aby zgnieść i wypakować skompilowany krzyżowo kod, co jest bardzo wymagającym i obciążającym procesem!
Dowód na to.
Pobierz dowolny natywny plik binarny ARM znaleziony w /system/bin
lub /system/xbin
, na przykład, /system/bin/dalvikvm
jest to plik binarny Dalvik VM, który jest odpowiedzialny za górne warstwy Java i APK.
Teraz sprawdź plik binarny, wydając następującą komendę: file dalvikvm
która zawiera podsumowanie typu pliku, oczekiwane dane wyjściowe będą następujące:
dalvikvm: ELF 32-bitowy plik wykonywalny LSB, ARM, wersja 1 (SYSV), dynamicznie połączony (wykorzystuje współdzielone biblioteki lib), pozbawiony
Zwróć uwagę na odniesienie do 32-bitowego pliku ELF, który jest kompilowany krzyżowo do ARM i jest wykonywalnym plikiem binarnym.
Racja, przejdźmy dalej, sprawdźmy natywną bibliotekę współdzieloną znalezioną w /system/lib
, na przykład /system/lib/libandroid_runtime.so
, teraz problem file libandroid_runtime.so
, oczekiwany wynik byłby następujący:
libandroid_runtime.so: ELF 32-bitowy obiekt współdzielony LSB, ARM, wersja 1 (SYSV), dynamicznie połączony, pozbawiony
Ponownie zauważmy, że jego 32-bitowy ELF skompilowany krzyżowo do ARM i jest biblioteką współdzieloną.
Klucz do kompilacji krzyżowej hosta można znaleźć w źródle AOSP, tzn. Kompilacja Gingerbread pierwotnie wymagała zbudowania na 64-bitowym systemie hosta, oto grupa dyskusyjna linkująca, w jaki sposób łatać skrypty, aby umożliwić kompilację 32-bitowy host, który ma dwie łatki, tutaj znalezione, dla build/core.mk
i build/main.mk
( połączone ) w recenzji Gerrit AOSP.
W wyniku tego łatka trafiła do skryptów kompilacji ICS, w których miałem przywilej kompilowania ICS na 32-bitowej platformie, której budowa zajęła 3 dni ( był to port ICS dla Zte Blade ). Teraz wymagania są ramped, to czy na pewno trzeba zapamiętać 64bit, aby umożliwić krzyżową kompilację budowy AOSP ICS z góry :)
Pierwotnie system Android został napisany tylko dla 32-bitowych procesorów: w szczególności 32-bitowych procesorów ARM. Później Intel i MIPS wiele zainwestowały w to, aby Android wspierał również ich architektury: ale nadal tylko 32-bitowe procesory. Byli w stanie to zrobić bez (wielu) problemów ze zgodnością, ponieważ większość aplikacji nie jest dostarczana jako pliki binarne. Napisane w Javie są zamiast tego wysyłane jako kod bajtowy , który wirtualna maszyna w telefonie kompiluje do architektury telefonu, gdy aplikacja jest uruchomiona. Niektóre aplikacje zawierają natywnekomponenty, które są wysyłane jako pliki binarne. Ma to na celu przyspieszenie niektórych rodzajów aplikacji (szczególnie gier) lub umożliwienie aplikacji dostępu do bibliotek C, które nie są dostępne w Javie. Aplikacje te mogą zawierać więcej niż jeden plik binarny dla natywnych części kodu, aby umożliwić im działanie na różnych architekturach. Mimo to większość aplikacji jest przeznaczona tylko dla języka Java, więc działają one tylko na dowolnej architekturze.
Powyższe było prawdziwe w czasie, gdy to pytanie (i większość innych odpowiedzi) zostało napisane, ale już nie. Lollipop wprowadził obsługę nowych 64-bitowych procesorów ARM ( ARMv8), a także dla procesorów Intel i AMD x86_64, co oznacza, że Android obsługuje teraz zarówno procesory 32-bitowe, jak i 64-bitowe. Nexus 9 był pierwszym flagowym 64-bitowym urządzeniem z Androidem. Oprócz zapewnienia dostępu do nowych rozszerzeń zestawu instrukcji, obsługa 64-bitowa oznacza, że aplikacje mogą korzystać z ponad 4 GB pamięci RAM. Większość aplikacji nie potrzebuje tak dużo, ale z pewnością mogą to wykorzystać zaawansowane gry i oprogramowanie do tworzenia zdjęć / filmów: popychanie Androida w kierunku platformy gier konsolowych (w tym gier VR) i tworzenia treści. Aby korzystać z tego, aplikacje Java nie muszą być aktualizowane, ponieważ maszyna wirtualna zawsze kompiluje je do architektury telefonu, ale aplikacje z natywnym kodem tak zrobią.
Ponieważ ARMv8 jest wstecznie kompatybilny z 32-bitowym kodem (w ten sam sposób x86_64 może nadal uruchamiać kod x86), nawet aplikacje zawierające natywny kod dla 32-bitowych procesorów mogą nadal działać na 64-bitowym Androidzie. Tak więc aplikacja musi zostać skompilowana tylko dla wersji 64-bitowej, jeśli zawiera natywny kod i chce skorzystać z wyższego limitu pamięci RAM lub nowych funkcji architektury.
źródło
Wszystkie układy ARM są obecnie 32-bitowe. Z tego powodu Android wykonuje obecnie cały kod w środowisku 32-bitowym.
64-bitowe procesory zostaną wprowadzone na rynek w 2014 roku .
źródło
Ani właściwie. Android to system operacyjny oparty na Dalvik VM, a Google Play obsługuje aplikacje Dalvik. Sam Dalvik VM, podobnie jak Java VM, jest zawsze 32-bitowy, niezależnie od bitowości maszyny fizycznej.
Jak podejrzewasz, aplikacje dostarczane z natywnymi plikami binarnymi i aplikacje NDK muszą być dostarczane z plikami binarnymi skompilowanymi dla każdej architektury, w której mają być uruchomione. Najpopularniejszą architekturą, na której działa Android, jest ARM 32-bit; istnieją jednak również urządzenia działające na platformie x86 i MIPS.
źródło
Po prostu zgaduję, ale myślę, że to również wyjaśnia to po prostu proste. Zależy to od używanego urządzenia, istnieją cztery typy systemu operacyjnego: ARM, ARM 64, X84 i X84_64. ARM jest popularną platformą 32-bitową, ARM 64 jest również popularną, ale 64-bitową platformą, X84 jest rzadką platformą i jest używany na Zenfones, podobnie jak X84_64 jest rzadki i używany na emulatorach Androida. Mam te informacje na temat Open Gapps
źródło