ERROR/MapActivity(8037): Couldn't get connection factory client

구글맵을 띄우려고 했는데 단말기에서 테스트를 해봤더니 에러가뜬다...



구글맵을 띄우려면 API KEY가 있어야합니다

에뮬상에서는 디버그용키만 있어도 사용이 가능하지만 실제 단말기에서는 릴리즈용키가 없다면 바둑판모양 배경만 보입니다.

하루종일 찾아봤지만 릴리즈용키에대한 정보는 그리 많은것 같지않아 정리해둬야겠다는 생각이..

릴리즈용키로 API KEY를 얻게되면 APK가 서명되지 않았다면 맵이 정상적으로 작동하지 않아요.


일단, 릴리즈용키를 만들려면 서명된 keystore가 있어야하구요.

keystore 생성 참고
http://www.androidpub.com/?mid=android_dev_info&sort_index=voted_count&order_type=desc&document_srl=56913



jdk\bin 폴더안에 keytool이 있는데, 이를 편하게 사용하기 위해 환경변수 설정이 안되어있다면

bin폴더를 환경변수에 추가시켜줍니다.





환경변수 설정이 끝났으면 윈도우키 + R을 누르고 cmd를 입력하여 명령프롬프트창을 열고

서명이 완료된 keystore가 있는곳으로 이동.

keytool -list -v -keystore androidkeystore 라고 입력을하고 keystore에 설정했던 비밀번호를 입력.



keystore를 만들때 입력했던 정보가 뜨는데, 이중에서 MD5라고 쓰여있는 FE:5D:...........82:8E 모두 복사.


 

위 페이지로 이동해 복사한 값을 빈칸에 적어주고 Generate API Key 클릭!

빨간색 사각형안에 있는 Key값을 잘 저장해 놓으면 됩니다.



처음에 이 키값을 넣고 맵으 띄웠는데 바둑판 모양만 나와서 왜그런가 했는데..

크롬으로 돌려보니 서명이 된 응용프로그램에서 사용 할 수 있다고 쓰여있군요...


키값을 넣어주고 APK에 서명을 해준뒤 실행해 보았더니 잘되네요!



Manifest


    

    
        
            
                
                
            
        
	
    
    
	

퍼미션과 라이브러리 추가.
 

 

main.xml


	

위에서 얻어온 Key 값을 대입해 준다.
 

 

MainActivity.java
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;

import android.os.Bundle;

public class MyGps extends MapActivity {
    /** Called when the activity is first created. */

	public static MapView mMapView;
	public static MapController mMapController;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

		mMapView = (MapView)findViewById(R.id.mapView);
		mMapController = mMapView.getController();
		mMapController.setZoom(18);						// 기본줌 18
		mMapView.setBuiltInZoomControls(true);			// 확대 축소 기능

	//	mMapView.setSatellite(true);					// 위성모드
		mMapView.setStreetView(true);					// 지도모드
    }

	@Override
	protected boolean isRouteDisplayed() {
		// TODO Auto-generated method stub
		return false;
	}
}
지도 출력시 줌을 18로 설정.
setZoom(); 1 ~ 21 까지 사용 가능. 위성지도 사용시 한국에서는 보안상 최대 16까지 사용가능. (15였나?)



  1. 김보라 2011.06.22 12:35

    api키를 얻는데 자꾸 위의화면처럼 ??이렇게 나옵니다.
    서명된 apk라는 말이 무슨 뜻인가요?
    어떻게 해야 밑의 화면처럼 ?가 안뜨고 정상적인 화면이 나올수 있게 할 수 있는지 자세히좀 알려주세요 ㅜ

    저상태에서 api키 입력하고 실행하면 님처럼 바둑판 모양만 나옵니다.

    • berabue 2011.06.22 13:00 신고

      제 경우에는 익스플로러로 봤을땐 글들이 물음표로 보이는 현상이 있어 '구글 크롬' 브라우저로 보니 제대로 된 글씨로 보이더군요.

      빨간 사각형 안에 있는 사용자 key값을 main.xml파일 API키 값을 넣는곳에 넣어주시면 되구요.

      맨 윗부분에 'keystore 생성 참고' 링크 따라가셔서 APK 파일을 keystore로 서명하셔서 폰으로 넣으시면 정상 작동합니다.

  2. 2011.06.22 13:28

    비밀댓글입니다

  3. berabue 2011.06.22 13:56 신고

    네 keystore에 따라서 값이다른 키값을 배정받게됩니다.
    혹시 폰으로 실행시키신다면 디버그용 키값으로는 안되니 참고하시구요
    Apk 서명방법을 물어보신거라면 위 링크에도 있듯이 매니페스트 파일을 통해서 간단하게 서명하실수 있습니다.
    명령어는 사용을 안해봐서 잘 모르겠네요ㅜ ㅜ

  4. 2011.06.22 18:51

    비밀댓글입니다

  5. 2011.06.22 19:13

    비밀댓글입니다

    • berabue 2011.06.22 23:54 신고

      아아.. 제가 질문을 잘못 이해했군요...

      위에 I: 경로는 제가 keystore를 외장메모리 I영역에 저장해 두어서 입니다.. keystore가 있는 폴더로 'cd 드라이브\폴더경로' 이동을 하시고 명령어를 사용하시면 되요 ~

      AVD만드실때 버전을 구글API로 선택하셨는지요..?

  6. 김보라 2011.06.23 01:40

    네.. 구글 에이피아이로 선택했습니다.
    그런데 릴리즈용 맵api키는 기기에서 사용할때 쓰는거 같네요...맞나요?
    저는 그냥 에뮬레이터로 실행해 보려는데 왜 디버그용 맵 api가 안맞는 걸까요 ㅜㅜ
    격자 무늬로 나오는거는 api때문인거 맞는거죠?ㅜㅜ
    이거때문에 정말 며칠동안....ㅜㅠ

  7. chucky doll 2011.09.13 23:20

    이것은 매우 흥미로운 것입니다. 내가 찾은 다행. 하지만 공유 주셔서 감사합니다.

+ Recent posts