Android는 32 비트 또는 64 비트 OS입니까?


46

제목은 거의 자명하다 : 안드로이드는 32 비트 또는 64 비트 OS인가? 32 비트 및 64 비트 바이너리를 모두 Google Play에서 호스팅해야하므로 둘 다가 아니라고 가정합니다. 나는 이것이 간단한 질문이며 다른 사람들이 그것을 묻고 있다는 것을 알고 있지만, 내 인생에서 나는 웹에서 답을 찾을 수 없었으며,이 SE에는 분명히 답이 없었습니다.

답변:


48

공통 요소 인 ARM 칩셋의 영역에서 Linux 기반의 거의 동일한 커널의 전체 Android 스택은 일반적으로 32 비트 / 64 비트 호스트 환경, 호스트 환경 중 하나에서 크로스 컴파일됩니다. 일반적으로 Linux 배포판 중 하나입니다. Android 빌드 및 크로스 컴파일을위한 Google의 권장 배포는 Ubuntu 입니다.

안드로이드 런타임 라이브러리 (미디어, 그래픽, 파일 시스템, 이름은 있지만 일부는 32 비트)도 32 비트이지만, dalvikvm의 레이어에 도달하면 비트 수는 관련이 없습니다. Google Play 스토어의 DalvikVM (Virtual Machine)을 대상으로하는 원시 바이트 코드 (휴대용 바이트 코드로 컴파일 된 생성 된 Java 코드의 "부산물")는 원시 ARM 명령어 세트를 대상으로하는 바이트 코드를 해석하고 변환합니다.

Froyo는 32 비트 호스팅 환경에서 ARM 칩셋을 대상으로 크로스 컴파일 된 컴파일이 가능한 마지막 Android였습니다.

진저 브레드는 3 년 전, 최초의 "미래"안드로이드였으며, 64 비트 호스팅 환경을 사용해야한다는 요구 사항을 소개했다. 32 비트 호스팅 환경에서 Gingerbread를 빌드하기위한 많은 해킹이있었습니다.

ICS 및 JB 이상에서는 컴파일 속도를 높이고 구축 시간을 단축하기 위해 64 비트 환경이 필요합니다.

요약하자면, Play 스토어에서 볼 수있는 것은 32 비트 또는 64 비트의 사용 여부와 무관합니다.

참고 사항 : 일반적인 16GB RAM / 쿼드 코어 / 64 비트 Linux 배포판, ICS를 처음부터 작성하는 데 걸리는 시간, 최대 30 분 소요, 32 비트 Linux 배포판 인 경우 실제로 시간이 오래 걸리면 CPU가 다운 될 수 있음 단순히 존재하는 한, 충분한 처리 능력은 휘젓다 및 크랭크 크로스 컴파일 된 코드, 출력 할 수 있습니다 매우 까다 롭고 부담스러운 과정!

이것의 증거.

예를 들어 /system/bin또는 에있는 기본 ARM 바이너리 를 가져옵니다. 이는 Java 및 APK의 상위 계층을 담당하는 Dalvik VM 바이너리입니다./system/xbin/system/bin/dalvikvm

이제이 명령을 실행하여 이진 파일을 검사하십시오. file dalvikvm파일 형식을 요약하면 예상되는 결과는 다음과 같습니다.

dalvikvm : ELF 32 비트 LSB 실행 파일, ARM, 버전 1 (SYSV), 동적 링크 (공유 라이브러리 사용), 제거

32 비트 ELF에 대한 참조를 확인하고 ARM으로 크로스 컴파일되며 바이너리 실행 파일입니다.

계속해서, /system/lib예를 들어 /system/lib/libandroid_runtime.so, 이제는 issue에 있는 기본 공유 라이브러리를 검사하겠습니다 file libandroid_runtime.so. 예상되는 결과는 다음과 같습니다.

libandroid_runtime.so : ELF 32 비트 LSB 공유 객체, ARM, 버전 1 (SYSV), 동적 연결, 제거

다시 말하지만 32 비트 ELF는 ARM으로 크로스 컴파일되었으며 공유 라이브러리입니다.

호스트의 크로스 컴파일의 핵심은 AOSP 소스에서 찾을 수있다, 즉, 진저 빌드는 원래 여기에 뉴스 그룹의, 64 비트 호스트 시스템에 구축 할 요구 사항을 가지고 linky 참조 가에 구축 얻을 수있는 스크립트를 패치하는 방법은 32 비트 호스트 두 개의 패치를 가지고, 여기를 발견 build/core.mk하고 build/main.mk( 결합 AOSP의 리트 검토).

결과적으로이 패치는 ICS를 빌드하는 데 3 일이 걸렸던 32 비트 플랫폼에서 ICS를 컴파일 할 수있는 권한을 가진 ICS의 빌드 스크립트로 전환되었습니다 ( Zte Blade의 ICS 포트 ). 이제, 요구 사항, 램프 업하는 당신은 확실히 위쪽으로 ICS에서 AOSP를 건물의 크로스 컴파일을 사용하려면 64 비트 호스트가 필요합니다 :


2
흥미로운 것들이지만 대답에 소스가 있으면 좋을 것입니다.
땅콩

2
+1, 소스가 없더라도 조사 대상의 최소 절반은 조사 대상을 찾는 데 도움이 되었기 때문입니다. 질문을 돕고 대답하기 위해 적절한 시도를 한 사람을 -1하지 마십시오.
haylem

1
이제 64 비트 Android를 실행하는 64 비트 ARM 장치가 있습니다.
Matthew 읽기

