안드로이드는 보통 프로세스를 종료하기 위해서 백 버튼을 사용합니다. Apportable으로 안드로이드 포팅시 기본적으로 백 버튼은 아무런 반응도 하지 않습니다. 

아래 링크를 참조해서 구현 할려니 뭔가 제대로 되지 않습니다. 다들 v3 미만의 버전의 가이드 인것 같습니다. 

http://docs.apportable.com/uikit-extensions.html#uiresponder

구글링을 해보니 저와 비슷한 내용들이 많습니다.

https://groups.google.com/forum/#!topic/apportable-discuss/992hX9vEdTw

https://groups.google.com/forum/#!topic/apportable-discuss/V9lMn188jqE


그나마 힌트를 얻은게 ViewController 단에서 구현하라. becomeFirstResponder 메소드를 직접 호출하라. 이 2개입니다. 

그래서 삽질로 appDelegate에서 [rootviewController becomeFirstResponder]; 를 호출하니 안 먹습니다. 


cocos2d v3에서 RootViewController는 CCDirector 입니다. 그래서 init 메소드의 가장 하단에 아래코드를 넣으면 잘 동작합니다. 기본적으로 종료만 되도록 하는 코드를 아래 링크를 참조했습니다.

https://gist.github.com/sdabet/5719684


    //Back button support

#ifdef ANDROID

    [self becomeFirstResponder];

#endif

}


return self;

}


//Back button support

#ifdef ANDROID


- (BOOL) canBecomeFirstResponder

{

  return YES;

}


- (void)buttonUpWithEvent:(UIEvent *)event

{

  CCLOG(@"Button event fired");

  

  switch (event.buttonCode)

  {

    case UIEventButtonCodeBack:

      // Back button is pressed

      

      // Pop current scene

      [[CCDirector sharedDirector] popScene];

      

      // Terminate the app if scene stack is empty

      if([[CCDirector sharedDirector] runningScene] == nil) {

        exit(0);

      }

      break;

    case UIEventButtonCodeMenu:

      // show menu if possible.

      break;

    default:

      break;

  }

}


#endif




저작자 표시 비영리
신고
Posted by KraZYeom

Apportable을 사용해서 cocos2d-iPhone 앱을 안드로이드 앱으로 빌드하는 과정에서 가장 아쉬운게 AdMob 광고였다. 아무리 구글링을 해봐도 제대로된 해답은 없고, Starter Kit에서는 지원이 안되니 BridgeKit을 사용해서 직접 Android Java를 코딩해서 직접 붙이는 수 밖에 없었다. 


Apportable 에서 직접 AdNetworkTests http://docs.apportable.com/sample-apps.html#adnetworktests 광고 관련 셈플 프로젝트가 있는데 문구에는 Indie 버전만 지원한다고 나온다. 그래서 bulid를 해도 AdMob은 지원을 안하니 계속해서 에러가 난다. 


그러다가 공식 문서에서 발견한 한 줄기 빛과 같은 문구. 


Revmob and Admob

Included again in full SDK

모든 SDK에서 다시 Admob을 지원한다는 것이다. 그런데 계속해서 build를 해도 에러가 난다. 


apportable --version을 확인하니 1.1.03 


apportable update를 해도 계속해서 1.1.03 이다. 지우고 설치를 해도 1.1.03 이다. 뭔가 컴맹이 된 기분. 


해결책은 아주 간단하다. http://www.apportable.com/account 에 가서 SDK Version을 release_1.1.06 으로 변경한다. 

1.1.05 이상에서만 starter kit 에서도 Admob을 지원하니. 꼭 1.1.06을 선택하도록 하자. 


그리고 AdNetworkTests 에서 가저온 샘플 코드를 자신에 환경에 맞게 살짝 손만 본다. 기존 코드는 UIKit 기준으로 되어 있어서 cocos2d에 맞게만 변경을 하였다. 


AppDelegate.h

#ifdef ANDROID

#import "GADBannerView.h"

#import "GADInterstitial.h"

#else


#ifdef ANDROID

@interface AppDelegate : CCAppDelegate <GADInterstitialDelegate> {

  GADBannerView *mBannerView;

  GADInterstitial *mInterstitial;

}


@end


#else


AppDelegate.m

// 광고 생성 초기.

