2011-08-16 2 views
120

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

NDK 문서에 따르면 armeabi-v7a 코드는 추가 CPU 지침을 포함 할 수있는 확장 된 armeabi 코드입니다. 이 모든 것은 내 전문 지식을 뛰어 넘지 만 왜 armeabi-v7a 및 armeabi 코드를 모두 갖고 싶은지 질문합니다. 둘 다 가질 좋은 이유가 있어야합니다, 그렇죠?

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

+1

이 블로그 포스트를 지금 읽고 싶을 수도 있습니다. 철저하고 최신 상태입니다. https://androidbycode.wordpress.com/tag/armeabi-v7a/ –

답변

139

네이티브 코드에 따라 다르지만 v7a는 하드웨어 부동 소수점 연산을 지원하므로 큰 차이가 있습니다. armeabi는 모든 장치에서 정상적으로 작동하지만 훨씬 느려지고 새로운 장치의 CPU 기능을 이용하지 않습니다. 특정 애플리케이션에 대한 벤치 마크를 수행하지만 armeabi-v7a 바이너리를 제거하는 것은 일반적으로 좋은 방법은 아닙니다. 크기를 줄이려면 오래된 (armeabi) 장치와 새로운 (armeabi-v7a) 장치 용으로 두 개의 개별 apk가 필요할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 2 개의 APK 파일로 애플리케이션을 분할하는 것뿐만 아니라 벤치마킹을하는 것도 좋은 생각입니다. 후자는 실제로 매우 좋은 아이디어입니다! 많은 감사합니다! – PaulT

+1

어디에서 두 ABI의 차이점을 찾을 수 있습니까? 나는 진짜 차이를 이해하기 위해 매우 instersted ... – webshaker

+7

ARM 매뉴얼? http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0344c/Cacciced.html –

55

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

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

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

+0

https://developer.android.com/ndk/guides/abis.html에 따라 : 'armeabi-v7a ABI는 -mfloat-abi = softfp 스위치를 사용합니다. 그래서 ** 지원은 무엇입니까? -mfloat-abi = hard **? –