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 :)