4.0版本release使用armeabi-v7a:arm64-v8a部分机型黑屏

我查了apk包的路径文件都没问题,为什么会找不到main.luac呢?百思不得其解。。。
从3.17版本到4.0都有这个问题,debug下是不会黑屏的。
附上截图



这么久了就没有人有这问题吗?用lua-tests项目release也是这个问题
我的手机是小米note3 android9,用32位的机子运行就正常

我也遇到这个问题,请问有人解决一下吗?

看这个报错不是没找到main.luac,是这个文件有错

对了,资源不copy的问题是要替换这段。这个我知道怎么解决。可以顺利打release包。但是部分机型还是黑屏。比如小米的很多机型,红米k40等。

以下是需要替换的build.gradle(我是3.17的),希望能帮到需要的人

android.applicationVariants.all { variant ->
// delete previous files first
delete variant.mergeAssets.outputDir

variant.mergeAssets.doLast {
    copy {
       from "${buildDir}/../../../../../res"
       into "${variant.mergeAssets.outputDir}/res"
    }

    copy {
        from "${buildDir}/../../../../../src"
        into "${variant.mergeAssets.outputDir}/src"
    }

    // copy {
    //     from "${buildDir}/../../../../cocos2d-x/cocos/scripting/lua-bindings/script"
    //     into  "${variant.mergeAssets.outputDir}/src/cocos"
    // }

    // compile & encrypt the scripts if necessary
    def compileScript = (variant.name.compareTo('release') == 0)
    if (project.hasProperty('PROP_COMPILE_SCRIPT')) {
        compileScript = (PROP_COMPILE_SCRIPT.compareTo('1') == 0)
    }

    def encryptLua = project.hasProperty('PROP_LUA_ENCRYPT') && (PROP_LUA_ENCRYPT.compareTo('1') == 0)
    if (compileScript || encryptLua) {
        // -1 means not build bytecode
        // 0 means build 32bit only
        // 1 means build 64bit only
        // 2 means build both 32bit & 64bit
        def buildType = -1
        if (compileScript) {
            def need64 = false
            def need32 = false
            def abis = PROP_APP_ABI.split(':').collect{it as String}
            abis.each{ abi->
                if (abi.compareTo('arm64-v8a') == 0) {
                    need64 = true
                }
                else
                {
                    need32 = true
                }
            }

            if (need64 && need32) {
                buildType = 2
            }
            else if (need64) {
                buildType = 1
            }
            else {
                buildType = 0
            }
        }

        // invoke cocos command to compile & encrypt the lua files
        switch (buildType) {
            case -1:
                compileLua("${variant.mergeAssets.outputDir}/src",
                           "${variant.mergeAssets.outputDir}/src",
                           false, false, encryptLua)
                break
            case 0:
                compileLua("${variant.mergeAssets.outputDir}/src",
                           "${variant.mergeAssets.outputDir}/src",
                           true, false, encryptLua)
                break
            case 1:
                compileLua("${variant.mergeAssets.outputDir}/src",
                           "${variant.mergeAssets.outputDir}/src/64bit",
                           true, true, encryptLua)

                // remove the lua files in src dir
                delete fileTree("${variant.mergeAssets.outputDir}/src") {
                    include '**/*.lua'
                }
                delete "${variant.mergeAssets.outputDir}/src/cocos"
                break
            case 2:
                compileLua("${variant.mergeAssets.outputDir}/src",
                           "${variant.mergeAssets.outputDir}/src/64bit",
                           true, true, encryptLua)
                compileLua("${variant.mergeAssets.outputDir}/src",
                           "${variant.mergeAssets.outputDir}/src",
                           true, false, encryptLua)
                break
        }
    }
}

}

我的测试环境:
版本是cocos2d-x3.17 lua
ndk版本是20b
Android Gradle Plugin Version:3.3.0
Gradle Version:4.10.1
android studio3.3
设备:红米k40
PROP_APP_ABI=armeabi-v7a:arm64-v8a
测试结果:红米k40等黑屏,部分其他设备正常

版本是cocos2d-x3.17 lua
ndk版本是16b
Android Gradle Plugin Version:3.0.0
Gradle Version:4.6
android studio3.0.1
设备:红米k40
PROP_APP_ABI=armeabi-v7a
测试结果:正常

这个问题几年来没看到什么真正意义上的解决方案,核心还是部分机型会自认为是64位ARM,然而不适配arm64-v8a这种模式,我也不确定是cocos2d-x本身的问题还是Luajit的问题,还是手机CPU架构的问题导致的,建议打包时有针对性的打包;强制要求arm64-v8a的基本上是海外有google play手机,可以测试一下海外的这些手机是否大多适配arm64-v8a,毕竟google play是强制要求arm64-v8a了,我尚未实验,但是感觉是大部分支持的,而诸多不支持的,应该是国内的手机,标准与海外并不完全统一,因此国内追求兼容性全用armeabi-v7a即可。(以上只是一些猜想,没有依据,可能是胡扯)