Cocos2d-x 안드로이드 개발에서 PluginProtocol만 원하는
5839 단어 cocos2d-x
뭔가 빠져 있으면 순차 추기합니다.
개발 환경
Cocos2d-x 3.3 rc0
NDK r9d
본고에서는 Cocos2d-x 3.3 rc0를 사용하고 있습니다만, 3.0 beta2 정도의 무렵부터 쓰러뜨리고 있는 수단이므로, 3.x라면 괜찮다고 생각합니다.
하고 싶은 일
광고를 표시시키거나, OS의 팝업을 표시시키거나, 외부로 천이시키거나 등을 실시할 때, 본가의 plugin-x가 꽤 사용하기 어렵고, 또한 개발의 진척도 수상하므로 PluginWrapper만 사용하고 싶다.
PluginWrapper는 plugin-x에서 공통으로 사용되고 있는, UI thread로의 처리를 좋은 느낌으로 해 주는 컴퍼넌트.
아래 준비
plugin-x 게시
비어있는 상태에서 게시하고 싶기 때문에 config.sh에서 불필요한 플러그인을 제거합니다.
퍼블리시 자체는 프로젝트 개별적으로 복사된 cocos2d 리소스에서도 할 수 있지만 PluginProtocol을 전체 프로젝트 통일하여 사용하고 싶은 경우는 본체쪽의 리소스로 하는 것이 좋다.
$ cd cocos2d/plugin/tools/
$ vi config.sh
#define plugins array
#export ALL_PLUGINS=("flurry" "umeng" \
#"alipay" "nd91" "googleplay" \
#"admob" \
#"twitter" "weibo" \
#"qh360" "uc" \
#"facebook" "facebookads")
export ALL_PLUGINS=()
...
그리고 게시.
이 때, NDK 등의 패스를 듣기 때문에 적절히 입력한다.
$ ./publish.sh
Please input the android-ndk path:
/Users/smith/lib/ndk/
Get ANDROID_NDK_ROOT=/Users/smith/lib/ndk
Please input the andoid-sdk path:
/Users/smith/lib/adt-bundle-mac-x86_64-20140702/sdk
Get ANDROID_SDK_ROOT=/Users/smith/lib/adt-bundle-mac-x86_64-20140702/sdk
Please input the ant tool path(such as '/Users/MyAccount/tools/ant/bin'):
/Users/smith/lib/apache-ant-1.9.4/bin
Get ANT_PATH=/Users/smith/lib/apache-ant-1.9.4/bin
mk 파일 편집
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
$(call import-add-path,$(LOCAL_PATH)/../../cocos2d)
$(call import-add-path,$(LOCAL_PATH)/../../cocos2d/external)
$(call import-add-path,$(LOCAL_PATH)/../../cocos2d/cocos)
# パスの追加
$(call import-add-path,$(LOCAL_PATH)/../../cocos2d/plugin/publish)
LOCAL_MODULE := cocos2dcpp_shared
LOCAL_MODULE_FILENAME := libcocos2dcpp
LOCAL_SRC_FILES := hellocpp/main.cpp \
../../Classes/AppDelegate.cpp \
../../Classes/HelloWorldScene.cpp
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes
LOCAL_STATIC_LIBRARIES := cocos2dx_static
# .aの追加 PluginProtocol以外に使うものもついでに
LOCAL_WHOLE_STATIC_LIBRARIES += PluginProtocolStatic
LOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_network_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_extension_static
include $(BUILD_SHARED_LIBRARY)
$(call import-module,.)
# モジュールの追加 PluginProtocol以外に使うものもついでに
$(call import-module,protocols/android)
$(call import-module,audio/android)
$(call import-module,network)
$(call import-module,extensions)
또한 ndk 버전이나 버그, std 등의 복잡한 문제에서 개방되기 때문에 STL을 gnustl_static으로 만드는 것이 습관이되었습니다.
Application.mk
#APP_STL := c++_static
APP_STL := gnustl_static
libPluginProtocol 프로젝트 가져오기 및 참조 추가
Eclipse로 프로젝트를 가져온 다음 프로젝트 속성에서 libPluginProtocol에 대한 참조를 추가합니다.
ant에 서명 설정
이번 제목과는 관계없지만, 덤.
ant.properties
key.alias.password=my_fantastic_app_password
key.store.password=my_fantastic_app_password
key.store=/Users/smith/keys/apk/my_fantastic_app/my_fantastic_app_key
key.alias=my_fantastic_app_key
구현
PluginWraper를 사용하려면 적절하게 초기화해야합니다.
javaVM
main.cpp
#include "AppDelegate.h"
#include "cocos2d.h"
#include "platform/android/jni/JniHelper.h"
#include <jni.h>
#include <android/log.h>
#include "PluginJniHelper.h"
#define LOG_TAG "main"
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__)
using namespace cocos2d;
void cocos_android_app_init (JNIEnv* env, jobject thiz)
{
AppDelegate *pAppDelegate = new AppDelegate();
JavaVM* vm;
env->GetJavaVM(&vm);
PluginJniHelper::setJavaVM(vm);
}
Cocos2dxActivity 및 Cocos2dxGLSurfaceView
ClippingNode라든지 사용하고 있으면, Cocos2dxGLSurfaceView는 필연적으로 설정하게 되지 않을까.
AppActivity.java
import org.cocos2dx.lib.Cocos2dxGLSurfaceView;
import org.cocos2dx.plugin.PluginWrapper;
public class AppActivity extends Cocos2dxActivity
{
@Override public Cocos2dxGLSurfaceView onCreateView()
{
Cocos2dxGLSurfaceView glsView = super.onCreateView();
glsView.setEGLConfigChooser(5, 6, 5, 0, 16, 8);
PluginWrapper.init(this);
PluginWrapper.setGLSurfaceView(glsView);
H3NativeLifeCycle.applicationDidFinishLaunching();
return glsView;
}
...
}
사용법
GameFeat 등, Context나 Activity를 갖고 싶은 SDK에는 PluginWrapper.getContext() 를 준다.
NiceAdHandler.java
public static void initGamefeat()
{
gamefeatController = new GameFeatAppController();
gamefeatController.init(PluginWrapper.getContext());
gamefeatController.setRefreshInterval(30);
gamefeatController.activateGF(PluginWrapper.getContext(), false, true, true);
}
View에의 추가는 runOnMainThread로 실시할 필요가 있다.
그렇지 않으면 충돌합니다.
NiceAdHandler.java
public static void showIntersticial()
{
PluginWrapper.runOnMainThread(new Runnable(){
@Override
public void run()
{
aidController.showDialog(AdController.DialogType.ON_EXIT);
}
});
}
특히 jni의 디버깅은 귀찮기 때문에 try/catch (Exception e)에서 오류 메시지를 보는 불행한 방법이 권장됩니다.
빌드
통과하지 않으면 미안해.
$ cocos run -p android -m release --ap 14
Reference
이 문제에 관하여(Cocos2d-x 안드로이드 개발에서 PluginProtocol만 원하는), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/smith/items/b5b9ca4c54c7c10f8065텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)