基于Weex的跨端方案

基于Weex的跨多端融合方案(番外篇)——GCanvas

2019-03-07  本文已影响37人  Meteorwizard

GCanvas集成采坑

  1. 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。

  2. Weex版本

    最近几个Weex版本改动都比较大(这里指的是0.18.0 0.19.0以及0.20.0三个版本),因此列出几个涉及到兼容性的改动以作备忘:

    1. 在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的版本修改,并重新编译打包集成到自己的项目中= =|||


      registerCallback
    dlopen_weex_so_above_android_7
    1. 在0.19.0之后Weex官方移除了getDomObject() ,将WXDomObject 下沉至WeexCore中,但坑爹的是在GCanvas的WXGCanvasWeexComponent中还是用着老的api,所以这边需要手动修改WXGCanvasWeexComponent的构造函数,并更换addGCanvasView方法中对getDomObject的调用方式:


      addGCanvasView
constructors

小结

Weex框架的实用性还是值得肯定的,但是文档更新频率、bug的解决速度等问题还是让人很迷。另外框架的代码都是开源的,推荐大家可以去扒一下源码能学到不少设计思想以及编码技巧。

上一篇 下一篇

猜你喜欢

热点阅读