본문 바로가기
IT 실무/모바일 프로그래밍

낮은 API level에서 Google Map v2 API 사용하기

by 지식id 2013. 12. 9.
반응형

개발하고 있는 어플리케이션의 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를 확인해 보자.

반응형

댓글