IT박스

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

itboxs 2020. 6. 22. 08:07
반응형

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


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

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

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


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


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를 사용하여 응용 프로그램을 빌드하면 많은 함수 호출이 더 빠릅니다.


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

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

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

참고 URL : https://stackoverflow.com/questions/7080525/why-use-armeabi-v7a-code-over-armeabi-code

반응형