1
首先在AndroidManifest.xml中的application中添加需要在c++层调用的属性。
<meta-data android:value="559a907d67e58e3e08001af6" android:name="UMENG_APPKEY"></meta-data>
<meta-data android:value="X001" android:name="UMENG_CHANNEL"></meta-data>
2
由于这两个属性在游戏中不会更改,所以选择在init的时候直接保存在变量里。
try {
ApplicationInfo appInfo;
appInfo = getPackageManager()
.getApplicationInfo(getPackageName(),
PackageManager.GET_META_DATA);
String msg=appInfo.metaData.getString("UMENG_APPKEY");
appkey = msg;
Log.d(TAG, " UMENG_APPKEY == " + msg );
msg=appInfo.metaData.getString("UMENG_CHANNEL");
Channel = msg;
Log.d(TAG, " UMENG_CHANNEL == " + msg );
} catch (NameNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
3
在需要配置友盟的地方通过jni调用如下函数
public static void ConfigUmeng(){
Cocos2dxActivity.getinstance().get_Cocos2dxGLSurfaceView().get_Cocos2dxRenderer().ConfigUmeng(appkey,Channel);
}
在Cocos2dxRenderer中添加ConfigUmeng方法
public void ConfigUmeng(final String appkey,final String channelId) {
Cocos2dxRenderer.nativeConfigUmeng(appkey,channelId);
}
private static native void nativeConfigUmeng(final String appkey,final String channelId);
在main.cpp中实现jni调用的c++配置
void Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeConfigUmeng(JNIEnv* env, jobject thiz,jstring appkey,jstring channelId)
{
const char *appkeyName = env->GetStringUTFChars(appkey, NULL);
const char *channelIdName = env->GetStringUTFChars(channelId, NULL);
MOBCLICKCPP_START_WITH_APPKEY_AND_CHANNEL(appkeyName, channelIdName);
env->ReleaseStringUTFChars(appkey, appkeyName);
env->ReleaseStringUTFChars(channelId, channelIdName);
}
关于jni的实现参考 http://codingnow.cn/cocos2d-x/992.html