[환경] 안드로이드 스튜디오(Android Studio)에서 Gradle로 카카오톡 SDK 사용

Eclipse에서 앱 개발을 하다 최근 Android Studio로 넘어오려고 준비중인데 이런 저런 에러들을 만나고 있습니다. 작은 회사에서 혼자 앱개발을하다보니 사수도 없고 물어볼곳도 마땅치 않아 언제나 맨땅에 헤딩하면서 하나씩 정리해가네요.

기존 Eclipse 프로젝트를 Android Studio에서 불려들여서 사용하는 부분에는 계속 문제가 발생하고 있어서 Android Studio에서 새로운 프로젝트를 생성해서 카카오톡 SDK를 사용하는 것에 대해 간단하게 설명하려고 합니다.

이 내용은 카카오톡 SDK중 카카오링크를 이용한것으로 아래 내용을 연습해보시면 카카오톡 Dev 가이드를 참고해 카카오톡의 다른 SDK 사용에도 무리가 없을거라 생각합니다. 아래 내용만 수정하여 예제 앱이 실행되면 바로 카카오톡이 열리면서 친구 선택 화면이 나오고 친구를 선택하면 그 친구에게 소스에서 지정한 제목,이미지,앱바로열기 링크가 전송됩니다.

  1. 새로운 프로젝트 생성

  2. /build.gradle 에 추가
    allprojects {
    repositories {
    jcenter()
    mavenCentral()
    maven { url ‘http://devrepo.kakao.com:8088/nexus/content/groups/public/’ }
    }
    }

  3. /gradle.properties 에 추가
    KAKAO_SDK_GROUP=com.kakao.sdk
    KAKAO_SDK_VERSION=1.0.40

  4. /app/build.gradle 에 추가(개발하시는 앱이름에 따라 /app 경로가 다를수있습니다.)
    dependencies {
    compile fileTree(dir: ‘libs’, include: [’*.jar’])
    compile group: project.KAKAO_SDK_GROUP, name: ‘kakaolink’, version: project.KAKAO_SDK_VERSION
    }

  5. /app/AndroidManifest.xml 에 추가 ( application 선언부 안쪽 끝에 추가)
    meta-data android:name=“com.kakao.sdk.AppKey” android:value=“xxxxxxxxxxxxxxxxxxxxxxxxx(부여받은 앱키)”

meta-data 앞에 <와 (부여받은 앱키)" 뒤에 />가 붙어야 합니다. 편집기에서 제대로 보여지지가 않네요.

6 . /app/src/…/myapplication/MyActivity.java (실제 앱의 메인 액티비티 소스 파일)

package com.example.chan.myapplication;

import android.app.Activity;
import android.os.Bundle;

import com.kakao.AppActionBuilder;
import com.kakao.AppActionInfoBuilder;
import com.kakao.KakaoLink;
import com.kakao.KakaoParameterException;
import com.kakao.KakaoTalkLinkMessageBuilder;

public class MyActivity extends Activity {

private KakaoLink kakaoLink;
private KakaoTalkLinkMessageBuilder kakaoTalkLinkMessageBuilder;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_my);

    try {
        kakaoLink = KakaoLink.getKakaoLink(getApplicationContext());
        kakaoTalkLinkMessageBuilder = kakaoLink.createKakaoTalkLinkMessageBuilder();
    } catch (Exception e) {
        e.printStackTrace();
    }

    try {
        kakaoTalkLinkMessageBuilder.addText("카톡 링크 제목");
        kakaoTalkLinkMessageBuilder.addImage("http://dn.api1.kage.kakao.co.kr/14/dn/btqaWmFftyx/tBbQPH764Maw2R6IBhXd6K/o.jpg", 300, 200);
        kakaoTalkLinkMessageBuilder.addAppLink("앱으로 바로가기",
                new AppActionBuilder()
                .addActionInfo(AppActionInfoBuilder.createAndroidActionInfoBuilder().setExecuteParam("bo_table=test&wr_id=11").setMarketParam("referrer=kakaotalklink").build())
                .addActionInfo(AppActionInfoBuilder.createiOSActionInfoBuilder(AppActionBuilder.DEVICE_TYPE.PHONE).setExecuteParam("execparamkey1=1111").build()).build()
        );
        kakaoLink.sendMessage(kakaoTalkLinkMessageBuilder.build(), this);
    } catch (KakaoParameterException e) {
        e.printStackTrace();
    }
}

}

2개의 좋아요

com.android.dex.DexException: Multiple dex files define Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoVersionImpl;

에러가 발생하고
dexOptions {
preDexLibraries = false
}

이걸 통해서 통해서 해결하긴 했는데… 라이버리 충돌 문제에 대해서 세팅을 어떻게 해야 하는지 구체적으로 알고 싶습니다.

아마 기존에 작업하던 프로젝트를 안드로이드 스튜디오에 불러오셔서 작업하시다 multiple dex files define 에러를 만나신거 같은데 얼마전에 저두 프로젝트 파일 하나 안드로이드 스튜디오로 마이그레이션하다가 동일한 에러를 만났던걸로 기억합니다.

기존 Eclipse기반 프로젝트에 android v4 라이브러리를 로드해서 사용하고 있는채로 그냥 불러와서 안드로이드 스튜디오의 설정과 중복 컴파일되서 아마 그런 에러가 발생했을거라 생각이 되는데 저는 너무 간단하게 수정해버려서 따로 메모를 안해놨네요.

아마 모듈 셑팅에서 디펜던시 쪽에 V4 라이브러리 설정된거 삭제하시거나 build.gradle 파일에 dependencies {} 안에 compile(‘패키지명’) { exclude module: ‘support-v4’ } 추가하시면 빌드 될거라 생각됩니다.

저는 모듈셑팅에 디펜던시에서 해당 라이브러리 그냥 삭제했던걸로 기억합니다. 따로 라이브러리 추가하지 않아도 maven에서 자동으로 로드해줘서 기존 eclipse 프로젝트에서 v4 라이브러리를 추가 설정된게 중복설정된걸로 인식됬던걸로 기억합니다.

카카오링크에서 사용하는 support-v4가 r19인데
다른 라이브러리에서 필요한 revision은 21일경우

카카오링크에서 빼야할 것 같아 보이는데
어떻게 빼야 하는지 혹시 알려주실수 있을까요?

1개의 좋아요

자답합니다.

compile (group: project.KAKAO_SDK_GROUP, name: ('kakaolink'), version: project.KAKAO_SDK_VERSION  ){
    exclude module: 'support-v4'
}

위와 같이 하니 정상 작동하네요.

1개의 좋아요

이와같이 버젼 충돌 문제로 support-v4 라이브러리를 sdk에서 제거 하였습니다.
1.0.45 버젼 부터는 sample에서만 해당 라이브러리를 참조합니다.