Weex 阿里跨平台开发组件扩展库

WeexPlus

为解决目前移动开发频繁的迭代、开发周期长、人员成本高的问题,移动跨平台开发方案层出不穷。 WeexPlus则是一款基于阿里weex跨平台方案(android/ios/h5)开发的weex端与android native交互的组件扩展库,提供页面导航、数据存储、图片选择、二维码识别、权限等原生功能。web开发者不用再为调用native功能而烦恼,android开发者轻松搞定hybrid开发。

如果你想采用纯原生快速开发方案,请移步:MVVMHabit

源码地址:https://github.com/goldze/WeexPlus

框架特点

  • 快速集成

    不管是web开发者,还是android开发者,都可以快速的集成此库。

  • 事件模式

    整体使用事件派发思想,weex与native完全解耦,相互不依赖。weex端指定唯一的Action(动作),native端会根据Action做出判断,执行对应的逻辑,响应结果。

  • 页面加载器

    WeexPlus提供一个原生的页面加载器,只需要传入JSBundle文件路径(本地/网络都可以),会自动渲染页面,并带有material design加载效果。加载失败显示错误信息,可点击重新加载。

1、准备工作

WeexPlus基于Weex技术,Weex 是一个使用 Web 开发体验来开发高性能原生应用的框架,所以你需要掌握一定的Weex开发知识。相关文档

根据官方介绍配置安装weex开发环境

1.1、android视角

WeexPlus是集成了weex_sdkgliderxpermissions2rxjava2matissezxingmaterial的一套android library。提供了页面导航、数据存储、图片选择、二维码识别、权限等原生功能给weex端调用,节约了自己再去开发这样一套库的时间成本。

不管你是做hybrid开发,还是纯跨平台开发,android端直接依赖此库(业务逻辑交给前端去搞定 罒ω罒)。

1.1.1、依赖方式

  • 源码依赖: 下载例子程序,直接import weexplus module

  • 远程依赖:

    //添加仓库支持
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
    //远程依赖
    implementation 'com.github.goldze:WeexPlus:1.0.0'

建议使用源码依赖的方式,方便业务扩展。

1.1.2、配置Application

继承weexplus中的WeexApplication,或者在你Application的onCreate方法中调用:

WeexApplication.initialize(this);

1.1.3、混淆

-keep class me.goldze.weex.** { *; }
-dontwarn me.goldze.weex.**

1.2、web视角

WeexPlus可以让你在没有android开发人员的情况下,满足native功能调用的需求。

1.2.1、依赖方式

下载例子程序,将 android 文件夹整个放入weex目录的 platforms 下,不再需要命令weex platform add android生成android程序。

1.2.2、配置app

项目集成好后,通过android studio打开android项目,找到app/src/main/res/values/strings.xml,修改app名称和第一个页面入口url的值。

<!--app名称-->
<string name="app_name">WeexPlus</string>
<!-- 入口url 换成你自己的第一个页面文件,可以是本地, 也可以是网络 -->
<string name="entrance_url">file://main_demo.js</string>

集成好后执行 weex run android 看效果

2、weex调用

导入 WeexPlusAppModule 组件

//App原生通信模块
const appModule = weex.requireModule("AppModule");

通过调用appModule.event(string,map,function,function)方法,来实现与native的通信。其中,

第一个参数string:代表action,指调用功能的动作,是打开页面还是关闭页面还是选择图片;</br>
第二个参数map:需要传入的参数;</br>
第三个参数function:逻辑成功的回调;</br>
第四个参数function:逻辑失败的回调。</br>

所有与本地方法的通信都是按照此结构来操作。

2.1、页面导航

2.1.1、打开页面

打开一个带有页面加载器的新页面

    appModule.event(
        "START_PAGER",
        {
          url: geRootIp() + "/dist/index.js",
          title: "新页面",
          data: {}
        },
        function(e) {
          //页面打开完成的回调
        },
        function(e) {
          //页面打开失败的回调
        }
      );

START_PAGER:动作名,表示需要打开一个新页面;</br>
url:新页面JSBundle文件路径;</br>
title:新页面的标题;注意:当值为NO_NAVIGATION时不显示标题栏;</br>
data:需要传入到下一个界面的参数。

如果需要将参数传入下一个页面,这里提供了两种方法:

  • 一种是,将参数放入url中,例如http:...?user=123&psw=abc,新页面通过weex.config.bundleUrl拿到当前url,通过字符串截取的方式取出参数值。
  • 另一种是,在新页面的created方法中,获取data字段传入过来的数据(推荐)。
    created: function () {
      globalEvent.addEventListener("init", function(e) {
        //e.data即是上个页面data字段传过来的值
        console.log(e.data);
      });
    },

2.1.2、关闭页面

关闭当前界面

      appModule.event(
        "CLOSE_PAGER",
        {},
        function(e) {
           //页面关闭完成的回调
        },
        function(e) {
           //页面关闭失败的回调
        }
      );

CLOSE_PAGER:动作名,表示需要关闭当前界面。

2.2、数据存储

