Android 앱을 다운로드하는 동안 및 x86
아키텍처.
armeabi-v7a
및 x86
아키텍처. 하지만 결국 어떤 모바일 프로세서와 아키텍처가 armeabi-v7a
에 속하는지, 어떤 것이 x86
에 속하는지 확정 할 수 없었습니다.
내가 아는 한 Android 기기에서 일반적으로 사용되는 모바일 프로세서는 Snapdragon (Qualcomm), MediaTek, Exynos (삼성) 및 Kirin (Huawei)입니다. 거의 모든 브랜드가 스마트 폰의 사양을 설명하며 거의 모든 사양이 말합니다. 모바일 프로세서가 64 비트인지 여부입니다. 64 비트 모바일 프로세서 (Snapdragon, MediaTek, Exynos 또는 Kirin)가 ARM 아키텍처에 속한다고 결론을 내릴 수 있나요?
편집 :
어떤 SoC가 armeabi-v7a
Android apk를 지원하고 어떤 SoC가 x86
Android apk, MediaTek Helio X30
및 Snapdragon 855
의 사양을 살펴 봤습니다. Helio X30의 사양은 이중 -코어 ARM Cortex-A73 및 쿼드 코어 ARM Cortex-A53 (ARM i) Snapdragon 855의 사양에는 언급되지 않았습니다. 따라서 Helio X30은 armeabi-v7a
Android 앱을 지원하고 Snapdragon 855는 armeabi-v7a
앱인가요?
혼란을 명확히 해주세요.
답변
다음은에 대한 불완전한 요약 메모입니다. 제목이지만 질문에 답하기에 충분합니다.
지침 세트 :
프로세서는 일반적으로 전자 등급의 단결정 실리콘 인 반도체 다이로 만들어집니다. 그들은 영어 나 다른 사람의 언어를 모르고 0
와 1
만 이해합니다. 따라서 프로세서 설계자는 우리에게 0과 1의 시퀀스는 특정 프로세서에 지시 할 수 있습니다.이 숫자 형 명령 언어는 Machine Language
로 표준화되고 기계 명령 세트는 Instruction Set
. 프로세서는 특정 유형의 명령어 세트에서만 작동 할 수 있습니다.
명령어 세트는 8/16/32/64 비트 일 수 있습니다 (프로세서가 한 번에 처리 할 수있는 명령어 수를 정의 함). ), 최근 2 개는 일반적인 언어입니다.
낮은 수준의 언어 :
하지만 기계어 (실행 파일)로 직접 프로그램 코드 (지시)를 작성하는 것은 거의 불가능에 가깝습니다. (요즘 몇 시간 안에 작성할 수있는) 상당히 큰 프로그램을 작성하고 디버깅하는 데 몇 년이 걸리기 때문입니다. 프로그래머를 안심시키기 위해 Assembly Languag e는 여전히 프로세서 고유의 언어로 개발되었지만 상대적으로 이해하기 쉽습니다. 어셈블리 언어로 작성된 코드는 기계어로 작성된 프로그램 인 Assembler
에 의해 기계어 코드로 변환됩니다. 둘 다 저수준 언어라고합니다.
고수준 언어 :
하드웨어와 통신하는 사람의 노력을 더욱 줄이기 위해 특정 명령어 세트 (특정 아키텍처 표시)에 묶이지 않는 고급 언어가 개발되었습니다. 이들은 인간 언어와 동일하므로 작성, 이해, 디버그 및 여러 아키텍처에 적용하기 쉽습니다. 고수준 언어로 작성된 코드는 저수준 언어로 작성된 프로그램 인 Compiler
에 의해 저수준 언어로 변환됩니다. 가장 일반적으로 사용되는 고급 언어 중 하나는 C입니다. 그러나 때로는 코드가 기계 코드로 사전 컴파일되지 않고 대신 Interpreter
에 의해 직접 실행 (또는 실행 중에 컴파일)됩니다. Java는 byte-code
로 컴파일 된 다음 iv id = “6dd6e4821b”에 의해 해석되는 “한 번 작성하면 어디서나 실행”(WORA) 언어 중 하나입니다. >
-다시 컴파일 된 프로그램입니다.
ABI (APPLICATION BINARY INTERFACE) :
아키텍쳐 독립적 인 프로그램 (코드)은 모든 프로세서에 대한 아키텍처 의존적 코드로 변환 될 수 있기 때문에 특정 아키텍처의 모든 요구 사항을 처리하는 것은 컴파일러의 의무입니다. ABI (Application Binary Interface)가 정의합니다. 간단히 말해서 ABI는 하나 이상의 특정 아키텍처를 나타냅니다. 임베디드 ABI에 대한 자세한 내용은 조립 및 컴파일 단계에 대한 통찰력이 필요합니다. 오브젝트 코드, ELF (Executable and Linkable Format), 정적 (아카이빙) 및 라이브러리의 동적 링크 등
이제 귀하의 질문에 대한 답변 :
x86
및 ARM
이란 무엇입니까?
x86은 주로 Intel과 AMD에서 개발 및 제조 한 명령어 세트 제품군입니다. ARM은 단일 법인 ARM Holdings
에 의해 설계되었으며 Qualcomm, Mediatek, Samsung 및 Huawei를 비롯한 많은 임베디드 솔루션 제조업체에 라이센스가 부여 된 또 다른 제품군입니다. Snapdragon, Exynos 및 Kirin은 브랜드 이름입니다. 프로세서 제조업체는 아니지만 자체 SoC (System on Chip) 회로에 ARM 프로세서를 포함 할 수있는 라이센스가 있습니다.
SoC 란 무엇입니까?
SoC (System on Chip)는 GPU, RAM, Flash / eMMC (HDD 또는 SSD와 동일)와 같은 다른 구성 요소와 함께 프로세서를 포함하는 작은 회로입니다. , WiFi 및 블루투스 모듈, USB 연결, UART (직렬 포트), JTAG (매우 낮은 수준의 직렬 통신 프로토콜), GPS, 모뎀 (셀룰러 연결 용) 및 기타 가능합니다.
ARM ABI :
Android 앱의 주요 부분은 Java로 작성되었지만 C 및 컴파일해야하는 C ++. Android는 (라이브러리, 헤더 파일 및) iv id = “5d5237dd7e를 포함하여 여러 ABI 용 코드를 컴파일 할 수있는 컴파일러를 포함하는 자체 네이티브 개발 키트 ( NDK )를 제공합니다. “> (Linux 커뮤니티의 경우 armhf
) 및 x86
.
Android (자바) 앱 자체 아키텍처에만 국한되지 않습니다. 앱 빌드 프로세스 중에 Android SDK는 자바 소스를 바이트 코드 (.class
파일)로 변환 한 다음 D alvik EX ecutable (.dex
) 파일은 .apk
파일로 압축됩니다.이 Dalvik 바이트 코드는 Dalvik Virtual Machine
/ ART
모든 앱에 대해 Zygote
라는 프로세스에 의해 지정됩니다. 또는 네이티브 기계어 코드로 영구적으로 컴파일 될 수 있습니다 (.odex
또는 ) 앱 설치 중 (또는 나중에 ) 기기의 아키텍처에 따라 다릅니다. 하지만 apk (zip) 파일에 ELF 바이너리 / 라이브러리가 추가로 포함 된 경우 아키텍처별로 다릅니다. 개발자는 일반적으로 앱에 여러 아키텍처를위한 네이티브 라이브러리를 포함합니다.
ARM Embedded ABI v7a
를 대상으로하는 컴파일러 제품군으로 빌드 된 네이티브 애플리케이션 / 프로그램 / binaries / executable / libraries ( armeabi-v7a )는 Application profile of 7th version of ARM processors
( Armv7-A ).
다른 공급 업체에서 제공하는 툴체인 으로 컴파일 된 코드는 동일한 아키텍처 (ABI 이름이 다르지만)를 대상으로 Android 기기에서도 실행되어야합니다.
32 비트 VS. 64 비트 :
ARM 프로세서는 32 비트 또는 64 비트 일 수 있습니다. 임베디드 시스템으로 구축하려는 SoC 제조업체에 따라 다릅니다. Snapdragon은 32 비트 또는 64 비트 일 수 있습니다. 32 비트 ARM 프로세서의 성능이 향상되었으며 버전 2에서 버전 7로 새로운 기능이 추가되었습니다. 64 비트 지원은 ARMv8에 도입되었습니다.
장치가 32 비트인지 64인지 확인하려면 비트, SoC의 사양을 확인한 다음 프로세서의 사양을 확인해야합니다. 예를 들어 Redmi Note 4 의 SoC는 Qualcomm Snapdragon 625 (MSM 8953) 입니다. 프로세서 Cortex-A53
. Cortex-53의 기술 사양 을 보면 처리 할 수있는 ARMv8
아키텍처를 기반으로합니다. 2 가지 유형의 명령어 세트 : aarch64
(Android의 arm64-v8a ABI에서 사용) 및 aarch32
(Android의 armeabi-v7a ABI에서 사용하는 예 : ARMv7
와 역 호환 됨) ).
따라서 이러한 ABI 모두에 대해 컴파일 된 바이너리 / 라이브러리를 실행할 수 있지만 x86 또는 (Linux 커뮤니티에서는 armel 이라고 함. 아키텍처 ARMv5/v6
를 대상으로하고 iv id NDK r17
에서 = “16364efd52”> 삭제됨 ).
관련 : 64 비트 하드웨어 기기에서 32 비트 Android 버전을 실행할 수 있습니까?
설명
답변
x86을 사용하는 하드웨어 장치의 수가 그리 많지 않았습니다. 몇 년 전 인텔에는 일부 Android 태블릿 (예 : Samsung Galaxy Tab 10.3)에 사용 된 x86 프로세서 (Intel Atom)가있었습니다.
그러나 이러한 태블릿은 시장에서 대량 판매에 도달하지 못했습니다. 그리고 시장에 x86 CPU를 사용하는 x86 스마트 폰이나 태블릿이 있는지 확실하지 않습니다.
그러나 “x86 Android 기기”를 접하는 매우 일반적인 사용 사례가 있습니다. Android 에뮬레이터.
에뮬레이터를 실행하는 PC는 일반적으로 x86 이미지 (ARMv7 또는 ARMv8 / ARM64 기반 이미지 대신)를 실행하는 x86 CPU 에뮬레이터를 사용하므로 CPU 통합 가상화 기술을 사용할 수 있습니다. 훨씬 더 빠른 속도입니다.
댓글
- 자세히 설명해 주셔서 감사합니다. 예를 하나 들어 보겠습니다. 내가 맞다면 프로세서 든 SoC 든 x86이라는 용어는 Intel 및 AMD와 관련이 있습니다. 예를 들어 보겠습니다.
- apkmirror.com/apk/mozilla/firefox/firefox-65-0-1 링크를 살펴 보았습니다. -release for Firefox android apk. 나는 거기에서 두 가지 변종을 보았다. armeabi-v7a 아키텍처 용 Firefox Android APK 및 x86 아키텍처 용 Firefox Android APK. 거기서부터 혼란이 시작되었습니다.
- 잘 알려진 Android 기기의 SoC는 Snapdragon, MediaTek, Exynos, Kirin 등입니다. 따라서 ARM 용 Android apk를 다운로드해야한다고 생각합니다. 내가 맞습니까?
- @ user741975 현재
armeabi-v7a
를 선택하면 99 % 이상의 확률로 실행됩니다. 현재 중급 또는 고급 기기가있는 경우arm64-v8a
도 옵션이 될 수 있습니다. 어쨌든 당신은 그것을 다운로드하고 설치를 시도 할 수 있습니다. 아키텍처가 잘못된 경우 설치가 실패합니다.
armeabi
를 언급합니다.