안녕하세요.
유니티 프로젝트에 카카오 아이디로 로그인을 구현하기위해, 아래 있는 내용과 샘플앱을 보면서 aar 플러그인을 만들었습니다.
https://developers.kakao.com/docs/android/user-management#로그인
-
GlobalApplication.java 파일입니다. (뒤에 내용은 예제 그대로 가져와서 생략했습니다.)
public class GlobalApplication extends Application { private static volatile GlobalApplication instance = null; private static volatile Activity currentActivity = null; public static GlobalApplication getInstance() { UnityPlayer.UnitySendMessage("KakaoSDK", "KakaoCallback", "GAgetInstance"); if(instance == null) { instance = new GlobalApplication(); } return instance; } // 유니티에서 호출 public void onCreate() { UnityPlayer.UnitySendMessage("KakaoSDK", "KakaoCallback", "GAonCreate"); super.onCreate(); instance = this; KakaoSDK.init(new KakaoSDKAdapter()); // 이 부분에서 에러가 납니다. } ...
-
KakaoSDKAdapter.java 파일입니다. KakaoAdapter를 상속받았습니다.
public class KakaoSDKAdapter extends KakaoAdapter { @Override public ISessionConfig getSessionConfig() { return new ISessionConfig() { @Override public AuthType[] getAuthTypes() { return new AuthType[] {AuthType.KAKAO_LOGIN_ALL}; } @Override public boolean isSecureMode() { return false; } @Override public boolean isUsingWebviewTimer() { return false; } @Override public ApprovalType getApprovalType() { return ApprovalType.INDIVIDUAL; } @Override public boolean isSaveFormData() { return true; } }; } @Override public IApplicationConfig getApplicationConfig() { return new IApplicationConfig() { @Override public Context getApplicationContext() { return GlobalApplication.getGlobalApplicationContext(); } }; } }
-
프로젝트 build.gradle 파일입니다.
... allprojects { repositories { google() jcenter() mavenCentral() maven { url 'http://devrepo.kakao.com:8088/nexus/content/groups/public/'} } } ...
-
app의 build.gradle 파일입니다.
apply plugin: 'com.android.library' android { compileSdkVersion 27 defaultConfig { minSdkVersion 21 targetSdkVersion 27 multiDexEnabled true } dexOptions { javaMaxHeapSize = "4g" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs', exclude: ["unity-classes.jar"]) implementation 'com.android.support:appcompat-v7:27.1.1' implementation 'com.android.support.constraint:constraint-layout:1.1.1' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' // kakao login implementation group: project.KAKAO_SDK_GROUP, name: 'usermgmt', version: project.KAKAO_SDK_VERSION implementation 'com.android.support:multidex:1.0.0' compileOnly files('libs/unity-classes.jar') }
이렇게 하여 생성한 aar 플러그인을 유니티에서 임포트 후에, 유니티에서 안드로이드 빌드까지 문제가 없습니다.
생성된 apk에서 로그인 버튼을 누르면 GlobalApplication.java에 있는 KakaoSDK.init(new KakaoSDKAdapter()); 를 호출하는데 다음과 같은 에러 메시지가 뜹니다.
AndroidJavaException: java.lang.NoClassDefFoundError: company.test.kakaosdk.KakaoSDKAdapter
E/Unity (13573): java.lang.NoClassDefFoundError: company.test.kakaosdk.KakaoSDKAdapter
E/Unity (13573): at company.test.kakaosdk.GlobalApplication.onCreate(GlobalApplication.java:60)
E/Unity (13573): at com.unity3d.player.UnityPlayer.nativeRender(Native Method)
....
생성한 java 파일들 위치
External Library들 위치
안드로이드 스튜디오에서 빌드 시에도 아무 문제가 없는데, 왜 앱에서 클래스를 불러올 수 없는지 궁금합니다 ㅠㅠ