[Android Studio] Kakao Android SDK를 Android Studio에서 Import 후 사용하기

2017. 6. 22. 18:58Mobile/Xamarin

여기서는 Android Studio를 통해 Kakao Android SDK를 불러와서 구현하는 방법을 소개합니다. 보통 이 정도는 Kakao API 문서를 보고 구현할 수 있어야 하지만..., Kakao API문서만 보고 구현하다보면 수많은 오류와 이슈에 직면하기 때문에 따로 정리하였습니다.

이 글을 작성할 때 개발환경은 다음과 같습니다.

  • Android Studio 2.3.3
  • Minimum SDK : API 16(Android 4.0 IceCreamSandwich)
  • Windows 10 Pro 64비트
  • Compile Sdk Version : API 26: Android 8.0 (O)
  • Build Tools Version : 26.0.0
  • Min Sdk Version : 14
  • Target Sdk Version : 21
  • Kako Android SDK Version : 1.4.0

진행 순서는 다음과 같습니다.

  1. 먼저 https://developers.kakao.com/에서 App을 등록합니다.
  2. Kakao Android Library를 다운로드 후 압축을 풉니다. (https://developers.kakao.com/docs/android)
  3. Android Studio를 실행하고 새 프로젝트를 생성합니다.
    • Platform은 Phone and Tablet 선택
    • Minimum SDK는 API 14 이상
  4. Kakao Android Library를 Import 합니다.
    • File - New - Import Module
    • 다운로드한 Kakao Android Library 경로 입력
    • 자동으로 로드되는 모든 모듈 선택
  5. 프로젝트 루트에 존재하는 build.gradle를 열고 allprojects 부분을 다음과 같이 수정합니다.
    allprojects {
        repositories {
            jcenter()
            mavenCentral()
            maven { url 'http://devrepo.kakao.com:8088/nexus/content/groups/public/' }
        }
    }
    
  6. 프로젝트 루트의 gradle.properties를 열고 다음 라인을 추가합니다.
    KAKAO_SDK_GROUP=com.kakao.sdk
    KAKAO_SDK_VERSION=1.0.51
    
  7. Module의 build.gradle (App폴더에 존재하는 build.gradle)을 열고 다음을 수정합니다.
    (dependencies의 최하단에 KAKAO_SDK 추가)
    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
            exclude group: 'com.android.support', module: 'support-annotations'
        })
        compile 'com.android.support:appcompat-v7:26.+'
        testCompile 'junit:junit:4.12'
        compile group: project.KAKAO_SDK_GROUP, name: 'kakaolink', version: project.KAKAO_SDK_VERSION
    }
    
  8. res/values/strings.xml 파일을 열고 다음 3개의 라인을 추가합니다.
    <?xml version="1.0" encoding="utf-8"?>  
    <resources>  
        <string name="app_name">Aar.Kakao</string>
    
        <!-- 하단의 '앱키'는 App등록 시 발급받은 '네이티브 앱 키'로 대체 -->
        <string name="kakao_app_key">앱키</string>
    
        <!-- 하단의 '앱키'는 App등록 시 발급받은 '네이티브 앱 키'로 대체 (kakao + 앱키 형태로 작성) -->
        <string name="kakao_scheme">kakao앱키</string>
        <string name="kakaolink_host">kakaolink</string>
    </resources>
    
  9. AndroidManifest.xml을 열고 다음과 같이 2개 라인을 추가합니다.
    • <intent-filter> 태그 하위에 다음 라인 추가
      <data android:scheme="@string/kakao_scheme" android:host="@string/kakaolink_host" />
    • application 태그가 끝나기 전에 다음 라인 추가
      <meta-data android:name="com.kakao.sdk.AppKey" android:value="@string/kakao_app_key"/>
      
    • 완성된 전체 AndroidMenifest.xml은 다음과 같습니다.
      <?xml version="1.0" encoding="utf-8"?>
      <manifest package="com.droidappkakao"
                xmlns:android="http://schemas.android.com/apk/res/android">
      
          <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/AppTheme">
              <activity android:name=".MainActivity">
                  <-- Spalsh Activity없이 Main Activity하나로 구성할 경우 -->
                  <intent-filter>
                      <action android:name="android.intent.action.MAIN"/>
                      <category android:name="android.intent.category.LAUNCHER"/>
                  </intent-filter>
                  <intent-filter>
                      <!-- 주의: Kakako 설정은 항상 LAUNCHER가 포함된 Intent-filter와 분리해 주세요. 
                               그렇지 않으면 앱 아이콘이 사라지는 현상이 발생합니다. -->
                      <action android:name="android.intent.action.VIEW"/>
                      <category android:name="android.intent.category.DEFAULT"/>
                      <category android:name="android.intent.category.BROWSABLE"/>
                      <data android:scheme="@string/kakao_scheme" android:host="@string/kakaolink_host" />
                  </intent-filter>
              </activity>
      
              <meta-data android:name="com.kakao.sdk.AppKey" android:value="@string/kakao_app_key"/>
          </application>
      </manifest>

      Splash Activity를 따로 구성할 경우 아래와 같은 구조로 작성하실 수 있습니다. LAUNCHER와 Kakao설정은 다른 Intent-filter로 분리해야 합니다. 그렇지 않으면 앱아이콘이 사라지는 문제가 발생합니다.

      <?xml version="1.0" encoding="utf-8"?>
      <manifest package="com.droidappkakao"
                xmlns:android="http://schemas.android.com/apk/res/android">
      
          <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/AppTheme">
      
              <-- Spalsh Activity를 사용할 경우 XML구조 -->
              <activity android:name=".SplashActivity">
                  <intent-filter>
                      <action android:name="android.intent.action.MAIN"/>
                      <category android:name="android.intent.category.LAUNCHER"/>
                  </intent-filter>
              </activity>
      
              <activity android:name=".MainActivity">
                  <!-- 주의: Kakako 설정은 항상 LAUNCHER가 포함된 Intent-filter와 분리해 주세요. 
                           그렇지 않으면 앱 아이콘이 사라지는 현상이 발생합니다. -->
                  <intent-filter>
                      <action android:name="android.intent.action.VIEW"/>
                      <category android:name="android.intent.category.DEFAULT"/>
                      <category android:name="android.intent.category.BROWSABLE"/>
                      <data android:scheme="@string/kakao_scheme" android:host="@string/kakaolink_host" />
                  </intent-filter>
              </activity>
      
              <meta-data android:name="com.kakao.sdk.AppKey" android:value="@string/kakao_app_key"/>
          </application>
      </manifest>
      
  10. 이제 Activity에서 Kakao SDK를 호출하시면 됩니다. 여기서는 카카오링크를 실행하는 버튼을 추가해보도록 하겠습니다.
    1. res/layout/activity_main.xml을 열고 다음과 같이 버튼을 추가합니다.

      <?xml version="1.0" encoding="utf-8"?>
      <android.support.constraint.ConstraintLayout
      	xmlns:android="http://schemas.android.com/apk/res/android"
      	xmlns:app="http://schemas.android.com/apk/res-auto"
      	xmlns:tools="http://schemas.android.com/tools"
      	android:layout_width="match_parent"
      	android:layout_height="match_parent"
      	tools:context="com.droidappkakao.MainActivity">
      
      	<Button android:id="@+id/btnKakaoLink"
      		android:text="Run KakaoLink"
      		android:layout_width="wrap_content"
      		android:layout_height="wrap_content"
      		app:layout_constraintBottom_toBottomOf="parent"
      		app:layout_constraintLeft_toLeftOf="parent"
      		app:layout_constraintRight_toRightOf="parent"
      		app:layout_constraintTop_toTopOf="parent"/>
      
      </android.support.constraint.ConstraintLayout>
    2. 이제 MainActivity.java를 열고 Kakao Link API를 사용해봅시다. API에 대한 상세한 내용은 개발가이드를 참고해주세요.
      package com.droidappkakao;
      
      import android.support.v7.app.AppCompatActivity;
      import android.os.Bundle;
      import android.util.Log;
      import android.view.View;
      import android.widget.Button;
      
      import com.kakao.KakaoLink;
      import com.kakao.KakaoParameterException;
      import com.kakao.KakaoTalkLinkMessageBuilder;
      
      public class MainActivity extends AppCompatActivity
      {
      	private KakaoLink kakaoLink;
      	private KakaoTalkLinkMessageBuilder kakaoTalkLinkMessageBuilder;
      
      	@Override
      	protected void onCreate(Bundle savedInstanceState)
      	{
      		super.onCreate(savedInstanceState);
      		setContentView(R.layout.activity_main);
      		try
      		{
      			kakaoLink = KakaoLink.getKakaoLink(this);
      			kakaoTalkLinkMessageBuilder = kakaoLink.createKakaoTalkLinkMessageBuilder();
      		}
      		catch (KakaoParameterException e)
      		{
      			Log.e("error", e.getMessage());
      		}
      
      
      		Button button = (Button) findViewById(R.id.btnKakaoLink);
      		button.setOnClickListener(new View.OnClickListener()
      		{
      			@Override
      			public void onClick(View view)
      			{
      				try
      				{
      					Button btnSender = (Button)view;
      					kakaoTalkLinkMessageBuilder.addText("TEST");
      					kakaoLink.sendMessage(kakaoTalkLinkMessageBuilder.build(), btnSender.getContext());
      				}
      				catch (KakaoParameterException e)
      				{
      					Log.e("error", e.getMessage());
      				}
      			}
      		});
      	}
      }
    3. 위 앱을 실행하신 후 버튼을 클릭하면 카카오톡으로 연결되는 것을 보실 수 있습니다.