1
대부분의 대답은 Android 를 컴파일 하는 데 사용되는 환경에 관한 것이므로 질문과 완전히 관련이 없기 때문에 다운 투표하고 있습니다 .
Dan Hulme

1
예, 사실입니다. 오늘 상황에 대한 새로운 답변을 게시 할 예정이지만 컴파일 환경은 항상 붉은 청어였습니다.
Dan Hulme 2016 년

8

원래 Android는 32 비트 프로세서, 특히 32 비트 ARM 프로세서 용으로 작성되었습니다. 나중에 인텔과 MIPS는 안드로이드가 아키텍처를 지원하는 데 많은 투자를했지만 여전히 32 비트 프로세서 만 지원했습니다. 대부분의 앱은 바이너리로 제공되지 않기 때문에 (다수) 호환성 문제 없이이 작업을 수행 할 수있었습니다. 자바로 작성된, 그들은 대신으로 제공되는 바이트 코드 하는 가상 머신 응용 프로그램이 실행될 때 전화가 휴대 전화의 아키텍처로 컴파일합니다. 일부 앱에는 기본 앱이 포함됨바이너리로 제공되는 구성 요소. 이는 일부 종류의 앱 (특히 게임)을 더 빠르게 만들거나 앱이 Java에서 사용할 수없는 C 라이브러리에 액세스 할 수 있도록하기 위해 수행됩니다. 이러한 앱에는 네이티브 코드 부분에 대한 바이너리가 둘 이상 포함되어있어 다른 아키텍처에서 실행될 수 있습니다. 그럼에도 불구하고 대부분의 앱은 Java 전용이므로 모든 아키텍처에서 작동합니다.

위의 질문은이 질문 (및 대부분의 다른 답변)이 작성된 시점에서 사실이지만 더 이상은 아닙니다. Lollipop, 새로운 64 비트 ARM 프로세서 ( ARMv8) 지원)뿐만 아니라 Intel 및 AMD x86_64 프로세서도 지원합니다. 즉, Android는 이제 32 비트 및 64 비트 프로세서를 모두 지원합니다. Nexus 9는 최초의 64 비트 Android 기기입니다. 새로운 명령어 세트 확장에 대한 액세스 권한을 제공 할뿐만 아니라 64 비트 지원은 앱이 4GB 이상의 RAM을 사용할 수 있음을 의미합니다. 대부분의 앱은 그다지 필요하지 않지만 고급 게임 및 사진 / 비디오 제작 소프트웨어는 확실히 그것을 사용할 수 있습니다. 즉, Android를 콘솔 품질 게임 (VR 게임 포함) 및 컨텐츠 제작 플랫폼으로 추진하는 것입니다. 이를 활용하기 위해 Java 앱을 업데이트 할 필요가 없습니다. 가상 머신은 항상이를 전화 아키텍처로 컴파일하지만 기본 코드가있는 앱은이를 지원하기 때문입니다.

ARMv8은 32 비트 코드 (x86_64가 x86 코드를 계속 실행할 수있는 것과 같은 방식)와 역 호환되므로 32 비트 프로세서 용 원시 코드를 포함하는 앱도 64 비트 Android에서 계속 실행될 수 있습니다. 이 네이티브 코드가 포함되어있는 경우 응용 프로그램은 64 비트 컴파일 할 필요가 그래서 하고 그것은 더 높은 RAM 제한 또는 아키텍처의 새로운 기능을 활용하고자합니다.


5

모든 ARM 칩은 현재 32 비트입니다. 이 때문에 Android는 현재 모든 코드를 32 비트 환경에서 실행 합니다.

2014 년에 64 비트 프로세서 가 출시 될 예정입니다 .


1
Forsyth는“스마트 폰은 조금 더 떨어져있다”고 말하면서 서버에 관해 이야기 할 때 정확하게 신뢰할 수있는 소스 는 아니다. Android / Smartphones / Tablets의 맥락에서 ARM에 대해 이야기하고 있습니다.
t0mm13b

2

Android는 32 비트 또는 64 비트 OS입니까? 32 비트 및 64 비트 바이너리를 모두 Google Play에서 호스팅해야하므로 둘 다가 아니라고 가정합니다.

실제로도 마찬가지입니다. Android는 Dalvik VM 기반 OS이며 Google Play는 Dalvik 애플리케이션을 호스팅합니다. Java VM과 마찬가지로 Dalvik VM 자체는 물리적 시스템의 비트 크기에 관계없이 항상 32 비트입니다.

의심스러운대로 기본 바이너리 및 NDK 애플리케이션과 함께 제공되는 애플리케이션은 실행하려는 모든 아키텍처에 대해 컴파일 된 바이너리와 함께 제공되어야합니다. Android가 실행되는 가장 일반적인 아키텍처는 ARM 32 비트입니다. 그러나 x86 및 MIPS에서 실행되는 장치도 있습니다.


0

나는 단지 추측하지만 이것도 간단하다고 설명합니다. 사용하는 장치에 따라 ARM, ARM 64, X84 및 X84_64의 네 가지 유형의 os가 있습니다. ARM은 널리 사용되는 32 비트 플랫폼이고 ARM 64는 널리 사용되지만 64 비트 플랫폼이며 X84는 흔하지 않은 플랫폼이며 Zenfones에서 사용되며 X84_64는 흔하지 않으며 Android 에뮬레이터에서 사용됩니다. Open Gapps 에서이 OS 정보를 얻었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.