这里说明一下:本身weex提供了storage模块, 为什么这里又要自己写一个SharedPreferences存储呢?为的是weex与原生更好的通信。比如混合开发时, 登录界面是原生界面,登录成功后本地保存用户唯一标识,当进入weex界面时可以通过该模块取出用户唯一标识,实现相应逻辑。

2.2.1、写入数据

将数据保存到手机本地

      appModule.event(
        "WRITE_DATA",
        {
          key: "user_info",
          value: "{'userName':'张三','age':'18岁'}"
        },
        function(e) {
          toastModule.showShort("写入成功!");
        }
      );

WRITE_DATA:动作名,表示需要写入数据;</br>
key:键名称;
value:存入的数据。

2.2.2、读取数据

读取本地存储的数据

      appModule.event(
        "READ_DATA",
        {
          key: "user_info"
        },
        function(e) {
          toastModule.showShort(e.value);
        }
      );

READ_DATA:动作名,表示需要读取数据;</br>
key:键名称;</br>
e.value:在成功回调的方法中,得到存入的值。

2.3、图片选择

      appModule.event(
        "IMAGE_SELECT",
        {},
        function(e) {
          toastModule.showShort("选择了" + e.imgs.length + "张照片");
        },
        function(e) {
          toastModule.showShort("图片选择失败!");
        }
      );

IMAGE_SELECT:动作名,表示打开图片选择器选择图片;</br>
e.imgs:多张图片绝对路径的集合,WeexPlus 中配置了ImageAdapter,可直接通过image组件的 :src属性加载。

2.4、二维码

2.4.1、识别二维码

打开二维码识别界面(二维码采用Google ZXing开源方案)。

      appModule.event(
        "SCANNING_QR",
        {},
        function(e) {
          toastModule.showShort(e.result);
        },
        function(e) {
          toastModule.showShort("扫描失败,请检查权限是否打开!");
        }
      );

SCANNING_QR:动作名,表示打开二维码识别界面;</br>
e.result:二维码识别的结果,返回一个字符串

2.4.2、生成二维码

功能暂时屏蔽,大多数生成二维码的需求是由服务端实现

效果图

<img src="https://user-gold-cdn.xitu.io/2018/6/11/163ec89746c9a242?w=1080&h=1920&f=png&s=68426" width="288" hegiht="512" align=center /><img src="https://user-gold-cdn.xitu.io/2018/6/11/163ec8a088835e95?w=1080&h=1920&f=png&s=104774" width="288" hegiht="512" align=center /><img src="https://user-gold-cdn.xitu.io/2018/6/11/163ec8a74fe743f2?w=1080&h=1920&f=png&s=73863" width="288" hegiht="512" align=center /><img src="https://user-gold-cdn.xitu.io/2018/6/11/163ec8aeb397d5f0?w=1080&h=1920&f=png&s=810603" width="288" hegiht="512" align=center /><img src="https://user-gold-cdn.xitu.io/2018/6/11/163ec8c00f37d0a8?w=1080&h=1920&f=png&s=54384" width="288" hegiht="512" align=center /><img src="https://user-gold-cdn.xitu.io/2018/6/11/163ec8c40dd9b00a?w=1080&h=1920&f=png&s=1308075" width="288" hegiht="512" align=center /><img src="https://user-gold-cdn.xitu.io/2018/6/11/163ec8c8793597bb?w=1080&h=1920&f=png&s=92304" width="288" hegiht="512" align=center /><img src="https://user-gold-cdn.xitu.io/2018/6/11/163ec8cb1fd994c7?w=1080&h=1920&f=png&s=75377" width="288" hegiht="512" align=center /><img src="https://user-gold-cdn.xitu.io/2018/6/11/163ec8cdd29f96aa?w=1080&h=1920&f=png&s=272309" width="288" hegiht="512" align=center />

<div id="xgwd">相关文档</div>

Weex概念快速上手

Weex技术手册快览

Weex工程原理

License

 Copyright 2018 goldze(曾宪泽)

 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
 You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,258评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,335评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,225评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,126评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,140评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,098评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,018评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,857评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,298评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,518评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,400评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,993评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,638评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,661评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,065评论 25 707
  • 前言 2016年4月21日,阿里巴巴在Qcon大会上宣布跨平台移动开发工具Weex开放内测邀请。Weex能够完美兼...
    一缕殇流化隐半边冰霜阅读 38,974评论 135 366
  • 2016年4月21日,阿里巴巴在Qcon大会上宣布开源跨平台移动开发工具Weex,Weex能够完美兼顾性能与动态性...
    晴天咚咚阅读 2,890评论 1 15
  • 今天老师留的话题是什么事情改变命运?看到这个话题让我想起自己的一段经历,也许就是这件事改变了我,也是我人生的一大转...
    朋友你好吗阅读 153评论 3 0
  • 今天是我报道姑苏平安服务队的第一天,也是第一次做志愿者,服务站点是乐桥站。 由于自身原因,只有8点以后才有时间做志...
    aibigail阅读 270评论 0 1