我查了apk包的路径文件都没问题,为什么会找不到main.luac呢?百思不得其解。。。
从3.17版本到4.0都有这个问题,debug下是不会黑屏的。
附上截图
这么久了就没有人有这问题吗?用lua-tests项目release也是这个问题
我的手机是小米note3 android9,用32位的机子运行就正常
我查了apk包的路径文件都没问题,为什么会找不到main.luac呢?百思不得其解。。。
从3.17版本到4.0都有这个问题,debug下是不会黑屏的。
附上截图
我也遇到这个问题,请问有人解决一下吗?
看这个报错不是没找到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即可。(以上只是一些猜想,没有依据,可能是胡扯)