개발하고 있는 어플리케이션의 Target SDK Version이 최신 버전이고, Minimum SDK Version도 꽤나 높은 버전의 안드로이드라면 API Document에 나와있는 간단한 예제 코드(https://developers.google.com/maps/documentation/android/) 만으로도 충분히 구글 맵을 구동시킬 수 있다. 하지만 구버전의 SDK 환경에서 Map을 구동시키고 싶을 경우 위 예제와 다른 방식으로 해야 하기에 구글링을 충분히 해 봐야 한다.
나도 여러 블로그 글들과 Stack Overflow의 질문/답변 참고 하였으나 사람들마다 환경도 다르고, 제시하는 방법도 달라 혼선이 있었고, 그러다 그대로 따라하기만 하면 되는 잘 정리된 글이 있어 링크 해 둔다.
https://blog-emildesign.rhcloud.com/?p=435
일단 Google Map V2를 사용 하려면 Minimum API level이 최소한 8 이상(Froyo)은 되어야 한다. Google Map V2는 Froyo가 나온 이후에 나온 API이지만 각종 라이브러리를 링크하여 Froyo 이상부터는 사용할 수 있게 해 두었다. 위 글은 Target SDK Version이 8 이상인 어플리케이션을 대상으로 설명 되어 있다.
이 글을 보고도 안된다고 하는 경우가 많았으나.. Logcat의 오류 메세지를 조금만 더 꼼꼼히 읽어 보면 어디서 왜 오류가 났고, 어떻게 수정을 해야 되는지까지 다 나온다. 로그캣은 제일 첫 문장만 읽는 것이 아니라 중간중간 단서를 줄만한 내용이 있는지 전체적으로 꼼꼼히 살펴야 한다.
대표적인 체크리스트 몇 가지만 언급하겠다.
1. Propertise에서 google-play-services_lib 를 링크 한 후, Propertise에 다시 들어가 보면 녹색 V가 빨간색 X로 바뀌어 있는 경우가 있다. 링크가 제대로 수행 되지 않은 것이다. 이는 링크 대상의 경로가 너무 길어 에러가 생긴 것이며, google-play-services_lib 폴더를 좀 더 상위경로로 이동 시킨 후 다시 import하고, 다시 링크 시키면 해결 된다.
예를 들어 기존 경로가
C:\eclipse\adt-bundle-windows-x86_64-20131030\sdk\extras\google\google_play_services\libproject\google-play-services_lib
처럼 긴 경로라면 처음에는 언뜻 링크가 된 듯 보이지만 실제로 링크를 하는 과정에서 오류가 난다. 그래서 google-play-services_lib를 복사해서
D:\안드로이드작업\google-play-services_lib
와 같이 짧은 경로로 복사 해 두고 다시 import, 다시 링크 하면 된다는 것이다. 이 내용은 블로그 글에도 설명 되어 있는 내용이나 다들 소스코드 보기에만 급급해서 많이들 간과하는 부분이다.
2. <meta-data 로 시작하는 xml 태그가 application 태그 안에 들어가 있는가?
이 부분또한 마찬가지이다. 설명은 안 읽고 소스코드만 훑어 보다가 딱 봐서 AndroidManifest.xml 에 들어갈 내용 같아 보이면 넣어 본다. 컴파일 오류가 안나면 이게 제자리라고 생각했지만 또 런타임 에러가 생기면 멘붕인 것이다.
하지만 글 내용을 자세히 읽어 보면 저 태그는 <application 하위에 넣으라고 되어 있다. 메타테그 특성상 다른 위치에 들어가도 오류가 나지 않을 뿐.. <application 에선 필요한 메타테그가 없으니 오류를 출력하고 죽어 버리는 것이다.
3. permission에 pakage name은 수정을 하였는가?
글을 작성한 사람은 당신의 어플리케이션의 패키지 이름이 뭔지 모른다. 그래서 퍼미션 코드를 보여 줄때도
<uses-permission
android:name
=
"your.application.package.permission.MAP ... />
와 같이 적어 놓았다. 하지만 이걸 그대로 복사해서 써버린다면 오류가 안 날래야 안 날 수가 없다. 당신의 어플리케이션의 패키지 이름은 your.application.pakage 가 아닐것이다. 위와 같이 되어 있는 코드의 패키지 네임을 알맞게 수정해 보자.
4. api key는 제대로 받아와서 제대로 수정을 하였는가?
위와 마찬가지다. 예제 코드에선
android:value
=
"Your Google Maps API V2 Key"/>
라고 되어 있는데.. 이 부분도 그냥 둬버리는 경우가 있다. 수정을 해 줘야 한다.
5. 액티비티는 FragmentActivity 를 상속 하도록 되어 있는가?
클래스 아래의 코드만 복사해서 수정 하다 보니 이를 간과하는 경우도 있다.
public class Act1 extends FragmentActivity {
...
와 같이 상속이 정상적으로 되어야 오류가 안난다.
등등.. 위에서 언급한 모든 오류는 내가 한번씩 겪었던 오류들이며, 주변의 다른 사람들도 많이들 겪고 나에게 물어 보았던 부분이다. 하지만 이 모든 오류에 대한 원인과 해답은 Logcat에 있었다. 다들 체크리스트를 따라가면서 확인을 해 보고 그래도 오류가 난다면 Logcat를 확인해 보자.
'IT 실무 > 모바일 프로그래밍' 카테고리의 다른 글
Uncaught Error: Error calling method on NPObject. (0) | 2017.04.09 |
---|---|
하이브리드 앱에서의 세션관리(로그인 상태 유지) (2) | 2017.04.02 |
SimpleAdapter로 listView에 이미지 띄우기 (0) | 2013.11.16 |
[Error] Unable to open sync connection! (0) | 2013.11.16 |
findViewById() 에서 String 사용하기 (0) | 2013.11.15 |
댓글