Android平台,Google后台报错7a.apk!libcocos.so (cc::gfx::cmdFuncGLES3CreateFramebuffer(cc::gfx::GLES3Device*, cc::gfx::GLES3GPUFramebuffer*)+8192)

项目上线Google后,后台有大量报错,来个大佬帮忙分析分析什么原因吧!万分感谢!!


以下是完整日志


pid: 0, tid: 6574 >>> com.ahrnb.koo.fln <<<

backtrace:
#00 pc 0x0000000000550ae4 /data/app/com.ahrnb.koo.fln-VocXe7zBlVpVjXUgMrIYrw==/split_config.armeabi_v7a.apk!libcocos.so (cc::gfx::cmdFuncGLES3CreateFramebuffer(cc::gfx::GLES3Device*, cc::gfx::GLES3GPUFramebuffer*)+8192) (BuildId: 41610ed22017127f3a034f2d65c6ed9ab45e89aa)
#01 pc 0x000000000055468b /data/app/com.ahrnb.koo.fln-VocXe7zBlVpVjXUgMrIYrw==/split_config.armeabi_v7a.apk!libcocos.so (cc::gfx::GLES3GPUFramebufferHub::update(cc::gfx::GLES3GPUTexture*)+8192) (BuildId: 41610ed22017127f3a034f2d65c6ed9ab45e89aa)
#02 pc 0x0000000000560f95 /data/app/com.ahrnb.koo.fln-VocXe7zBlVpVjXUgMrIYrw==/split_config.armeabi_v7a.apk!libcocos.so (cc::gfx::GLES3Texture::doResize(unsigned int, unsigned int, unsigned int)+8192) (BuildId: 41610ed22017127f3a034f2d65c6ed9ab45e89aa)
#03 pc 0x00000000004241b3 /data/app/com.ahrnb.koo.fln-VocXe7zBlVpVjXUgMrIYrw==/split_config.armeabi_v7a.apk!libcocos.so (cc::gfx::Texture::resize(unsigned int, unsigned int)+8192) (BuildId: 41610ed22017127f3a034f2d65c6ed9ab45e89aa)
#04 pc 0x0000000000560941 /data/app/com.ahrnb.koo.fln-VocXe7zBlVpVjXUgMrIYrw==/split_config.armeabi_v7a.apk!libcocos.so (cc::gfx::GLES3Swapchain::doResize(unsigned int, unsigned int, cc::gfx::SurfaceTransform)+8192) (BuildId: 41610ed22017127f3a034f2d65c6ed9ab45e89aa)
#05 pc 0x000000000042682b /data/app/com.ahrnb.koo.fln-VocXe7zBlVpVjXUgMrIYrw==/split_config.armeabi_v7a.apk!libcocos.so (cc::MessageQueue::consumerThreadLoop()+8192) (BuildId: 41610ed22017127f3a034f2d65c6ed9ab45e89aa)
#06 pc 0x0000000000427b73 /data/app/com.ahrnb.koo.fln-VocXe7zBlVpVjXUgMrIYrw==/split_config.armeabi_v7a.apk!libcocos.so (void* std::__ndk1::__thread_proxy<std::__ndk1::tuple<std::__ndk1::unique_ptr<std::__ndk1::__thread_struct, std::__ndk1::default_deletestd::__ndk1::__thread_struct>, void (cc::MessageQueue::)() noexcept, cc::MessageQueue>>(void*)+8192) (BuildId: 41610ed22017127f3a034f2d65c6ed9ab45e89aa)
#07 pc 0x00000000000a6293 /apex/com.android.runtime/lib/bionic/libc.so (__pthread_start(void*)+20)
#08 pc 0x0000000000060803 /apex/com.android.runtime/lib/bionic/libc.so (__start_thread+30)

以下来自deepseek回复

这个崩溃日志显示了一个基于 Cocos2d-x 引擎的 Android 游戏(ARMv7 架构)在 OpenGL ES 3.0 渲染时的崩溃问题。以下是详细分析:

崩溃核心原因

libcocos.soGLES3 帧缓冲创建函数 (cmdFuncGLES3CreateFramebuffer) 中发生崩溃,调用链显示与渲染纹理尺寸调整有关。

关键调用栈解析

  1. 直接崩溃点 (#00)
    OpenGL ES 3.0 的帧缓冲创建失败,可能原因:

    • GL 上下文丢失或线程错误
    • 纹理附件无效
    • 显存不足
  2. 触发路径 (#01#04)
    崩溃源于交换链(Swapchain)的尺寸调整:

    交换链尺寸变化 → 纹理重置 → 帧缓冲更新 → 创建新帧缓冲时崩溃
    
  3. 线程环境 (#05-#07)
    操作发生在消息队列的消费者线程(非主线程),典型的多线程GL操作问题场景。

常见解决方案

  1. 检查GL上下文

    if (!glGetCurrentContext()) {
        // 上下文丢失处理
    }
    
  2. 验证纹理状态
    在调用 doResize() 前检查:

    if(texture->isValid()) { ... }
    
  3. 添加错误日志
    在关键GL操作后添加检查:

    GLenum err = glGetError();
    if(err != GL_NO_ERROR) {
        CCLOG("GL error: 0x%04X", err);
    }
    
  4. 尺寸限制检查
    在调整尺寸前验证设备支持的最大值:

    GLint maxSize;
    glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxSize);
    
  5. 线程同步
    确保所有GL操作在渲染线程执行:

    Director::getInstance()->getScheduler()->performFunctionInGLContext([&](){
        // GL操作代码
    });
    

特别注意事项

  • 该崩溃发生在 split APK (split_config.armeabi_v7a.apk) 中,建议检查:
    • 纹理资源是否被正确分包
    • 不同ABI版本的资源差异
  • 调用栈中的 +8192 偏移量表明崩溃发生在函数内部的深层逻辑中,建议检查:
    • 是否传入了异常的纹理尺寸(如0或超大值)
    • 帧缓冲的附件配置是否正确

需要更多上下文信息(如崩溃时的纹理参数、设备型号等)可以进一步精准定位问题。