cocos2d-x_Android应用启动调用过程简析

cocos2d-x_Android应用启动调用过程简析,第1张

概述调用org.cocos2dx.cpp.AppActivity AppActivity是位于proj.android/src下,是开发者类(即开发者自定义的类),继承自org.cocos2dx.lib.Cocos2dxActivity,它没有添加任何代码,纯粹是一个Cocos2dxActivity,也是一个Activity。 AppActivity被调用是因为被配置在AndroidManifest. 调用org.cocos2dx.cpp.AppActivity

AppActivity是位于proj.androID/src下,是开发者类(即开发者自定义的类),继承自org.cocos2dx.lib.Cocos2dxActivity,它没有添加任何代码,纯粹是一个Cocos2dxActivity,也是一个Activity。

AppActivity被调用是因为被配置在AndroIDManifest.xml

<application androID:label="@string/app_name" androID:icon="@drawable/icon"> <activity androID:name="org.cocos2dx.cpp.AppActivity" androID:label="@string/app_name" androID:screenorIEntation="landscape" androID:theme="@androID:style/theme.NoTitlebar.Fullscreen" androID:configChanges="orIEntation"> <!-- Tell NativeActivity the name of our .so --> <Meta-data androID:name="androID.app.lib_name" androID:value="cocos2dcpp" /> <intent-filter> <action androID:name="androID.intent.action.MAIN" /> <category androID:name="androID.intent.category.LAUNCHER" /> </intent-filter> </activity> </application>
加载libcocos2dcpp.so

libcocos2dcpp.so在编译后生成到proj.androID/libs/armeabi下,从上面代码中可以看到androID:value=”cocos2dcpp”这行配置内容,它指示了so的名字。

在AppActivity中加载so的代码如下:

@OverrIDe protected voID onCreate(final Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  try {   ApplicationInfo ai = getPackageManager().getApplicationInfo(getPackagename(),PackageManager.GET_Meta_DATA);   Bundle bundle = ai.MetaData;   try {   String libname = bundle.getString("androID.app.lib_name");   System.loadlibrary(libname);   } catch (Exception e) {     // ERROR   }  } catch (PackageManager.nameNotFoundException e) {    // ERROR  }  sContext = this;  this.mHandler = new Cocos2dxHandler(this);  this.init();  Cocos2dxHelper.init(this); }
调用cocos_androID_app_init

proj.androID/jni/hellocpp/main.cpp中的cocos_androID_app_init函数被调用。

我们看看this.init();后续代码片段:

public voID init() {  ... this.mGLSurfaceVIEw.setCocos2dxRenderer(new Cocos2dxRenderer());        ... }
@OverrIDe public voID onSurfaceCreated(final GL10 pGL10,final EGLConfig pEGLConfig) {  Cocos2dxRenderer.nativeInit(this.mScreenWIDth,this.mScreenHeight);  this.mLastTickInNanoSeconds = System.nanoTime(); }

到现在前面都是java代码,上段中的Cocos2dxRenderer.nativeInit(this.mScreenWIDth,this.mScreenHeight);是一句jni调用,java调用c/c++代码。

其代码在cocos2d/cocos/2d/platform/androID/javaactivity.cpp中,如下:

voID Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeInit(jnienv* env,jobject thiz,jint w,jint h){ auto director = cocos2d::Director::getInstance(); auto glvIEw = director->getopenGLVIEw(); if (!glvIEw) { glvIEw = cocos2d::GLVIEw::create("AndroID app"); glvIEw->setFrameSize(w,h); director->setopenGLVIEw(glvIEw); //cocos_androID_app_init(env,thiz); cocos2d::Application::getInstance()->run(); } else { cocos2d::GL::invalIDateStateCache(); cocos2d::shadercache::getInstance()->reloadDefaultShaders(); cocos2d::DrawPrimitives::init(); cocos2d::VolatileTextureMgr::reloadAllTextures(); cocos2d::EventCustom foregroundEvent(EVENT_COME_TO_FOREGROUND); director->getEventdispatcher()->dispatchEvent(&foregroundEvent); director->setGLDefaultValues(); }}

jintArray Java_org_cocos2dx_lib_Cocos2dxActivity_getGLContextAttrs(jnienv* env,jobject thiz)

{

cocos_androID_app_init(env,thiz);

cocos2d::Application::getInstance()->initGLContextAttrs();

GLContextAttrs _glContextAttrs = GLVIEw::getGLContextAttrs();

int tmp[6] = {_glContextAttrs.redBits,_glContextAttrs.greenBits,_glContextAttrs.blueBits,

_glContextAttrs.AlphaBits,_glContextAttrs.depthBits,_glContextAttrs.stencilBits};

jintArray glContextAttrsJava = env->NewIntArray(6);

env->SetIntArrayRegion(glContextAttrsJava,6,tmp);

return glContextAttrsJava;

}

我们看到了cocos_androID_app_init(env,thiz);这句,这就和main.cpp中的cocos_androID_app_init连接上了。

创建AppDelegate

cocos_androID_app_init中创建了AppDelegate,后面的事就交给cocos2d-x引擎吧

voID cocos_androID_app_init (jnienv* env,jobject thiz) { LOGD("cocos_androID_app_init"); AppDelegate *pAppDelegate = new AppDelegate();}
总结

以上是内存溢出为你收集整理的cocos2d-x_Android应用启动调用过程简析全部内容,希望文章能够帮你解决cocos2d-x_Android应用启动调用过程简析所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1010618.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存