3.8.3 旋转屏幕 Android 必闪退

onCreate 中 this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
正常 ,下面这种在ts里面调用 直接闪退

public static void changeOrientationH(boolean V) {
    if (V) {
        instance.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        Log.d("横屏>>>>>", "SCREEN_ORIENTATION_LANDSCAPE: ");
    }else{
        instance.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        Log.d("竖屏>>>>>", "SCREEN_ORIENTATION_LANDSCAPE: ");
    }
}

10.746 16381-16550 JniHelper xx.xx.xx D JniHelper::getJavaVM(), pthread_self() = 501707816272
10.871 16381-16550 横屏>>>>> xx.xx.xx D SCREEN_ORIENTATION_LANDSCAPE:
10.889 16381-16381 Font xx.xx.xx V Dynamic Font V2 Ignore Call [ Change font:0]
10.923 16381-16381 threaded_app xx.xx.xx V ConfigurationChanged: 0x74d7891200
10.924 16381-16551 GameControllerThread xx.xx.xx D onInputDeviceChanged id: 6
11.010 16381-16381 threaded_app xx.xx.xx V NativeWindowResized: 0x74d7891200 – 0x7471e39010 ( 2280 x 1080 )
11.011 16381-16381 threaded_app xx.xx.xx V NativeWindowRedrawNeeded: 0x74d7891200 – 0x7471e39010
11.861 16381-16550 threaded_app xx.xx.xx V APP_CMD_CONFIG_CHANGED
11.862 16381-16550 threaded_app xx.xx.xx V Config: mcc=0 mnc=0 lang=zh cnt=CN orien=1 touch=3 dens=420 keys=1 nav=1 keysHid=3 navHid=0 sdk=29 size=2 long=2 modetype=1 modenight=1
11.862 16381-16550 Cocos xx.xx.xx I 17:12:11 [INFO]: AndroidPlatform: APP_CMD_CONFIG_CHANGED
11.863 16381-16550 Cocos xx.xx.xx I 17:12:11 [INFO]: AndroidPlatform: orientation-change
11.864 16381-16550 Cocos xx.xx.xx I 17:12:11 [INFO]: AndroidPlatform: APP_CMD_WINDOW_RESIZED
11.865 16381-16569 Cocos xx.xx.xx I 17:12:11 [INFO]: Resizing surface: 2280x1080
11.874 16381-16569 ChoreographerThread xx.xx.xx I Destroying NDKChoreographerThread
11.875 16381-16577 ChoreographerThread xx.xx.xx I Terminating Looper thread
11.876 16381-16578 SwappyDisplayManager xx.xx.xx I Terminating looper thread
24.679 16381-16569 libc xx.xx.xx A Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x98 in tid 16569 (Thread-5), pid 16381 (dxx.qqxcfdf.xxx)
24.841 16617-16617 crash_dump64 pid-16617 A crash_dump.cpp:460] failed to attach to thread 16569, already traced by 16481 (/data/data/sadxx.qqxcfdf.xxx/lldb/bin/lldb-server)
24.847 16381-16569 libc xx.xx.xx A crash_dump helper failed to exec
25.012 1323-1810 InputDispatcher system_server E channel ‘c12b57e sadxx.qqxcfdf.xxx/com.cocos.game.AppActivity (server)’ ~ Channel is unrecoverably broken and will be disposed!

发现只要旋转 就会闪退 和这个代码无关 项目是升级上来的 不知道如何排查

屏幕选择把横竖屏都选上试一下

看论坛 好像从3.7 开始就有这个问题 一直没有修复… 叹气

我记得3.7.3是修复的,后面的没试过了

pr我看了 引擎修改补丁还在 问题依旧

看看是不是我改的地方 但是我修复的问题也不是必闪退 只是概率很高的闪退 旋转多了基本就闪退了

太严重了。

这么基础, 需求也多的功能, 引擎团队应该重视一下

changeOrientation 这个你这边是如何触发的呢;如果是必现的,是否可以提供demo以及复现步骤?

这个问题还是存在于3.8.4中。我在ts中调用安卓的这个://切换横竖屏
public static void setOrientation(String dir){
if (_instance == null || _instance.isFinishing() || _instance.isDestroyed()) {
Log.e(“AppActivity”, “Invalid activity instance!”);
return;
}

    try {
        _instance.runOnUiThread(() -> {
            new Handler().postDelayed(() -> {
                try {
                    if ("H".equals(dir)) {
                        _instance.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
                    } else if ("V".equals(dir)) {
                        _instance.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
                    }
                } catch (Exception e) {
                    Log.e("AppActivity", "Failed to set orientation: " + e.getMessage());
                    e.printStackTrace();
                }
            }, 100); // 延迟 100 毫秒切换
        });
    } catch (Exception e) {
        Log.e("AppActivity", "Error in setOrientation: " + e.getMessage());
        e.printStackTrace();
    }
}切换横竖屏代码。必定闪退。我的游戏发布的时候,是勾选为竖屏的,进子游戏的时候,我想改变屏幕为横屏。调用这段代码刚开始的确是短暂横屏了,但是闪了一下,就闪退了。

你好,请上传最简demo, 我这没复现环境。
我模拟测试


未能复现。

好,我上传个简单的demo

这奇了怪了,我新建一个3.8.4空项目,调用安卓这个竖屏转变横屏的没问题。但是我自己的项目调用这个就闪退报错了,纳了闷了。我把我的项目上传试试

我的项目之前是在3.8.3建立的,后来升级到了3.8.4。以前没试过切换横屏。在3.8.4切换横屏的时候,发现崩溃。我把我的最简项目上传了,直接打包安卓就可,我的NDK版本:android-ndk-r23.2.8568313,谷歌云端:https://drive.google.com/file/d/1-3cAc7hiUh_kZsqJvSkOz7DEO-TafhBM/view?usp=drive_link

申请访问了,建议你先检查 androidManifest.xml configuratation的配置,是否有类似384类似的配置?

没有,我把崩溃的安卓的AndroidManifest.xml复制到新创建的3.8.4项目中,AndroidManifest.xml完全一样,但是新项目也不会崩溃。

https://drive.google.com/file/d/1-3cAc7hiUh_kZsqJvSkOz7DEO-TafhBM/view?usp=sharing我已经修改了,权限。任何人都可以下载。你下载运行试试看

给你添加权限了

问题的本质是使用端问题,请使用到native的方法前,先看下对应的接口在其他java文件是如何使用的;出现问题先用debug版本看下可能的问题,不要没定位,看到崩溃就说是引擎的问题。
比如当前崩溃的堆栈:

,项目中有改动到引擎的代码,第一时间先看下代码使用是否合理。检查引擎其他地方的使用是这样的:|
CocosHelper.runOnGameThread(() -> {
CocosJavascriptJavaBridge.evalString(str);
});

你项目中对引擎的使用是不一样的