Tytuł jest dość oczywisty: czy Android jest 32- czy 64-bitowym systemem operacyjnym? Zakładam, że jest to jeden lub drugi, a nie oba, ponieważ wymusiłoby to hostowanie zarówno 32-, jak i 64-bitowych plików binarnych w Google Play. Wiem, że to proste pytanie i że zadawali je inni ludzie, ale przez całe życie nie byłem w stanie znaleźć odpowiedzi w sieci, a na pewno takiego nie ma na tym SE.

Odpowiedź

W dziedzinie chipsetów ARM, które są wspólnym czynnikiem, cały stos Androida, z niemal identycznego jądra opartego na Linux jest w rzeczywistości 32-bitowy, skompilowany krzyżowo z zwykle 32-bitowego / 64-bitowego środowiska hosta, środowisko hosta jest zwykle jedną z dystrybucji Linuksa. Zalecana dystrybucja przez Google do kompilowania i kompilowania systemu Android to Ubuntu .

Biblioteka wykonawcza Androida (między innymi media, grafika, system plików) to również 32-bitowe, ale kiedy docieramy do warstwy dalvikvm, wtedy liczba bitów staje się nieistotna, ponieważ w tym momencie apki pochodzące ze sklepu Google Play są natywnym kodem bajtowym („produkt uboczny” wygenerowanego kodu Java skompilowany na przenośny kod bajtowy), który jest przeznaczony dla DalvikVM (maszyny wirtualnej), który z kolei interpretuje i tłumaczy kod bajtowy wskazujący na surowy zestaw instrukcji ARM.

Froyo był ostatnim Androidem, który umożliwił kompilację w 32-bitowym środowisku hostowanym, w którym został skompilowany z myślą o chipsecie ARM.

Gingerbread był pierwszym z „przyszłego” Androida, wtedy około trzy lata temu, który wprowadził wymóg używania 64-bitowego hostowanego środowiska, w którym został zbudowany . Było wiele hacków, które sprawiły, że Gingerbread został zbudowany w 32-bitowym środowisku hostowanym.

ICS i JB, a nowsze wersje zdecydowanie wymagają środowiska 64-bitowego, aby przyspieszyć kompilację i skrócić czas potrzebny na kompilację.

Podsumowując, to, co widzisz w Sklepie Play, nie ma wpływu na to, czy używany jest 32-bitowy, czy 64-bitowy, a zatem nie ma znaczenia.

Uwaga dodatkowa: typowe 16 GB RAM / Czterordzeniowa / 64-bitowa dystrybucja Linuksa, czas potrzebny na zbudowanie ICS od zera, zajmuje maksymalnie 30 minut, gdyby była to 32-bitowa dystrybucja Linuksa, zajęłoby to więcej czasu, w rzeczywistości może spowodować stopę procesora, ponieważ jest po prostu, za mało moc obliczeniowa potrzebna do odejścia i uruchomienia skompilowanego krzyżowo kodu, co jest bardzo wymagającym i podatnym procesem!

Dowód.

Pobierz dowolny natywny plik binarny ARM znaleziony w /system/bin lub /system/xbin , na przykład /system/bin/dalvikvm, to jest plik binarny maszyny wirtualnej Dalvik, który jest odpowiedzialny za wyższe warstwy Javy i pakietów APK.

Teraz sprawdź plik binarny, wydając ten polecenie: file dalvikvm, które zawiera podsumowanie typu pliku, oczekiwany wynik będzie taki:

dalvikvm: 32-bitowy plik wykonywalny LSB ELF, ARM, wersja 1 (SYSV), połączony dynamicznie (używa udostępnionych bibliotek), usunięty

Zwróć uwagę na odniesienie do 32-bitowego ELF i jest skompilowany krzyżowo do ARM i jest binarnym plikiem wykonywalnym.

Dobrze, przejdźmy dalej, zbadajmy natywna biblioteka współdzielona znaleziona w /system/lib, na przykład /system/lib/libandroid_runtime.so, teraz wydanie 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), połączony dynamicznie, pozbawiony

Ponownie, zauważ, jego 32-bitowy ELF, skompilowany krzyżowo do ARM i jest biblioteką współdzieloną.

Kluczem do kompilację krzyżową hosta można znaleźć w źródłach AOSP, tj. kompilacja Gingerbread pierwotnie wymagała zbudowania na systemie hosta 64-bitowego, oto grupa dyskusyjna linky odnoszący się do jak załatać skrypty, aby skompilować je na 32-bitowym hoście , który ma dwie łaty, znalezione tutaj, dla build/core.mk i build/main.mk ( łącznie ) w recenzji Gerrit przeprowadzonej przez AOSP.

Jako kolejny w rezultacie ta poprawka trafiła do skryptów budowania ICS, w których miałem przywilej kompilowania ICS na 32-bitowej platformie, co zajęło 3 dni ( był to port ICS dla Zte Blade ). Teraz wymagania są zwiększone, do zdecydowanie potrzebujesz 64-bitowego hosta, aby umożliwić kompilację krzyżową tworzenia AOSP od ICS w górę: )

