GCanvas集成采坑
-
so的版本
根据阿里的GCanvas文档,如果直接添加依赖如下:
compile "com.taobao.gcanvas:corelib:1.0.4"
compile "com.taobao.gcanvas.adapters:img:1.0.0"
compile "com.taobao.gcanvas.bridges:spec:1.0.1"
compile "com.taobao.gcanvas.bridges:weex:1.0.2"
你会发现里面默认依赖的只有armeabi版本的so,但是目前大多数的项目在gradle配置abiFilter时候都会只保留armeabi-v7a。因此我们需要去GitHub上把源码clone下来自己编译v7a版本的so。
-
Weex版本
最近几个Weex版本改动都比较大(这里指的是0.18.0 0.19.0以及0.20.0三个版本),因此列出几个涉及到兼容性的改动以作备忘:
-
在0.19.0版本之后so变成了libweexcore.so,之前是叫libweexjsc.so,因此如果你的项目在使用Weex版本还小于0.19.0,你会发现直接使用GCanvas文档中的依赖库版本是会有问题的,具体问题是在WXGCanvasWeexComponent中调用了GCanvasJNI.registerWXCallNativeFunc会有错误提示:“result is 0x0”以及“can not find Inject_GCanvasFunc address.”。然后去查看GCanvasJNI.cpp源码就会发现是因为这个so名字改了= =|||,另外需要注意的是不改任何配置打出来的so会特别大,需要自己根据实际需求修改配置。
此外在com.taobao.gcanvas:corelib的GCanvasJNI.java类中也需要修改registerWXCallNativeFunc方法将传入的so名根据Weex的版本修改,并重新编译打包集成到自己的项目中= =|||
-
在0.19.0之后Weex官方移除了getDomObject() ,将WXDomObject 下沉至WeexCore中,但坑爹的是在GCanvas的WXGCanvasWeexComponent中还是用着老的api,所以这边需要手动修改WXGCanvasWeexComponent的构造函数,并更换addGCanvasView方法中对getDomObject的调用方式:
-
小结
Weex框架的实用性还是值得肯定的,但是文档更新频率、bug的解决速度等问题还是让人很迷。另外框架的代码都是开源的,推荐大家可以去扒一下源码能学到不少设计思想以及编码技巧。