본문 바로가기
알면 좋은 맥, 아이폰 정보

cocos2d-x) 안드로이드 에러 (VM aborting)

by snapshot 2013. 7. 9.

cocos2d-x로 게임을 만들고 디버깅을 하다가 이상한 에러를 만났습니다.


바로  Class lookup Ljava/lang/NullPointerException; attempted while exception Ljava/lang/NullPointerException; pending VM aborting 에러였습니다. 


cocos2d-x를  JNI로 빌드까지 제대로 성공하고 빌드까지 성공하였는데 런타임중에 이런 에러가 나오게 되었습니다.







아마 대충 위에처럼 에러가 쭉~ 뜨면서 죽을 것입니다.!!!!


해결책은 아주 간단하다..잘보면  sound 어쩌구가 나와서 SimpleAudioEngine을 찾아 보다가..


저 에러는 아이폰에서는 안나온다. 왜냐면 안드로이드 에서만 나오기 때문입니다.


안드로이드에서는 사운드파일을

 SimpleAudioEngine::sharedEngine()->preloadEffect("snd_object.mp3"); 

해주어야 합니다.

그러므로 


void   MyClass::preloadEffects() {

    SimpleAudioEngine::sharedEngine()->preloadEffect("snd_clothes_fit.mp3");

    SimpleAudioEngine::sharedEngine()->preloadEffect("snd_clothes_item.mp3");

    SimpleAudioEngine::sharedEngine()->preloadEffect("snd_bgm_clothes.mp3");

}


요렇게 필요한 사운드 파일을 미리 올려주는 함수를 만든다음


init() 함수안에

  if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)

    {

        this->preloadEffects();

 }

저것을 써 넣어주면 된다. 안드로이드에서만 필요 하지만 머 어짜피 cocos2d-x는 멀티플래폼이니 그냥 무조건 써 넣어주어야 합니다.


그리고 


void  MyClass::unloadEffects()

{

    SimpleAudioEngine::sharedEngine()->unloadEffect("snd_clothes_fit.mp3");

    SimpleAudioEngine::sharedEngine()->unloadEffect("snd_clothes_item.mp3");

    SimpleAudioEngine::sharedEngine()->unloadEffect("snd_bgm_clothes.mp3");

}


를 해서 preload한 사운드를 unload 해주고 


이것은


onExit() 함수 안에 넣어준다. 


끝..


저만 모르는 문제 였을지 모르지만..여러분도 저런 문제로 괜한 시간 허비 하지 않았으면합니다. 

댓글