3.8.5 原生混合开发之安卓简单教程(嵌入flutter或者react native)

最近新开的项目,需要混合开发。为了高性能,不能用使用 webview 嵌入 iframe 的方案去解决。在2.x时代,因为cocos 使用的是GLSurfaceView,很容易就能迁移到 flutter或 者 react native上面去。3.x 时代,使用的是 Android Jetpack 库 ,然后 继承 GameActivity 来实现。这里简单说一下实现思路(移植unity是很容易得,他们官方默认就实现了,只要new 一下 UnityPlayer就行)。

回到正题,我们只需要将GameActivity 继承 FrameLayout 或者 SurfaceView 就可以了。为了方便,我这里直接是继承 FrameLayout ,官方gamesdk 工程 地址:GitHub - cocos/google-game-sdk

然后就是修改一下生命周期相关的函数之类。

再把没有用到的函数去掉一下,因为我们是继承了FrameLayout ,构建SurfaceView相关的函数得修改或者屏蔽一下,我这里是直接屏蔽掉,放到CocosActivity上面去创建。

这里为什么不新建一个类,比如说像cocosplayer之类来处理呢,因为jni 里面已经绑定了GameActivity和CocosActivity类,自己定义的话,得全改一遍,如JniCocosEntry.cpp 里面的 Java_com_cocos_lib_CocosActivity_onCreateNative,SystemWindow.cpp 里面的 #define JCLS_COCOSACTIVITY “com/cocos/lib/CocosActivity” 等等,懒得动,也为了后面升级方便。

再接着,改一下CocosActivity initView函数,因为我把创建SurfaceView放到了CocosActivity来做。另外,有些地方会报 jni 错误,简单处理一下就好,这里就不多说了。

演示。



温馨提醒,记得处理一下CocosActivity 对应的生命周期函数。

5赞

markmark

mark mark

这里有个问题请教一下,在安卓app中退出cocos游戏,再进去会奔溃吗?因为v8引擎好像只能初始化一次

你可以尝试释放一下v8相关