问题环境
CocosCreator工程,输出Android Studio工程,用Android Studio打开,根据提示升级相关的Gradle:
然后打包,安装到安卓手机上,运行测试,咦,怎么闪退了?
如果查看logcat日志,可以看到错误:
完整的错误信息:
E/jswrapper: ScriptEngine::onGetStringFromFile jsb-adapter/jsb-builtin.js not found, possible missing file. ScriptEngine::runScript script jsb-adapter/jsb-builtin.js, buffer is empty! E/jswrapper: ScriptEngine::onGetStringFromFile src/settings.js not found, possible missing file. ScriptEngine::runScript script src/settings.js, buffer is empty! [ERROR] Failed to invoke require, location: /Applications/CocosCreator.app/Contents/Resources/cocos2d-x/cocos/scripting/js-bindings/manual/jsb_global.cpp:292 ScriptEngine::onGetStringFromFile src/cocos2d-jsb.js not found, possible missing file. ScriptEngine::runScript script src/cocos2d-jsb.js, buffer is empty! [ERROR] Failed to invoke require, location: /Applications/CocosCreator.app/Contents/Resources/cocos2d-x/cocos/scripting/js-bindings/manual/jsb_global.cpp:292 D/vndksupport: Loading /vendor/lib64/hw/android.hardware.graphics.mapper@2.0-impl.so from current namespace instead of sphal namespace. E/jswrapper: ScriptEngine::onGetStringFromFile jsb-adapter/jsb-engine.js not found, possible missing file. ScriptEngine::runScript script jsb-adapter/jsb-engine.js, buffer is empty! [ERROR] Failed to invoke require, location: /Applications/CocosCreator.app/Contents/Resources/cocos2d-x/cocos/scripting/js-bindings/manual/jsb_global.cpp:292 D/vndksupport: Loading /vendor/lib64/hw/gralloc.sdm845.so from current namespace instead of sphal namespace. E/jswrapper: ERROR: Uncaught TypeError: Cannot read property 'debug' of undefined, location: main.js:0:0 STACK: [0]window.boot@main.js:10 [1]anonymous@main.js:212 ScriptEngine::evalString script main.js, failed! A/libc: /Applications/CocosCreator.app/Contents/Resources/cocos2d-x/cocos/scripting/js-bindings/jswrapper/Value.cpp:539: se::Object *se::Value::toObject() const: assertion "isObject()" failed Fatal signal 6 (SIGABRT), code -6 in tid 32669 (GLThread 109567), pid 32595 (dowgame.balance) Application terminated.
这是怎么回事?
原因
首先,检查一下导出的apk包是不是正常的。
直接在Android Studio里,双击打开对应的apk,可以查看包里的内容
果然没有js文件!
有什么办法呢?
解决方法
重新打一个包,然后不升级Gradle,直接打包。
看看这时候的apk包是否正常:
居然是正常的,看来是升级Gradle以后的产生的问题。
如果升级Gradle,需要修改一下build.gradle
android.applicationVariants.all { variant -> // delete previous files first delete "${buildDir}/intermediates/merged_assets/${variant.dirName}" variant.mergeAssets.doLast { def sourceDir = "${buildDir}/../../../../.." // 以下几行是旧的代码,在新版Gradle下有问题 // copy { // from "${sourceDir}/res" // into "${outputDir}/res" // } // // copy { // from "${sourceDir}/src" // into "${outputDir}/src" // } // // copy { // from "${sourceDir}/jsb-adapter" // into "${outputDir}/jsb-adapter" // } // 新的拷贝文件的方法,在新版Gradle可用 copy{ from "${sourceDir}" include "res/**" include "src/**" include "jsb-adapter/**" into outputDir } copy { from "${sourceDir}/main.js" from "${sourceDir}/project.json" into outputDir } } }
打包测试,这次从打包的临时目录查看一下,文件都在
临时文件目录:xx/app/build/intermediates/merged_assets/debug/out