기본 콘텐츠로 건너뛰기

AndroidNote - Android Studio에서 라이브러리 사용과 에러 : 방법 1



다음 지도 API을 android studio에서 외부 library로 사용하려 했지만 실행할 때 오류가 발생했다.

라이브러리 파일 추가

Android Daum Map 라이브러리는 libDaumMapAndroid.jar 와 아키텍쳐별로libMapEngineApi.so 두개의 바이너리로 구성되어 있습니다.
주어진 압축파일 libs 에 있는 파일들을 해당 프로젝트 /libs/ 로 모두 복사 해야 합니다.

AndroidManifest.xml 에 Permission 추가

<uses-permission android:name="android.permission.INTERNET">
</uses-permission>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION">
</uses-permission>
오류 내용
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427): Can`t load DaumMapEngineApi.so file
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427): java.lang.UnsatisfiedLinkError: Couldn't load DaumMapEngineApi from loader dalvik.system.PathClassLoader[dexPath=/data/app/daum.net.testdaummap-5.apk,libraryPath=/data/app-lib/daum.net.testdaummap-5]: findLibrary returned null
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at java.lang.Runtime.loadLibrary(Runtime.java:358)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at java.lang.System.loadLibrary(System.java:526)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at net.daum.mf.map.n.api.NativeMapLibraryLoader.loadLibrary(NativeMapLibraryLoader.java:33)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at net.daum.mf.map.n.api.NativeThread.<clinit>(NativeThread.java:6)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at android.opengl.alt.GLSurfaceView.setRenderer(GLSurfaceView.java:306)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at net.daum.android.map.MapView.init(MapView.java:44)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at net.daum.android.map.MapView.<init>(MapView.java:56)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at net.daum.mf.map.api.MapView.<init>(MapView.java:410)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at java.lang.reflect.Constructor.constructNative(Native Method)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at android.view.LayoutInflater.createView(LayoutInflater.java:600)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:702)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:761)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at android.view.LayoutInflater.inflate(LayoutInflater.java:498)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at android.view.LayoutInflater.inflate(LayoutInflater.java:398)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at android.view.LayoutInflater.inflate(LayoutInflater.java:354)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:359)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at android.app.Activity.setContentView(Activity.java:2010)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at net.daum.android.map.openapi.sampleapp.demos.SearchDemoActivity.onCreate(SearchDemoActivity.java:48)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at android.app.Activity.performCreate(Activity.java:5426)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2269)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2363)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at android.app.ActivityThread.access$900(ActivityThread.java:161)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1265)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at android.os.Handler.dispatchMessage(Handler.java:102)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at android.os.Looper.loop(Looper.java:157)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at android.app.ActivityThread.main(ActivityThread.java:5356)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at java.lang.reflect.Method.invokeNative(Native Method)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at java.lang.reflect.Method.invoke(Method.java:515)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at dalvik.system.NativeStart.main(Native Method)


01-16 10:42:01.678: E/AndroidRuntime(3427): FATAL EXCEPTION: main
01-16 10:42:01.678: E/AndroidRuntime(3427): Process: daum.net.testdaummap, PID: 3427
01-16 10:42:01.678: E/AndroidRuntime(3427): java.lang.RuntimeException: Unable to start activity ComponentInfo{daum.net.testdaummap/net.daum.android.map.openapi.sampleapp.demos.SearchDemoActivity}: android.view.InflateException: Binary XML file line #32: Error inflating class net.daum.mf.map.api.MapView
01-16 10:42:01.678: E/AndroidRuntime(3427):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2305)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2363)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at android.app.ActivityThread.access$900(ActivityThread.java:161)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1265)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at android.os.Handler.dispatchMessage(Handler.java:102)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at android.os.Looper.loop(Looper.java:157)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at android.app.ActivityThread.main(ActivityThread.java:5356)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at java.lang.reflect.Method.invokeNative(Native Method)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at java.lang.reflect.Method.invoke(Method.java:515)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at dalvik.system.NativeStart.main(Native Method)
01-16 10:42:01.678: E/AndroidRuntime(3427): Caused by: android.view.InflateException: Binary XML file line #32: Error inflating class net.daum.mf.map.api.MapView
01-16 10:42:01.678: E/AndroidRuntime(3427):  at android.view.LayoutInflater.createView(LayoutInflater.java:626)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:702)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:761)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at android.view.LayoutInflater.inflate(LayoutInflater.java:498)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at android.view.LayoutInflater.inflate(LayoutInflater.java:398)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at android.view.LayoutInflater.inflate(LayoutInflater.java:354)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:359)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at android.app.Activity.setContentView(Activity.java:2010)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at net.daum.android.map.openapi.sampleapp.demos.SearchDemoActivity.onCreate(SearchDemoActivity.java:48)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at android.app.Activity.performCreate(Activity.java:5426)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2269)
01-16 10:42:01.678: E/AndroidRuntime(3427):  ... 11 more
01-16 10:42:01.678: E/AndroidRuntime(3427): Caused by: java.lang.reflect.InvocationTargetException
01-16 10:42:01.678: E/AndroidRuntime(3427):  at java.lang.reflect.Constructor.constructNative(Native Method)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at android.view.LayoutInflater.createView(LayoutInflater.java:600)
01-16 10:42:01.678: E/AndroidRuntime(3427):  ... 22 more
01-16 10:42:01.678: E/AndroidRuntime(3427): Caused by: java.lang.UnsatisfiedLinkError
01-16 10:42:01.678: E/AndroidRuntime(3427):  at net.daum.mf.map.n.api.NativeMapLibraryLoader.loadLibrary(NativeMapLibraryLoader.java:42)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at net.daum.mf.map.n.api.NativeThread.<clinit>(NativeThread.java:6)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at android.opengl.alt.GLSurfaceView.setRenderer(GLSurfaceView.java:306)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at net.daum.android.map.MapView.init(MapView.java:44)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at net.daum.android.map.MapView.<init>(MapView.java:56)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at net.daum.mf.map.api.MapView.<init>(MapView.java:410)
01-16 10:42:01.678: E/AndroidRuntime(3427):  ... 25 more


그래서 구글을 6-7시간을 해멘 끝에 답을 찾았다.(OTL)

최고의 도움을 받은 링크(영어 주의)

    

일단 이런 식으로 /libs/에 다 넣어져 있는데 이 부분을 *.so 파일은 /libs/가 아니라 /lib/라는 폴더를 생성한 후 이동 시켜야 한다. 그러면 오른쪽의 화면과 같이 되는데 이 부분에서 꼭! /lib/armeabi/libDaumMapEngineApi.so 파일이 포함되게 .zip 파일로 만든 후 확장자를 .jar로 변경하고 /libs/ 폴더에 넣어 준다.

그 후에 jar 파일을 선택 후 오른쪽 클릭을 하게 되면 "Add As Library..."라고 있는데 이 부분을 클릭 해준다.


gradle 부분은 이렇게 작성하도록 한다.

그러면 제대로 library가 추가가 되었다.

정리하자면 자동을 .so 파일을 include를 안 해줘서 강제로 jar 파일로 만들어 포함시키는 것이다.

다른 사람은 이런 고통을 안 받기를 고대한다...ㅠㅠ

댓글

  1. 저 고통받는 중입니다..
    이걸로도 안되요..ㅠㅠ 살려주세요...ㅠㅠ

    답글삭제

댓글 쓰기

이 블로그의 인기 게시물

2024년 트레일러닝/마라톤 대회 연간 일정 정리

  업데이트 일자  : 2024.04.11.( 목 ) 2024 년 참여 예정인 트레일러닝 대회들을 고려 해보기 위해 글을 작성합니다. 매년 로드레이스(마라톤) 대회와 트레일러닝 대회를 같이 나가고 있는데 올해엔 뭔가 많이 하게 되네요 ㅎㅎ 트레일러닝도 작년대비 많이 생긴 것 같습니다. 개인적으로 한국의 UTMB를 꿈꾸는 장수 트레일과 태백 어셈블 대회들이 기대가 많이 되네요. 올해엔 부디 서울100K, UTNP 등 대회들의 CP(CheckPoint) 운영이 잘 되었으면 좋겠네요. 1. 트레일러닝(Trailrunning) 대회 리스트 일자 대회명 종목 장소 링크 참가여부 3월 22일 ~ 3월 23일 백야드 트레일러닝 100 Mile / 50 Mile / 30 Mile 서울시 강서구 https://cafe.naver.com/che3trailrunning/ 4월 5일 ~ 7일 제주국제트레일러닝대회 10k, 36k, 100k 제주도 https://www.jejutrail.com/ 100K 참가 4 월 6 일 ~ 7 일 장수트레일레이스 20k, 38k, 70k

서울울트라랠리 코스도 및 맵

 2024년 4월 13일 열리는 서울울트라랠리 코스도 및 GPX 파일 공유합니다. 대회 정보 #삼각산소울음소리 : 네이버 블로그 (naver.com)   코스 진행 하면서 눈여겨 두어야 할 곳 ​   #서울울트라랠리 : 네이버 블로그 (naver.com)    동영상 31Km 22Km 서울시청앞 광장 출발모습니다,   1. 43KM 코스도 GPX 다운로드 :  구글 드라이브 #서울울트라랠리 : 네이버 블로그 (naver.com)    동영상43Km 선수들​​ 2. 31KM 코스도 GPX 다운로드 :  구글 드라이브 3. 22KM 코스도 GPX 다운로드 :  구글 드라이브 코스영상 4. 13KM 코스도 GPX 다운로드 :  구글 드라이브 모두의 무사 완주를 기원합니다.