안드로이드에 카카오맵 SDK 를 내장하여 카카오맵을 띄우고 API를 사용하는 방법을 알아보자.
사실 제일 중요한 것은 초반 셋팅을 하는 것이다.
다만, 카카오맵의 초반 셋팅이 쉽지 않은 편이다.
카카오맵 가이드 공홈 을 가면 카카오맵 SDK 를 앱에 내장하는 방법을 친절(??)하게 알려준다.
다만 이는 Java 기준이며, Android Studio 및 Android SDK 버전이 낮은 것을 타겟하고 있는 것 같다. 따라서 저 가이드를 참고하여 Kotlin 기준으로 변경한다 하여도 카카오맵이 제대로 보이지는 않는다.. 유지보수 좀..;;
나의 경우는 Android Studio 4.1.2, Android SDK 16이상, Kotlin을 기준으로 삽질하며 해결하는 방법을 정리해보았다.
핵심 포인트 3가지
1. AndroidManifest.xml
android:usesCleartextTraffic="true" 가 반드시 필요하다.
추가하지 않을 경우 net.daum.mf.map.n.api.NativeBaseNetConnection: Cleartext HTTP traffic to ot1.maps.daum-img.net not permitted 발생 (Android SDK 23이상 부터는 필수로 필요함)
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.mapstest">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.MapsTest"
android:usesCleartextTraffic="true">
<meta-data android:name="com.kakao.sdk.AppKey" android:value="당신의 API 키 입력"/>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
2. App 수준의 build.gradle
//kakao map 주석 아래 내용을 반드시 포함하자. 2곳 참고
추가하지 않을 경우 java.lang.UnsatisfiedLinkError 오류 발생 (NDK 라이브러리 경로를 제대로 못찾아 발생)
plugins {
id 'com.android.application'
id 'kotlin-android'
}
android {
compileSdkVersion 30
buildToolsVersion "30.0.3"
defaultConfig {
applicationId "com.mapstest"
minSdkVersion 16
targetSdkVersion 30
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
//kakao map
ndk {
abiFilters 'arm64-v8a', 'armeabi', 'armeabi-v7a'
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
}
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation 'androidx.core:core-ktx:1.3.2'
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'com.google.android.material:material:1.2.1'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
//kakao map
compile files('libs/libDaumMapAndroid.jar')
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation files('libs/libDaumMapAndroid.jar')
testImplementation 'junit:junit:4.+'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
}
3. 앱 Hash key는 다음의 코드로 간편하게 사용하자
아래 메서드 호출하면 앱의 해시키 로그로 얻을 수 있고, 얻어진 해시키를 카카오 개발자 페이지에 등록하자
fun getHashKey(){
var packageInfo : PackageInfo = PackageInfo()
try {
packageInfo = packageManager.getPackageInfo(packageName, PackageManager.GET_SIGNATURES)
} catch (e: PackageManager.NameNotFoundException){
e.printStackTrace()
}
for (signature: Signature in packageInfo.signatures){
try{
var md: MessageDigest = MessageDigest.getInstance("SHA")
md.update(signature.toByteArray())
Log.e("KEY_HASH", Base64.encodeToString(md.digest(), Base64.DEFAULT))
} catch(e: NoSuchAlgorithmException){
Log.e("KEY_HASH", "Unable to get MessageDigest. signature = " + signature, e)
}
}
}
'IT > Android' 카테고리의 다른 글
안드로이드 OpenCV 4.5.2 와 2.4.13.1 차이점 (0) | 2021.06.03 |
---|---|
[Android] Gradle 빌드 실패 에러 (Could not find com.android.tools.build:gradle:4.2.0) (0) | 2021.05.20 |
Android Studio 에서 Github로 소스 업로드 하기 (0) | 2021.01.05 |
Android Studio 와 Github 연동하기 (0) | 2021.01.04 |
Odin 오류 대처 방법 (1) | 2020.09.18 |