java回调js时require模块报错

  • Creator 版本:2.0.0

  • 目标平台: Android

  • 详细报错信息,包含调用堆栈:

  • 重现方式:
    1.新建官方hello world工程模板。
    2.在HelloWorld.js中添加如下代码,调用安卓原生工程,这一步是可以调用成功的。


    3.发布原生工程以后,在andriod studio中新建testInvoke类,类信息如下。这里我也新建了一个invoke.js并且使用module.exports=invoke导出,报错是一样的,后面我就直接改成HelloWorld还是报错。这里我原先是没有使用路径的,直接require(‘invoke’),没有前面的window,报错是一样的。

    4.然后连接到安卓真机上,点击按钮回调,java调用js中require总是出现buffer is empty。
    5.之后我在evalString里面直接调用cc.log是可以成功输出的,但是就不能请求到模块。

  • 之前哪个版本是正常的 :还没有测试过其它版本

  • 手机型号 :小米MIX2

  • 手机浏览器 :无

  • 编辑器操作系统 :win10

  • 编辑器之前是否有其它报错 :无

  • 出现概率:100%

  • 额外线索:
    1.invoke.js

改成require(‘HelloWorld’)试试。
PS:帖子里贴代码能不能插入代码而不是贴图片:sweat:

我这也遇到这种情况了,求解释~~

buffer is empty说明。说明没有找到脚本,或者脚本不对。
建议在以下两个方法开始处断点,调试一下。
ScriptingCore::requireScript
ScriptingCore::evalString
ScriptingCore::reportError

另外输出一下搜索路径

creator构建时会把所有目录的非插件js都打包到一个文件里,require的使用不用带完整路径,只用传文件名(也就是模块名),也不用带.js后缀

我刚开始是没有带完整路径名的,不行,我才换成了完整路径。

不好意思,下次我贴代码。

延时调用试试,我是延时调用的,我猜引擎是和activity生命周期做了绑定啥的,onresume之前调用会报错。

谢谢大家已解决问题,避免以后其它同学入坑,我把我的解决办法说出来。在2.0.0中我用require是没办法取到模块的,而要用__require,下面是我调用的代码。
Cocos2dxJavascriptJavaBridge.evalString(“var invoke = __require(‘invoke’);invoke.output();”);
步步深坑啊,搞了几天了,快把jsb的代码给看懂了都,汉。。。。

已经解决了,你看我下面回复

还有这么个坑啊,受教了

谢谢,我去试试,主要是原先1.9的时候require是能用的,最近换的2.0版本

确实可用,虽然不是很明白原理

感谢您