[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 부분을 다음과 같이 수정합니다.
    1
    2
    3
    4
    5
    6
    7
    allprojects {
        repositories {
            jcenter()
            mavenCentral()
            maven { url 'http://devrepo.kakao.com:8088/nexus/content/groups/public/' }
        }
    }
  6. 프로젝트 루트의 gradle.properties를 열고 다음 라인을 추가합니다.
    1
    2
    KAKAO_SDK_GROUP=com.kakao.sdk
    KAKAO_SDK_VERSION=1.0.51
  7. Module의 build.gradle (App폴더에 존재하는 build.gradle)을 열고 다음을 수정합니다.
    (dependencies의 최하단에 KAKAO_SDK 추가)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    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개의 라인을 추가합니다.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?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> 태그 하위에 다음 라인 추가
      1
      <data android:scheme="@string/kakao_scheme" android:host="@string/kakaolink_host" />
    • application 태그가 끝나기 전에 다음 라인 추가
      1
      <meta-data android:name="com.kakao.sdk.AppKey" android:value="@string/kakao_app_key"/>
    • 완성된 전체 AndroidMenifest.xml은 다음과 같습니다.
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      <?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로 분리해야 합니다. 그렇지 않으면 앱아이콘이 사라지는 문제가 발생합니다.

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      <?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을 열고 다음과 같이 버튼을 추가합니다.

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      <?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에 대한 상세한 내용은 개발가이드를 참고해주세요.
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      49
      50
      51
      52
      53
      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. 위 앱을 실행하신 후 버튼을 클릭하면 카카오톡으로 연결되는 것을 보실 수 있습니다.