weex再次使用笔记

s

一、weex+webstorm使用配置:

      1、安装依赖(官方文档):

            https://weex.apache.org/zh/guide/develop/setup-develop-environment.html#%E5%AE%89%E8%A3%85%E4%BE%9D%E8%B5%96

      2、用webstorm创建空的项目 WeexProgram:

        terminal执行:

        配置vue环境:

        (1)安装 nodejs

        (2)安装 webpack : npm install webpack -g

        (3)安装 vue-cli 脚手架:npm install vue-cli -g

             参考:https://blog.csdn.net/u010326875/article/details/79816789

        配置weex环境:

            (1)全局安装 weex-toolkit : npm install weex-toolkit -g

            (2)创建初始化weex项目:weex create awesome-project

                报错: Sorry, didn't recognize that command!
                       Type weex help to view common commands.

                原因是:安装的时候选择的方式有问题

                解决:weex repair  修复一下,然后选择:

                    report improve :YES
                    taobao npm

                整理:https://blog.csdn.net/u010326875/article/details/103470848

            (3)继续执行:weex create awesome-project 就可以了

      3、创建完成后,会默认下载依赖的库:

        (1)进入创建的项目 : cd awesome-project

        (2)执行 :npm install 再次下载依赖,因为创建的时候有可能下载失败

        (3)启动本地 web 服务,浏览器预览渲染效果:npm start

      4、这里eslint代码规范校验,有点烦给它关掉:

            参考:https://www.jianshu.com/p/05de429e190b

      5、引入 weex-vue-render:

         官网参考:https://www.npmjs.com/package/weex-vue-render

        (1)下载依赖:npm install weex-vue-render

        (2)为啥要用 weex-vue-render :

            weex-vue-render 可以让你为 weex 开发的 .vue 文件跑在 webkit webview 或者任何基于
            webkit 内核的移动端浏览器里。比如 dotwe 网站上这个 demo 就是用 weex-vue-render
            渲染出来的。

            你可以打开 console 看到里面有版本信息,目前 dotwe 网站上的版本是 0.12.1

        (3)配置 weex-vue-render :

            在 entry.js 中的内容替换成:

                import Vue from 'vue';
                import weex from 'weex-vue-render';

                weex.init(Vue);

      6、添加js-base64 基础库在weex端js文件中引入备用(es6):

        (1)下载依赖:npm install --save js-base64

        (2)使用参考:https://www.npmjs.com/package/js-base64

        (3)使用eg:

            import { Base64 } from 'js-base64';

            Base64.encode('dankogai');  // ZGFua29nYWk=

            Base64.decode('ZGFua29nYWk=');  // dankogai

二、管理weex资源:

    (一)、逻辑:

        1:加载android项目中assets里的weex资源
        2:下载服务器weex资源,解压到手机内存,并加载使用

    (二)、执行步骤:(可以按照逻辑自己管理)

        1:加载android项目中assets里的weex资源

             不用管理版本信息,每次更新都要发布项目才能生效,不能热修复

        2:下载服务器weex资源,解压到手机内存,并加载使用

           (1) 自己管理weex本地存储的最新版本信息,用作更新配置文件比较时是否需要更新下载

                管理当前weex版本信息、weex更新后最新版本信息

                 release.json:

                    [
                        {
                            "build": 1001,//version_code
                            "ver": "1.0.0.1"//version_name
                            "path": "weex.zip",//最新的weex资源包  baseUrl+path
                            "releaseNote": "测试",//更新记录
                            "targetAndroidAppVer": "1.0.0.1001",//目标版本号
                            "miniAndroidAppVer": "0.0.0.1"//最小版本号
                        }
                    ]

           (2) 下载服务器对weex管理的更新配置文件(json格式文件或者其他自己处理)到指定目录


           (3)下载服务器最新weex资源到指定目录,并解压

                // 下载到指定目录后,删除已经存在的指定目录,解压到指定目录

                // 下载成功,更新管理本地weex最新版本的值

           (4) 页面加载逻辑:
				
				区分加载内存和assets的资源方式
				
           (5) 具体实现可以按照上面的大概逻辑自己实现就好

三、自定义weex页面跳转的Navigator和对应的逻辑:

   android manifest.xml 、android 扩展Navigator 和 weex router文件对应:

        # scheme:定义跳转的唯一标识

        # android manifest.xml中配置:

            <intent-filter>
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="com.taobao.android.intent.category.WEEX"/>
                <data android:scheme="bai-r-dev"/>  <!-- scheme 自定义scheme来指定加载本地assets下的资源 -->
            </intent-filter>

        # android 扩展Navigator:

            (Weex的Sdk中默认的navigator源码)
            Uri rawUri = Uri.parse(url);
            String scheme = rawUri.getScheme();
            Uri.Builder builder = rawUri.buildUpon();
            if (TextUtils.isEmpty(scheme)) {
                builder.scheme(Constants.Scheme.HTTP);
            }
            Intent intent = new Intent(Intent.ACTION_VIEW, builder.build());
            intent.addCategory(WEEX);
            intent.putExtra(INSTANCE_ID, mWXSDKInstance.getInstanceId());

        # weex router处理和manifest对应的scheme:

              push(params, callback, paramValue) {
                    let bundleUrl=params.url;
                    if(params && params.url && params.url.indexOf("://")===-1){
                        if(bundleUrl.indexOf("weex/main.js")===0){
                            params.url="m-"+scheme+"://bai.cn/"+params.url;//m-bai-r-dev 对应android WeexMainActivity
                        } else {
                            params.url=scheme+"://bai.cn/"+params.url;//bai-r-dev 对应android WeexMainPageActivity
                        }
                    }

                    if(paramValue){
                        if(typeof paramValue==='object'){
                            if(params.url.indexOf("?") !== -1){
                                params.url=params.url+'&paramValueBase64='+Base64.encodeURI(JSON.stringify(paramValue));
                            }else{
                                params.url=params.url+'?paramValueBase64='+Base64.encodeURI(JSON.stringify(paramValue));
                            }
                        }else{
                            if(params.url.indexOf("?") !== -1){
                                params.url=params.url+'&paramValueBase64='+Base64.encodeURI(paramValue);
                            }else{
                                params.url=params.url+'?paramValueBase64='+Base64.encodeURI(paramValue);
                            }
                        }
                    }
                    navigator.push(params, callback,params.resultCallback?params.resultCallback:null);
                }

四、可以扩展WeexFragment和WeexActivity一样使用:

    public static final String MAIN_FRAGMENT_URL = "weex/mainFragmentPage.js";

    bundleUrl = Constants.Weex.MAIN_FRAGMENT_URL;
    String pageName = bundleUrl.substring(bundleUrl.lastIndexOf("/") + 1, bundleUrl.lastIndexOf("."));
    mWXSDKInstance.render(pageName, WXFileUtils.loadAsset(bundleUrl, mWXSDKInstance.getContext()),options, null, WXRenderStrategy.APPEND_ASYNC);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

漠天515

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值