armeabi 코드보다 armeabi-v7a 코드를 사용하는 이유는 무엇입니까?


141

현재 프로젝트에서 여러 .so 파일을 사용합니다. 이들은 armeabi 및 armeabi-v7a 폴더에 있습니다. 불행히도 .so 파일 중 하나는 6MB이므로 파일 크기를 줄여야합니다. 뚱뚱한 APK 파일 대신에 armeabi 파일 만 사용하고 armeabi-v7a 폴더를 제거하고 싶습니다.

NDK 문서에 따르면 armeabi-v7a 코드는 추가 CPU 명령어를 포함 할 수있는 확장 된 armeabi 코드입니다. 이것은 모두 내 전문 지식을 넘어서지 만 armeabi-v7a와 armeabi 코드를 모두 갖고 싶은 이유에 의문을 제기합니다. 둘 다 가질만한 충분한 이유가 있어야합니까?

내 테스트 장치 에서이 모든 것이 잘 작동하는 것 같습니다. 여기에는 ARM v7 CPU가 있습니다. 모든 것이 지금 작동한다고 가정해도 안전합니까?


2
이 블로그 게시물을 지금 읽으십시오. 철저하고 최신입니다 : androidbycode.wordpress.com/tag/armeabi-v7a
IgorGanapolsky

2
그리고 지금 의사는 말합니다 :armeabi is deprecated in NDK r16. Removed in NDK r17. No hard float.
Amir Rezazadeh

1
나중에 오는 사람들은 여기를 살펴보십시오 .
Amir Rezazadeh

답변:


163

네이티브 코드의 기능에 따라 다르지만 v7a는 하드웨어 부동 소수점 연산을 지원하므로 큰 차이가 있습니다. armeabi는 모든 장치에서 제대로 작동하지만 속도가 훨씬 느리고 최신 장치의 CPU 기능을 활용하지 않습니다. 특정 응용 프로그램에 대해 몇 가지 벤치 마크를 수행하지만 armeabi-v7a 바이너리를 제거하는 것은 일반적으로 좋은 생각이 아닙니다. 크기를 줄여야하는 경우 구형 (armeabi) 및 최신 (armeabi-v7a) 장치에 대해 두 개의 별도 APK를 원할 수 있습니다.


1
두 ABI의 차이점을 어디에서 찾을 수 있습니까? 나는 실제 차이점을 이해하기 위해 매우 곤경에 빠졌습니다 ...
webshaker


1
이 두 가지 다른 APK를 업로드 할 수 있도록 Google Play를 얻는 것에 대한 아이디어가 있습니까? 매니페스트를 구별 할 수있는 방법이 없으므로 Google Play는 다른 버전으로 교체하려고합니다 (버전 코드가 다름)
Dean Wild

11
: @DeanWild 구글은 이제 플레이 스토어 여러 APK 기능에 다른 CPU 아키텍처를 목표에 대한 지원을 추가 한 developer.android.com/guide/google/play/publishing/...
찰스 할리을

1
@IgorGanapolsky, 지적 해 주셔서 감사합니다. 이것이 올바른 링크입니다 : developer.android.com/google/play/publishing/…
Charles Harley

60

EABI = 임베디드 애플리케이션 바이너리 인터페이스. 특정 실행 환경에서 실행하려면 실행 파일이 준수해야하는 사양입니다. 또한 ARM 아키텍처에 사용되는 툴체인 간의 상호 운용에 필요한 컴파일 및 링크의 다양한 측면을 지정합니다. 이러한 맥락에서 우리는 armeabi에 대해 말할 때 ARM 아키텍처와 GNU / Linux OS에 대해 말합니다. 안드로이드는 리틀 엔디안 ARM GNU / Linux ABI를 따릅니다.

armeabi 응용 프로그램은 ARMv5 (예 : ARM9) 및 ARMv6 (예 : ARM11)에서 실행됩니다. -mfpu = vfpv3 -mfloat-abi = softfp 와 같은 적절한 GCC 옵션을 사용하여 응용 프로그램을 빌드하면 컴파일러에서 VFP 하드웨어에 대한 부동 소수점 명령어를 생성하고 소프트 부동 호출 규칙을 활성화하도록 부동 소수점 하드웨어를 사용할 수 있습니다. armeabi는 하드 부동 호출 규칙을 지원하지 않습니다 (FP 레지스터는 함수에 대한 인수를 포함하는 데 사용되지 않음을 의미 함). 그러나 HW의 FP 작업은 여전히 ​​지원됩니다.

armeabi-v7a 응용 프로그램은 Cortex A8, A9 및 A15와 같은 Cortex A # 장치에서 실행됩니다. 멀티 코어 프로세서와 -mfloat-abi = hard를 지원합니다 . 따라서 -mfloat-abi = hard를 사용하여 응용 프로그램을 빌드하면 많은 함수 호출이 더 빠릅니다.


1
developer.android.com/ndk/guides/abis.html 에 따르면 : The armeabi-v7a ABI uses the -mfloat-abi=softfp switch. 따라서 support -mfloat-abi = hard는 무엇을 의미 합니까?
IgorGanapolsky

8

뚱뚱한 APK 파일 대신에 armeabi 파일 만 사용하고 armeabi-v7a 폴더를 제거하고 싶습니다.

그 반대는 훨씬 더 나은 전략입니다. 당신이있는 경우 minSdkVersion14 Play 스토어에 APK를 업로드, 당신은 당신이 지원 여부를 장치의 동일한 수를 지원합니다 알 수 있습니다 armeabi여부. 따라서 Android 4 이상을 사용하는 기기는 전혀 도움이되지 않습니다 armeabi.

이것이 아마도 NDK가 armeabi개정 r17b에 따라 더 이상 지원하지 않는 이유 일 것입니다 . [ 출처 ]

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