제목은 자명합니다. Android가 32 비트 또는 64 비트 OS입니까? 32 비트와 64 비트 바이너리가 모두 Google Play에서 호스팅되도록 강제하기 때문에 둘 다가 아니라 둘 중 하나라고 가정합니다. 나는 이것이 간단한 질문이고 다른 사람들이 그것을 묻고 있다는 것을 압니다. 그러나 저의 인생 동안 나는 웹에서 답을 찾을 수 없었고, 확실히이 SE에는 하나도 없습니다.

답변

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

Android 런타임 라이브러리 (미디어, 그래픽, 파일 시스템 등)는 다음과 같습니다. 또한 32 비트이지만 dalvikvm의 계층에 도달하면이 시점에서 비트 수는 무의미 해집니다. Google Play 스토어에서 가져온 APK는 기본 바이트 코드입니다 (생성 된 Java 코드의 “부산물”컴파일 DalvikVM (Virtual Machine)을 대상으로하는 DalvikVM (Virtual Machine)은 원시 ARM 명령어 세트를 대상으로하는 바이트 코드를 해석하고 변환합니다.

Froyo는 32 비트 호스팅 환경에서 컴파일을 활성화 한 마지막 Android입니다. ARM 칩셋을 대상으로 교차 컴파일되었습니다.

Gingerbread는 3 년 전 당시 구축 된 64 비트 호스팅 환경을 사용해야한다는 요구 사항을 도입 한 최초의 “미래형”Android였습니다. . Gingerbread를 32 비트 호스팅 환경에서 구축하기위한 많은 해킹이있었습니다.

ICS와 JB, 그리고 그 이상에서는 컴파일 속도를 높이고 빌드 시간을 줄이기 위해 64 비트 환경이 필요합니다.

요약하면 Play 스토어에 표시되는 내용은 32 비트 또는 64 비트 사용 여부와 관련이 없으므로 관련성이 없습니다.

참고 : 일반적인 16GB RAM / 쿼드 코어 / 64 비트 Linux 배포판, 처음부터 ICS를 구축하는 데 걸리는 시간, 최대 30 분 소요, 이것이 32 비트 Linux 배포판이라면 더 오래 걸렸을 것입니다. 사실 단순히 충분하지 않기 때문에 CPU 붕괴를 일으킬 수 있습니다. 크로스 컴파일 된 코드를 변환하고 생성하는 처리 능력은 매우 까다 롭고 부담스러운 프로세스입니다!

증명

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

이제 다음을 실행하여 바이너리를 검사합니다. 명령 : 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 : ELF 32 비트 LSB 공유 객체, ARM, 버전 1 (SYSV), 동적 연결, 제거됨

다시 한 번, ARM으로 크로스 컴파일 된 32 비트 ELF이며 공유 라이브러리입니다.

호스트의 교차 컴파일은 AOSP 소스에서 찾을 수 있습니다. 즉, Gingerbread 빌드는 원래 64 비트 호스트 시스템에서 빌드해야하는 요구 사항이있었습니다. 여기는 뉴스 그룹 linky입니다. build/core.mk > 및 build/main.mk ( 결합 ).

이후 결과적으로이 패치는 ICS의 빌드 스크립트에 적용되었으며, 빌드하는 데 3 일이 걸리는 32 비트 플랫폼에서 ICS를 컴파일 할 수있는 권한이 있습니다 ( Zte Blade 용 ICS 포트 em>). 이제 요구 사항이 증가했습니다. ICS에서 AOSP를 빌드하는 교차 컴파일을 사용하려면 64 비트 호스트가 반드시 필요합니다 : )

