打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
在JS代码中使用反射调用java代码注意事项(附webview使用方法)(转)

在JS代码中使用反射调用java代码注意事项(附webview使用方法)(转)

转自http://cn.cocos2d-x.org/tutorial/show?id=2279

本文是推荐使用过jsb.reflection的开发者进行阅读。关于jsb.reflection的说明请参照:

我们在代码编写过程中,通常会需要在js脚本中调用到java代码或者Objective-C的代码。例如:接入sdk,显示webview,使用原生代码,接入广告等等。

 

现在以在js脚本在Android中使用webview为例。

 

首先在js脚本中加入如下代码。调用java端的webview

var webUrl = "http://www.baidu.com";if(cc.sys.os == cc.sys.OS_ANDROID){              this.addKeyListener();              this.webViewId = jsb.reflection.callStaticMethod("org/cocos2dx/lib/Cocos2dxWebViewHelper", "createWebView", "()I");              if(this.webViewId < 0) return ;              jsb.reflection.callStaticMethod("org/cocos2dx/lib/Cocos2dxWebViewHelper", "setScalesPageToFit", "(IZ)V", this.webViewId, true);              jsb.reflection.callStaticMethod("org/cocos2dx/lib/Cocos2dxWebViewHelper", "loadUrl", "(ILjava/lang/String;)V", this.webViewId, webUrl);         }

这段代码执行以后,会在界面上生成一个webview,显示百度的主页。

 

但是实际情况是,我们在编译Android版本运行以后发现。在显示完百度主页以后,程序就崩溃了。

 

查看后台后发现后台提示了这两个问题。

 

 

看上面的提示,标识的是c++端,没有实现Java_org_cocos2dx_lib_Cocos2dxWebViewHelper_didFinishLoading 函数, 但是实际上。我们会发现,这段代码实际上已经在cocos2d-x/cocos/ui/UIWebViewImpl-android.cpp中实现了。并且已经编译进去了。

 

这是为什么呢?

答案其实是, 我们在Cocos2d-JS 3.2版本的时候,做过的安装包体积自动缩减功能在作怪。

我们在安装包体积缩减的时候采用了 LOCAL_STATIC_LIBRARIES 的方式链接c++各个库文件。这种链接方式会在在连接静态连接库的时候移除"daed code",何谓dead code呢,就是调用者模块永远都不会用到的代码段和变量。

由于我们是在js脚本中引用的webview对象,而在c++代码中并没有使用webview对象,这就导致了,c++在生成so链接库的时候,将webview这部分代码给移除了。

 

解决方案:

只需要在我们的c++代码中显示调用以下即可。

在appDelegate.cpp中引入头文件,引入

  #include "ui/UIWebView.h"

在函数 applicationDidFinishLaunching最后,加上

  #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
      cocos2d::experimental::ui::WebView::create();
  #endif

即可。

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
如何在IOS平台上使用js直接调用OC方法 | Documents | Cocos2d
从前端到全端:JavaScript逆袭之路
利用HTML5开发Android技巧
Android原始应用与web app集成:内嵌jquery mobile为html5框架
谈谈App混合开发 | 知其所以然
Android WebView的使用
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服