• 混合APP开发-hybrid 升级流程


    本文来自网易云社区

    作者:王贝


    目前大多数APP已经应用hybrid进混合开发,这不,我们的gacha APP这个版本已经开始使用hybrid来开发了,hybrid的优势这里就不多说了,这里主要讲一下hybrid中模块包的升级流程。

    服务器要维护一份zip包的版本列表,

    apppid表示每个模块的id,唯一

    version表示对应模块的版本号,递增的

    url表示对应模块包最新版本号的下载地址

    MD5表示该包的md5值

    ps:每个模块对应一个appid,模块表示app混合html5的子元素,一个模块整合了一个app的一类页面功能,每个模块的目录结构如下:

    这里h10001里的资源文件表示一个模块的资源文件,在GACHA APP里这个代表跟帖详情页这个页面功能。

    首先要把前端的代码打包成zip包,写了一个自动化打包脚本(待完善),如下:


    #切换到项目目录
    cd erciyuan_h5
    #更新最新代码
    git pull
    cd src
    var=$1
    var=${var//,/ }
    for element in $var
    do
    #切换到相应模块目录
    cd $element
    #执行前端webpack打包命令,在css目录和js目录里分别生成template.css template.js
    webpack -p
    #向服务器获取当前模块的最新版本号
    version=`curl "http://hostname/hybirdVersion?appid=$element"`
    echo $version
    #生成zip包名
    module={element}_version
    rm -rf $module
    #将前端资源文件打包
    mkdir $module
    cp -r image $module
    mkdir ${module}/js
    mkdir ${module}/css
    mv css/template.css ${module}/css
    mv js/template.js ${module}/js
    cp -r image $module
    cp template.html $module
    zip -r 
    module.zip
    {module}
    #获取zip包的md5值
    md5=`md5sum {module}.zip|awk -F ' ' '{print1}'`
    echo $md5
    #上传zip包至nos
    curl -X POST -F "zip=@
    module.zip""http://hostname/api/v1/upload/webpack/zip?zipId=
    {module}.zip"
    #更新服务器包管理列表
    curl "http://hostname/hybirdStore?appid=1&module={module}.zip&MD5={md5}&v={version}"
    #包备份
    cp ${module}.zip /home/hzwangbei/package
    #删除本地zip包相关文件
    rm -f ${module}.zip
    rm -rf ${module}
    echo -e "
    stop succeed
    Download Url: http://acs.nos.netease.com/${module}.zip"
    done

    zip包生成上传后,app就要去更新了,更新协议如下:


    app 首先将本地维护的最新的模块及版本列表上传给服务器,服务器一一对比服务器的zip包版本号,检测到需要更新的zip包,reducer后返回给APP。

    app拿到需要更新的zip包模块列表后,下载对应zip包,校验zip包的md5值,校验通过后,解压覆盖掉本地旧的模块,同时更新本地维护的模块版本列表。

    大概流程如下:



    网易云免费体验馆,0成本体验20+款云产品! 

    更多网易研发、产品、运营经验分享请访问网易云社区




    相关文章:
    【推荐】 Docker容器的原理与实践(下)

  • 相关阅读:
    【前端】用百度BAE和express部署自己的node后台
    【前端】JavaScript中prototype和__proto__的区别
    【其他】Objective-C 内存管理学习总结
    【Unity3D】Unity3D 让角色的头部望向鼠标
    【Unity3D】Unity3D 摄像机带透明截图
    【前端】前端冷知识
    【Unity3D】Unity3D SkinnedMeshRenderer换装系统
    【前端】HTML中最适合做按钮的元素
    IEnumerable和IEnumerator 详解 分类: C# 2014-12-05 11:47 18人阅读 评论(0) 收藏
    LINQ to Entities
  • 原文地址:https://www.cnblogs.com/163yun/p/9722631.html
Copyright © 2020-2023  润新知