본문 바로가기
Project/안드로이드 프로젝트(ShareHouse)

Android Studio, JAVA] 다음카카오 지도 API 구현하기

by 김마리님 2020. 8. 5.

쉐어하우스 프로젝트이다보니, 막히던 부분 중 하나는 다음카카오 지도 API이다.

이게 참.. ㅋㅋ. 구현하기 위해 참고하는 개발자 페이지가 너무나도 불친절하다..

필자도 참... 여러가지 오류를 경험했다.

https://apis.map.kakao.com/

함정카드는, 이 가이드에 해시 키를 요구하면서 해시 키를 만드는ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ방법이 없다......

어디서 찾냐면,

https://developers.kakao.com/docs/latest/ko/getting-started/sdk-android-v1#key-hash

 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

여기서 찾아야 한다 (ㅋㅋ)

해시 키를 만드는 법이 두가진데

 

1. openSSL을 다운 받아서 만들기

http://slproweb.com/products/Win32OpenSSL.html

 

Win32/Win64 OpenSSL Installer for Windows - Shining Light Productions

Minimum system requirements: Windows XP or later 32MB RAM 200MHz CPU 30MB hard drive space Recommended system requirements: Windows XP or later 128MB RAM 500MHz CPU 50MB hard drive space April 21, 2020 - All users and applications should be using the OpenS

slproweb.com

(필자는 다음 파일을 다운받았는데, 본인의 수준에 맞는 SSL을 넣으면 된다.)

 

이후에 본인의 안드로이드 디버그 파일이 있는 곳으로 이동한다.

주로, C:\Users\(사용자 이름)\.android 폴더에 위치하고 있다.

(이거)

cmd를 이용해 이 곳으로 이동한 후, 다음과 같은 코드를 입력하면 된다.

keytool -exportcert -alias androiddebugkey -keystore C:\Users\(유저명)\.android\debug.keystore -storepass android -keypass android | C:\OpenSSL-Win64\bin\openssl sha1 -binary | C:\OpenSSL-Win64\bin\openssl base64

주의할 점 

1) 만일 디버그 키스토어가 다른 곳에 위치할 경우 -keystore 뒤의 경로를 수정해야함.

2) openSSL 경로가 다르면 그 경로도 수정해야함.. 

 

사실 이거보다 더 쉬운법은 디버그 코드를 돌려서 수정하면 되는데,

 

2. 자바 코드로 디버그 키 받기

private void getHashKey(){
    PackageInfo packageInfo = null;
    try {
        packageInfo = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES);
    } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
    }
    if (packageInfo == null)
        Log.e("KeyHash", "KeyHash:null");

    for (Signature signature : packageInfo.signatures) {
        try {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            Log.d("KeyHash", Base64.encodeToString(md.digest(), Base64.DEFAULT));
        } catch (NoSuchAlgorithmException e) {
            Log.d("KeyHash", "해시 키 오류 : " + signature, e);
        }
    }
}

키를 발급 받고 해시 키를 플랫폼에 등록하면 된다.

 

 

근데 이게 참.. ㅋㅋ 시키는데로 하면 여러가지 오류를 맛볼 수 있는데,

1. Can't load 오류

페이지에서 라이브러리를 다운 받으면 파일이 3개, jar 파일 하나를 받을 수 있는데, 파일을 올바르게 위치시켰는지 확인한다.

이 때 jniLibs 폴더는 직접 만들어야 한다.

그런데도 안된다? jar 파일의 의존성 문제일수 있다.

 

file-Project Structure 로 들어간다.

Dependencies로 들어가, 저 작은 + 상자를 눌러보자.

 

눌러서 jar Dependencies를 누르고, 내가 가져온 외부 jar 파일에 의존성을 걸어주면 된다.

 

그런데도 못찾는다면? import를 의심해보자.

import net.daum.mf.map.api.MapView;

맵 뷰가 다음과 같이 임포트 되어 있어야 한다.

 

그리고 가상기기에서는 라이브러리를 못 찾을 확률이 매우매우 높으니, 그냥 일반 안드로이드 기기로 돌리는게 더.. 마음이 편함 ㅎㅎ

 

 

2. 화면이 검은색으로 뜨는데요!! 

Manifest 문제일 가능성이 있다.

1) 권한 부여

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.mary.sharehouseproject">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

    <application
        android:allowBackup="true"

..하략

다음처럼 세 개의 퍼미션을 제대로 걸었는가,

 

2) meta-data의 위치

.. 중략 
</intent-filter>
        </activity>

        <meta-data
            android:name="com.kakao.sdk.AppKey"
            android:value="발급받은 앱 키"/>
    </application>

</manifest>

다음과 같은 위치에 메타 데이터가 위치해야한다. 

(이게 진짜 다음카카오 홈페이지에 안나와있어서 빡도는 부분임)

 

그런데도 되지 않는다면 

https://developer.android.com/studio/build/configure-apk-splits?hl=ko

 

다중 APK 빌드  |  Android 개발자  |  Android Developers

다중 APK를 위한 앱을 빌드하고 구성하는 방법을 알아보세요.

developer.android.com

다음 코드를 통해 다중 apk 설정을 진행한다.

 splits {
            abi {
                enable true
                reset()
                include 'x86', 'armeabi-v7a', 'x86_64'
                universalApk true
            }

        }

 

그럼 지도가 뜰 것이다 따란~

 

반응형