코멘트

  • 그러면 32 비트 Android OS에서 컴파일하고 실행하는 데 64 비트보다 느리다는 의미입니까? Kitkat 또는 L 과 같은 최신 Android OS의 경우 모두 64 비트 여야하나요?
  • 현재 64 비트 ARM 기기가 있습니다. 64 비트 Android 실행.
  • ' 대부분의 답변은 Android를 컴파일 하는 데 사용되는 환경에 대한 것이기 때문에 반대 투표를합니다. 질문입니다.
  • @DanHulme이 답변은 거의 4 년 전에 게시되었습니다 … 네, 그 이후로 풍경이 많이 바뀌 었습니다. 🙂
  • 예, ' 사실이며 '에 대한 새 답변을 게시 할 것입니다. 하지만 컴파일 환경은 항상 적 청어였습니다.

답변

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

이 질문 (및 대부분의 다른 답변)은 당시에 위의 내용이 모두 사실이었습니다. Lollipop은 새로운 64 비트 ARM 프로세서 ( ARMv8 )와 Intel 및 AMD의 x86_64 프로세서에 대한 지원을 도입했습니다. 이는 이제 Android가 32 비트 및 64 비트 프로세서. Nexus 9는 최초의 플래그십 64 비트 Android 기기였습니다. 새로운 명령 집합 확장에 대한 액세스를 제공 할뿐만 아니라 64 비트 지원은 앱이 4GB 이상의 RAM을 사용할 수 있음을 의미합니다. 대부분의 앱은 그다지 많이 필요하지 않지만 고급 게임과 사진 / 비디오 제작 소프트웨어는 확실히이를 활용할 수 있습니다. Android를 콘솔 수준의 게임 (VR 게임 포함) 및 콘텐츠 제작을위한 플랫폼으로 밀어 붙이는 것입니다. 자바 앱 이를 활용하기 위해 업데이트 할 필요는 없습니다. 가상 머신은 항상이를 휴대폰의 아키텍처로 컴파일하지만 네이티브 코드가있는 앱은 그렇게 할 것입니다.

ARMv8은 32와 하위 호환되기 때문입니다. 비트 코드 (x86_64가 x86 코드를 계속 실행할 수있는 것과 같은 방식). 32 비트 프로세서 용 네이티브 코드가 포함 된 앱도 64 비트 Android에서 계속 실행될 수 있습니다. 따라서 네이티브 앱이 포함 된 경우 64 비트 용으로 만 컴파일하면됩니다. 코드 그리고 더 높은 RAM 제한 또는 아키텍처의 새로운 기능을 활용하고자합니다.

답변

현재 모든 ARM 칩은 32 비트입니다. 이로 인해 Android는 현재 를 실행합니다. 32 비트 환경의 모든 코드.

64 비트 프로세서 2014 년 출시 예정 .

댓글

  • '이 서버에 대해 이야기 한 것처럼 정확하게 신뢰할 수있는 출처는 아닙니다. “스마트 폰은 조금 더 떨어져 있습니다.”라고 Forsyth는 말했습니다. , 우리는 ' Android / 스마트 폰 / 태블릿의 맥락에서 ARM에 대해 이야기하고 있습니다.

답변

h2>

Android는 32 비트 또는 64 비트 OS입니까? 32 비트 및 64 비트 바이너리가 모두 Google Play에서 호스팅되도록 강제하므로 둘 다가 아니라 둘 중 하나라고 가정합니다.

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

예상했듯이 네이티브 바이너리 및 NDK 애플리케이션과 함께 제공되는 애플리케이션은 모든 아키텍처에 대해 컴파일 된 바이너리와 함께 제공되어야합니다. 에서 실행되도록되어 있습니다. Android가 실행되는 가장 일반적인 아키텍처는 ARM 32 비트입니다. 그러나 x86 및 MIPS에서 실행되는 장치도 있습니다.

Answer

그냥 추측하지만 이것이 또한 설명하는 것 같습니다. 단순한. 사용하는 장치에 따라 ARM, ARM 64, X84 및 X84_64의 네 가지 유형의 os가 있습니다. ARM은 인기있는 32 비트 플랫폼, ARM 64도 인기 있지만 64 비트 플랫폼, X84는 드문 플랫폼이며 Zenfones에서 사용되며 X84_64는 드물고 Android 에뮬레이터에서 사용됩니다. Open Gapps

에서이 OS 정보를 얻었습니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다