jsb.reflection有没有判断接口是否存在的接口?

jsb.reflection有没有判断是否存在的接口?
比如与jsb.reflection.callStaticMethod相对应的jsb.reflection.hasStaticMethod?

顶上去

顶一顶

你如果有这个需求的话,就在native那写一个hasStaticMethod的方法就可以啊

这个需求出现在老版本的客户端运行新版本的脚本,因为新版本在原生代码里加了接口,热更后脚本如果不判断接口是否存在直接调用不存在的接口,以cocos目前的设计理念可能是会闪退的。

如果我来设计这个接口会在.reflection.callStaticMethod里先判断接口是否存在,不存在打个log或抛exception,而不是闪退。

1赞

因为舆论压力我不再喷Cocos的不效验参数合法性,但我需要另一个接口来自己判断参数是否合法。

喷Cocos喷多了,官方人员都不回我贴。我好可怜。

P 大去香港浪了,等他回来我让他看看。

我帮你看了相关的代码,初步确定他们是有检查有效性的,代码在CCJavascriptJavaBridge.cpp:

JS_BINDED_FUNC_IMPL(JavascriptJavaBridge, callStaticMethod)
{
        ... ...
        CallInfo call(arg0.get(), arg1.get(), arg2.get());
         // 这里就是判断java的静态方法是否有效的
        if(call.isValid()){

在创建CallInfo的时候:

m_valid =  validateMethodSig() && getMethodInfo();

所以判断是否有效的代码应该就在getMethodInfo

具体你还是得看一下相关代码?
最重要的是你直接代码运行起来测一下就知道了吧?

好可怜的cocos开发组

如果能报异常就好了。
我现在不得不在native做了个版本管理,js代码里很多判断版本的分支,某个native版本以上才会存在native的某些接口,否则崩溃,try也没有用。
如果1.6能解决这个问题,就简单多了,做版本管理也容易出错。

我的做法是,底层代码做一个coreVersion, 如果新版本判断底层代码的coreVersion太低,不支持新功能,就特别处理,这样更合理,coreVersion可以直接读ios的plist version和安卓的manifest的version

谢谢,只有再等等。

谢谢,这个要试一下才知道。

如果在发布的第一个版本就加了这个coreVersion的查询还好,目前已经在跑,这个不好做

在 1.6 小版本里面我们会支持用 try catch 捕获接口不存在的错误

2赞

使用你说这个方法搞定了,得益于目前调用不存在的接口不会闪退。调用一次安卓会卡住,但不会闪,这时可以设置一个默认版本号,比如0,但我没有去取苹果的版本号,直接写死一个版本号在代码里就行了。

不好意思,不知道发帖子怎能么@你,接这个帖子问你一个问题,我是1.4.2版本,在cocosjs里可以获取到安卓apk和ios的ipa里的version版本号吗,谢谢了