- (void)initADBanner {

  CGSize winsize = [[UIScreen mainScreen] bounds].size;


#ifdef ANDROID

  mBannerView = [[GADBannerView alloc] initWithAdSize:kGADAdSizeBanner];

  #ifdef APPORTABLE

  mBannerView.adUnitID = @"APPID";

  #endif // apportable

  mBannerView.rootViewController = self.window.rootViewController;

  CGRect frame = mBannerView.frame;

  mBannerView.frame = CGRectMake(winsize.height/2 - frame.size.width / 2, winsize.width - 50, 320, 50);


  [self.window.rootViewController.view addSubview:mBannerView];

  GADRequest *request = [GADRequest request];

  request.testDevices = [NSArray arrayWithObjects:GAD_SIMULATOR_ID, nil];

  [mBannerView loadRequest:request];

  

  [self loadInterstitial];


#else

  [self initADBanneriAd];

  [self initADBannergAd];

#endif

}



#pragma mark - Private


- (void)loadInterstitial

{

  [GADRequest request];

}


- (void)reloadInterstitial

{

  mInterstitial = nil;

  [self loadInterstitial];

}


#pragma mark - MPIntersitialAdControllerDelegate


- (void)interstitial:(GADInterstitial *)interstitial didFailToReceiveAdWithError:(GADRequestError *)error {

  NSLog(@"**** MoPub Interstitial load failed.");

}


- (void)interstitialDidReceiveAd:(GADInterstitial *)interstitial {

  NSLog(@"**** MoPub Interstitial did load.");

}


- (void)interstitialWillPresentScreen:(GADInterstitial *)interstitial {

  

}


- (void)interstitialDidDismissScreen:(GADInterstitial *)interstitial {

  [self reloadInterstitial];

}


#endif



끗!


저작자 표시 비영리
신고
Posted by KraZYeom

Java도 잘 모르고, Android 도 잘 모르고... 삽질 중인데 Dropbox에서 FileList 를 가지고 오는데 뭔가 에러가 팍팍난다. 

사실 에러 로그를 잘 살펴 보면 정답이 더 빨리 나왔을 텐데, Java를 안 다뤄본지 100만년 전이라 더더욱 모르겠다. 


돌고 돌아 찾은 황금같은 힌트 문서. Async를 사용해야한다. 

http://stackoverflow.com/questions/12729532/cancelling-dropbox-getfile-download


http://stackoverflow.com/questions/9671546/asynctask-android-example 그리고 안드로이드에서 async 예제. 


구글, 스텍 오버플로우 감사합니다. 

저작자 표시 비영리
신고
Posted by KraZYeom

안드로이드 앱을 OS X에서 실행 할 수 있게 해 주는 BuleStacks라는 App Player가 알파버젼으로 나왔습니다. :-)


http://bluestacks.com/bstks_mac.html


아래와 같이 설치하고 나면 독에 폴더가 하나 생깁니다. 

그안을 열어보면 16개의 앱이 있습니다. :-) 아직 알파 버젼이라 앱의 갯수도 적긴 하지만 계속해서 추가 하고 있다고 합니다. 


그런데 Mt. Lion에서는 실행만 되고.. 다시 꺼저버리는 낭패가. ㅠㅠ 






저작자 표시 비영리
신고
Posted by KraZYeom
TAG Android, OS X


  • Android 1.5 Cupcake

  • Android 1.6 Donut
  • Android 2.1 Eclair
  • Android 2.2 Froyo
  • Android 2.3 Gingerbread
  • Android 3.0 Honeycomb
  • Android 4.0 Ice Cream Sandwich
  • Android 5.0 Jelly Bean
  • Android X.X Key Lime Pie


Key Lime Pie 라는 루머가 있습니다. :-) 맛있어 보이네요. 

다음번 구글 I/O 식당엔 Key Lime Pie가 잔뜩 있을듯 하네요.


https://www.google.co.kr/search?q=Key+Lime+Pie&hl=ko&newwindow=1&prmd=imvnsule&source=lnms&tbm=isch&sa=X&ei=w7HrT6OAMM6biQfsr4DDBQ&ved=0CCQQ_AUoAQ&biw=1062&bih=934

저작자 표시 비영리
신고
Posted by KraZYeom