Komentarze

  • Masz na myśli, że kompilacja i uruchomienie 32-bitowego systemu operacyjnego Android trwa wolniej niż w wersji 64-bitowej? Czy w przypadku nowoczesnych systemów operacyjnych Android, takich jak Kitkat lub L , wymagana jest wersja 64-bitowa?
  • Obecnie dostępne są 64-bitowe urządzenia ARM z 64-bitowym systemem Android.
  • Ja ' m obniżam głosowanie, ponieważ większość odpowiedzi dotyczy tego, jakie środowiska są używane do kompilacji Androida, co jest zupełnie nieistotne dla pytanie.
  • @DanHulme Ta odpowiedź została wysłana około 4 lata temu … tak, od tamtego czasu krajobraz bardzo się zmienił. 🙂
  • Tak, że ' jest prawdą i ' mam zamiar opublikować nową odpowiedź na temat dzisiejsza sytuacja, ale środowisko kompilacji zawsze było na wagę złota.

Odpowiedź

Pierwotnie Android został napisany tylko dla procesorów 32-bitowych: a konkretnie dla 32-bitowych procesorów ARM. Później Intel i MIPS zainwestowały dużo, aby Android obsługiwał 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 dostarczane jako kod bajtowy , który jest maszyną wirtualną na telefonie kompiluje się do architektury telefonu po uruchomieniu aplikacji. Niektóre aplikacje zawierają komponenty natywne , które są dostarczane 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. Te aplikacje 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 działa tylko w Javie, więc działają one na dowolnej architekturze.

Wszystko powyższe było prawdą w czasie, gdy to pytanie (i większość innych odpowiedzi) brzmiało napisane, ale już nie. Lollipop wprowadził obsługę nowych 64-bitowych procesorów ARM ( ARMv8 ), a także procesorów Intel i AMD x86_64, co oznacza, że Android obsługuje teraz zarówno 32-bitowe, jak i 64-bitowe procesory. Nexus 9 był pierwszym flagowym 64-bitowym urządzeniem z Androidem. Oprócz dostępu do nowych rozszerzeń zestawu instrukcji obsługa wersji 64-bitowej oznacza, że aplikacje mogą używać więcej niż 4 GB pamięci RAM. Większość aplikacji nie potrzebuje tak dużo, ale zaawansowane gry i oprogramowanie do tworzenia zdjęć / filmów z pewnością mogą z tego skorzystać: popychanie Androida do bycia platformą dla gier o jakości konsolowej (w tym gier VR) i do tworzenia treści. Aplikacje Java nie trzeba aktualizować, aby to wykorzystać, ponieważ maszyna wirtualna zawsze kompiluje je do architektury telefonu, ale aplikacje z natywnym kodem będą.

Ponieważ ARMv8 jest wstecznie kompatybilny z 32- kod bitowy (w ten sam sposób, w jaki x86_64 może nadal uruchamiać kod x86), nawet aplikacje zawierające kod natywny dla procesorów 32-bitowych mogą nadal działać na 64-bitowym systemie Android. Dlatego aplikacja musi zostać skompilowana tylko dla wersji 64-bitowej, jeśli zawiera kod i , który chce wykorzystać wyższy limit pamięci RAM lub nowe funkcje architektury.

Odpowiedź

Wszystkie układy ARM są obecnie 32-bitowe. Z tego powodu system Android wykonuje cały kod w środowisku 32-bitowym.

64-bitowe procesory mają zostać uruchomione w 2014 r. .

Komentarze

  • To ' nie jest do końca wiarygodnym źródłem, ponieważ mowa o serwerach, aby zacytować „ Smartfon jest trochę dalej ”- powiedział Forsyth. , mówimy ' o ARM w kontekście Androida / smartfonów / tabletów.

Odpowiedź

Czy Android jest 32- czy 64-bitowym systemem operacyjnym? Zakładam, że jest to jeden lub drugi, a nie oba, ponieważ wymusiłoby to hostowanie zarówno 32-, jak i 64-bitowych plików binarnych w Google Play.

Ani właściwie. Android to system operacyjny oparty na maszynie wirtualnej Dalvik, a Google Play obsługuje aplikacje Dalvik. Sama maszyna wirtualna Dalvik, podobnie jak maszyna wirtualna Java, jest zawsze 32-bitowa, niezależnie od bitowości maszyny fizycznej.

Jak podejrzewasz, aplikacje dostarczane z natywnymi plikami binarnymi i aplikacjami NDK muszą być dostarczane z plikami binarnymi skompilowanymi dla każdej architektury ma działać w. Najpopularniejszą architekturą, na której działa Android, jest 32-bitowy ARM; jednak są też urządzenia działające na x86 i MIPS.

Odpowiedź

Zgaduję, ale myślę, że to też wyjaśnia to po prostu prosty. Zależy to od używanego urządzenia, istnieją cztery typy systemów operacyjnych: 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 platformą nietypową i używaną w Zenfones, podobnie jak X84_64 jest nietypowa i używana na emulatorach Androida. Mam te informacje na temat systemu operacyjnego w Open Gapps

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *