caTea 블로그

Android 와 NDK SO File시스템 본문

android

Android 와 NDK SO File시스템

ZaRas 2018. 8. 21. 11:22
반응형

먼저 이번에 문제 된 상황을 설명하자면


여러 업체의 라이브러리를 붙이다 보면 SO 파일을 붙이는경우가 있다.


만약 디렉토리 구조가 


jniLibs

armeabi

A.so

B.so

armeabi-v7a

B.so

x86




위와 같이 외부 업체 SO 파일들이 위치해 있다고 가정해보자


안드로이드 디바이스의 아키텍쳐가 armeabi를 지원한다면 


armeabi의 디렉토리의 so파일을 로드 할 것이다.


하지만 안드로이드 디바이스의 아키텍쳐가 armeabi-v7a 라면?


시스템은 armeabi-v7a 를 찾아가 로드할 것이다 


하지만 위와 같은 상황이라면 A.so파일이 없지않는가?


그러면 에러가 발생하여 앱이 죽을것이다.


왜냐하면 안드로이드 시스템은 디바이스의 아키텍쳐의 최적화 된 아키텍쳐 파일을 찾아가게 되어있다.




만약 


jniLibs

armeabi

A.so

B.so

x86




armeabi-v7a 디렉토리를 삭제하고 빌드하여 실행하면 아무 문제가 없을 것이다.


SO 파일 로드 시 최적화 된 아키텍쳐가 없을 시 하위 아키텍쳐를 찾아서 로드하기 때문이다.


물론 속도 차이는 있을 수 있지만 동작은 될 것이다.



결론



1. 안드로이드 개발 시 SO파일을 붙여 개발 할 경우 원칙 상 모든 아키텍쳐를 받는게 맞다.



jniLibs

arm64-v8a

A.so

B.so

armeabi

A.so

B.so

armeabi-v7a

A.so

B.so

x86



2. 만약 타 업체에서 armeabi 타겟만 주었을 시 armeabi를 제외한 디렉토리를 지우면 동작은 할 것이다.

(타업체들도 armeabi 타겟 아키텍쳐 so파일을 주었다는 가정하에)

728x90