91 마켓 플랫폼 SDK와 바이두 Duoku SDK 통합시 충돌사항

The method dkLogin(Activity, DkProCallbackListener.OnLoginProcessListener) in the type DkPlatform is not applicable for the arguments (Activity, new NdMiscCallbackListener.OnLoginProcessListener(){}) MainActivity.java /WWFoeverGameNoll91DK/src/com/wwfoevergamenoll91dk line 545 Java Problem
The method onLoginProcess(int) of type new NdMiscCallbackListener.OnLoginProcessListener(){} must override or implement a supertype method MainActivity.java /WWFoeverGameNoll91DK/src/com/wwfoevergamenoll91dk line 548 Java Problem
The type new NdMiscCallbackListener.OnLoginProcessListener(){} must implement the inherited abstract method NdMiscCallbackListener.OnLoginProcessListener.finishLoginProcess(int) MainActivity.java /WWFoeverGameNoll91DK/src/com/wwfoevergamenoll91dk line 545 Java Problem

 GameNoll91 마켓, 그리고 바이두 Duoku 3개를 하나의 유니티3D 안드로이드 플러그인으로 통합하던중 에러가 발생했었습니다. 현재는 여기다가 UC Game 총 4개를 하나로 통합을 한 상태이긴합니다. 보통은 마켓별로 빌드를 따로 하지 않을까 하는데 저희 팀은 통합해서 하나의 플러그인으로 가자고 일정이 정해졌기에 이런 이슈가 있었습니다.

import com.nd.commplatform.NdMiscCallbackListener.OnLoginProcessListener;
//import com.duoku.platform.DkProCallbackListener.OnLoginProcessListener;
 위 91과 바이두 sdk import부분을 보면 비슷한다못해 최종 클래스 이름이 똑같다는 걸 볼 수 있습니다. 91과 바이두가 충돌이 발생하는거죠. 꼭 유니티3D 안드로이드 플러그인이 아니라 일반 이클립스 안드로이드 프로젝트에서 통합을 해도 같은 이슈가 있을 듯 합니다.

//import com.nd.commplatform.NdMiscCallbackListener.OnLoginProcessListener;
import com.duoku.platform.DkProCallbackListener.OnLoginProcessListener;
 이런식으로 import를 바꿔줘봐야

The method finishLoginProcess(int) of type new DkProCallbackListener.OnLoginProcessListener(){} must override or implement a supertype method MainActivity.java /WWFoeverGameNoll91DK/src/com/wwfoevergamenoll91dk line 203 Java Problem
The type new DkProCallbackListener.OnLoginProcessListener(){} must implement the inherited abstract method DkProCallbackListener.OnLoginProcessListener.onLoginProcess(int) MainActivity.java /WWFoeverGameNoll91DK/src/com/wwfoevergamenoll91dk line 201 Java Problem
The method ndLogin(Context, NdMiscCallbackListener.OnLoginProcessListener) in the type NdCommplatform is not applicable for the arguments (Activity, new DkProCallbackListener.OnLoginProcessListener(){}) MainActivity.java /WWFoeverGameNoll91DK/src/com/wwfoevergamenoll91dk line 201 Java Problem

 이런 다른 에러만 날뿐입니다.

The import com.nd.commplatform.NdMiscCallbackListener.OnLoginProcessListener collides with another import statement MainActivity.java /WWFoeverGameNoll91DK/src/com/wwfoevergamenoll91dk line 25 Java Problem

 둘다 임포트하면 위와 같은 에러가 추가되구요.

 눈치채셨겠지만 위 스샷과 같이 다른 소스파일에 분리해서 구현해주고 호출해 사용하면 됩니다. 샘플이다보니 MainActivity.java라는 곳에 몽땅 넣어서 구현해서 생긴 문제였던거죠. DkDuokuLoginListener.java라고 바이두 Duoku SDK중 Login관련 기능만 따로 뺀 싱글턴 클래스를 만들었습니다.

 private void DuokuLoginRequest() {
  runOnUiThread(new Runnable() {

   @Override
   public void run() {
    // TODO Auto-generated method stub
    DkDuokuLoginListener.getInstance().DuokuLogin();
    /*
    // 로그인 요청과 로그인 리스너 등록
    DkPlatform.getInstance().dkLogin(UnityPlayer.currentActivity, new OnLoginProcessListener() {

     @Override
     public void onLoginProcess(int arg0) {
      // TODO Auto-generated method stub
      switch(arg0) {
       // 로그인 성공
      case DkErrorCode.DK_LOGIN_SUCCESS:
       Log.d(LOG_TAG, "DK_LOGIN_SUCCESS");
       //DkBaseUserInfo baseInfo = DkPlatform.getInstance().dkGetMyBaseInfo(UnityPlayer.currentActivity);
       //Log.d(LOG_TAG, "UID == " + baseInfo.getUid() + ", SESSIONID == " + baseInfo.getSessionId());
       break;
       // 네트워크 불량 
      case DkErrorCode.DK_LOGIN_FAILED_BAD_NET:
       Log.d(LOG_TAG, "DK_LOGIN_FAILED_BAD_NET");
       break;
       // 타임 아웃
      case DkErrorCode.DK_LOGIN_FAILED_NET_TIME_OUT:
       Log.d(LOG_TAG, "DK_LOGIN_FAILED_NET_TIME_OUT");
       break;
       // 데이터 에러
      case DkErrorCode.DK_LOGIN_FAILED_DATA_ERROR:
       Log.d(LOG_TAG, "DK_LOGIN_FAILED_DATA_ERROR");
       break;
       // 서버 에러
      case DkErrorCode.DK_LOGIN_FAILED_SERVER_FAIL:
       Log.d(LOG_TAG, "DK_LOGIN_FAILED_SERVER_FAIL");
       break;
       // 계정 id 또는 패스워드 에러
      case DkErrorCode.DK_LOGIN_FAILED_USERNAME_OR_PWD_ERROR:
       Log.d(LOG_TAG, "DK_LOGIN_FAILED_USERNAME_OR_PWD_ERROR");
       break;
      default:
       Log.d(LOG_TAG, "onLoginProcess Error" + arg0);
       break;
      }
      UnityPlayer.UnitySendMessage("GameNoll91DKManager", "DuokuLoginResult_J", Integer.toString(arg0));
     }
    });
    */
   }
  });
 }
 주석은 기존에 충돌이 발생하는 부분이고 그 위에 DkDuokuLoginListener를 사용하는 것처럼 해주면 되겠죠. 꼭 싱글턴이 아니더라도 Handler와 Message 같은걸 사용해도 되겠네요. 실제로도 프로젝트에 정식으로 적용한 플러그인은 그런식으로 처리를 했습니다.

댓글

이 블로그의 인기 게시물

'xxx.exe' 프로그램을 시작할 수 없습니다. 지정된 파일을 찾을 수 없습니다.

goorm IDE에서 node.js 프로젝트로 Hello World Simple Server 만들어 띄워보기

애드센스 수익을 웨스턴 유니온으로 수표대신 현금으로 지급 받아보자.