본문 바로가기
Programming/Android

Can`t load DaumMapEngineApi.so file

by 유주원 2018. 10. 4.

근 5년여 가량 개인 앱 서비스를 운영하고 있었는데, 갑자기 어제 구글플레이개발자콘솔 화면에 아래와 같이 에러 횟수가 확 늘어나는 것을 확인했다.



게다가 어떤 분이 지도보기를 하면 앱이 죽는다고 남겨 주신 리뷰가 해당 버그를 추적하는데 큰 힘이 되었다.


우선 버그를 찾기가 엄청 힘들었다. 일단 내 폰, 와이프 폰에서는 정상 동작 한다!!


사용자 실수인가??? 이런 의심도 찰나.. 우연찮게 빌린 처남 폰에서 지도보기를 하니 앱이 죽는다. -_-;;;


아... 최신 폰에서만 앱이 죽나 보다...


처남에게 양해를 구하고 디버깅 시작!!


Can`t load DaumMapEngineApi.so file 


위의 에러 메시지가 발생하며 MapView가 실행되지 않는 것을 확인할 수 있었다.


'아.. 그래 지도 lib 업데이트 안한지 꽤 됐어.. 이번 기회에 업데이트 하자..'


카카오 지도 api 메뉴얼 페이지로 들어가서 (http://apis.map.daum.net/android/guide/) sdk를 다운 받고 메뉴얼에 쓰여진 대로 작업 한 후 다시 실행하니 똑같은 에러가 계속 발생하며 Mapview가 실행되지 않는다. (sdk 버전 v. 1.3.1.0)


'아.................. 왜 그러냐  대체!!!'


짜증이 점점 밀려오고.... 네이버 지도 api도 한 번 검색해보고, 구글 지도 api도 한 번 검색해 보며 지도 api를 바꿀까 말까를 고민하던 찰나 아래의 사이트 발견!!!


https://m.blog.naver.com/PostView.nhn?blogId=mingjn&logNo=221014259167&proxyReferer=&proxyReferer=https%3A%2F%2Fwww.google.co.kr%2F



결론은 카카오 지도 api 메뉴얼에 써 있는 설명대로 하면 동작이 안된다는 것이다. so 파일에 대한 경로 지정을 잘못 해줘서 위의 에러가 발생한다고 쓰여져 있다. 


메뉴얼에는 libs 밑에 하위 폴더로 armeabi와 armeabi-v7a 폴더가 있고 여기에 각각의 플랫폼에 해당하는 so 파일이 있는데, 이렇게 위치 시키면 so 파일을 못찾는다.



위의 사진에서와 같이 src<main 밑에 jniLibs라는 폴더를 새로 생성하고 그 안에 armeabi와 armeabi-v7a를 복사해서 집어 넣자.


이렇게 바꿔주고 다시 실행시키면 동작이 잘 되는 것을 확인할 수가 있다.


또 위의 링크에서는 gradle에 split 구문을 추가하라고 나와 있는데, 내가 했을 때는 따로 splits 하지 않고 그냥 통합으로 apk 만드는게 출시할때도 고민 없어보여서 해당 구문은 넣지 않았다.


또한 daum 지도 같은 경우에는 x86과 x86_64에 해당하는 so 파일은 존재하지 않아서 의미가 없어 보였다.



android {

...

splits {

abi {

enable true

reset()

include 'x86', 'x86_64', 'armeabi-v7a', 'armeabi'

universalApk false

}

}

}


아... 개천절 다 날렸다.....

그나저나 카카오 메뉴얼 수정 안하냐..... (-0-)