android 分屏适配

    问题描述 由于 android 可以开启分屏和华为的折叠屏导致游戏适配问题 问题分析 官方文档 android 7.0 开始支持 multi-windows android 8.0 支持画中画 多窗口模式不会更改 Activity 生命周期 适配标识 android:resizeableActivity 画中画支持 android:supportsPictureInPicture 配置更改 android:configChanges=“screenSize|smallestScreenSize|screenLayout|orientation” 判断方法 // Activity 提供以下方法来支持多窗口显示。 isInMultiWindowMode() // 调用该方法可确认 Activity 是否处于多窗口模式。 isInPictureInPictureMode() 生命周期 onMultiWindowModeChanged() onPictureInPictureModeChanged() Cocos2d-x 的 GlView 创建流程 Cocos2dxActivity -> Cocos2dxGLSurfaceView -> Cocos2dxRender -> GLView 当屏幕尺寸发生改变的 Cocos2dxGLSurfaceView -> Cocos2dxRender -> GLView 需要处理的问题 当窗口大小发生改变的时候不重新创建OpenGLView 窗口大小改变的事件传递 java -> c++ -> lua 窗口大小改变后点击事件位置适配问题 窗口大小改变后游戏界面的适配 解决方案 在AndroidManifest.xml添加下列参数,让OpenGLView不因为调整大小而重建 // android:configChanges "smallestScreenSize|density|screenLayout" 传递尺寸更改信息 // cocos/client/platform/android/javaactivity-android.cpp void Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeOnSurfaceChanged(JNIEnv* env, jobject thiz, jint w, jint h) { cocos2d::Application::getInstance()->applicationScreenSizeChanged(w, h); } 传递给lua void AppDelegate::applicationScreenSizeChanged(int newWidth, int newHeight) { // .

    android-armeabi-lib-lock

    问题描述

    cocos2dxlua.so放在armeabi-v7a下 接SDK又引入 armeabi 几个so 结果会出现找不到cocos2dxlua.so 这个文件 导致崩溃

    android apk 下载无法识别

    问题分析

    因为游戏买广告的问题,发现转化率低的可怜,就开始找原因,用各种手机测试,发现了一个问题,就是用华为的手机下载完,在下载中心无法识别文件。 我在网页下载别人的的APK的时候会弹出打开或者保存的选项,于是我就开始找原因

    cocos2dx android ui and gl threads

    问题描述 搞android SDK 的时候,因为接quickSDK没有lua版本,只好用android 原生版本,自己写 java跟lua的交互 java 跟 lua 交互有概率性的会出现闪退 问题分析 这种概率性的闪退,一般都是线程不安全导致的,于是我就去找,看到cocos2dx 里面有很多用到 mActivity:runOnUiThread(new Runnable(){ public void run() { // xxoo xxoo } }) 然后我就认为这个是cocos2dx的主线程,然后就拼命的用它去调用lua,结果就是闪退不断, 这个时候我觉得是不对的,如果这个是主线程是不可能有这个问题,于是我再去找,发现一个方法长得跟它很像的 mActivity:runOnGLThread(new Runnable(){ public void run() { // xxoo xxoo } }) 这时候我才清楚,原来这个GL线程才是我们游戏线程,UI线程是UI框架的,如果调用高级UI或者SDK就需要用UI线程。 解决方案 解决方案 cocos2dx的东西使用 GL线程 android高线UI使用 UI线程

    cocos2dx etc 闪退问题

    问题描述 部分机型和部分模拟器会因为ETC1资源导致闪退 07-13 21:59:43.727 E/szipinf (21935): Error reading asset data 07-13 21:59:43.727 E/szipinf (21935): Unable to access asset data: -1 问题分析 经过调试发现是因为只有部分ETC1资源没有办法正常加载,于是我就把没办法正常加载的资源取出来找规律, 然后我发现了它们都有一个相同的问题,就是有大部分的透明区域,就是没有用的区域,大概是因为ETC1格式压缩 的问题和这些闪退的机型协议不一致所导致的,我也不想去深究。 解决方案 我尝试在整张图片周围画一个距形的红框,目的让资源四周都有像素,果然闪退解决

    android etc1 黑块问题

    问题描述 在SDK返回的时候,部分UI会出现黑块,LOG会提示Opengl GL 502等错误 问题分析 一开始我的处理方案是把那些异常的资源重新加载,是可以解决大部分问题,但觉得这并不上策。于是我再继续找根源。。。 根源是因为SDK在初始化|登录|支付的回调中去可能去调用到我们的UI,这个回调的线程并不是*Cocos2dxUI线程*,这样子操作UI是不能保证先后顺序,这个时候android机子会触发重新加载资源的时机。 所以部分重载一半或者一些不可预料的黑块就出现了。 解决方案 function () xxx:runAction(cc.Sequence:create( cc.DelayTime:create(0.02), cc.CallFunc:create(function () -- ... do something end))) end