DCloud_App_Array
DCloud_App_Array
  • 发布:2015-04-24 21:55
  • 更新:2021-10-14 18:30
  • 阅读:89717

App资源在线差量升级更新

分类:HTML5+

官方已发布APP升级中心,支持原生APP整包升级和wgt资源包升级。详见

5+应用可使用以下方式进行升级

本文重点介绍5+应用资源差量升级,相对App资源独立升级,因为只需要下载更新的资源文件,所以升级包体积更小,升级速度会更快。
注意:需HBuilder5.7.0以上版本才有此功能

生成移动App资源差量升级包

顾名思义,差量升级包是针对某个历史版本到新版本的差量,所以对于升级服务器来讲需要保留所有历史版本,并且分别生成每个历史版本到新版本的差量升级包。
目前HBuilder IDE并未提供版本控制系统,所以需要按照以下规则手动生成差量升级包:

  • 差量升级包文件格式为wgtu
    在HTML5+移动App支持的差量升级包文件后缀名必须是wgtu,它是标准的zip压缩文件,可以使用任何zip工具对wgtu目录进行压缩,并修改文件后缀名称为wgtu。
  • wgtu目录结构
名称 类型 说明
www 目录 保存需要更新的数据文件,其下的目录结构与应用的目录结构一致,其下必须包含manifest.json文件,否则认为更新文件非法,不执行升级操作
update.xml 文件 保存应用升级操作的配置信息,参考update.xml文件格式
  • update.xml文件格式(注意:文件名必须全部小写)
    update.xml为标准的xml文件格式,定义wgtu文件升级配置信息,其文件格式如下:
元素名称 父元素 类型 描述 必须
wgtu 根节点
appid wgtu 属性 升级应用的appid
basis wgtu 节点 基础应用信息
version basis 属性 基础应用的版本信息(旧版本的版本号
remove wgtu 节点 升级需要删除的文件/目录列表
item remove 节点 需要删除的项
path item 属性 需要删除的项的路径,相对于应用根目录,如“image/a.png”表示image目录下的a.png文件。如果是目录则以‘/’结尾,如“res/img/”表示res目录下的img目录,删除时包括下的所有内容。
  • wgtu示例
    应用升级前的版本1.0,其应用目录结构为:

    应用升级后的版本1.1,其应用目录结构为:

    差量升级包wgtu文件的目录结构为(不包括最外层wgtu目录):

    应用升级更新文件manifest.json、index.html,新增detail.html、image/new.png,删除image/icon5.png。
    其中update.xml中的内容为:
    <?xml version="1.0" encoding="utf-8" standalone="no"?>  
    <wgtu appid="TEST" >  
    <basis version="1.0" />  
    <remove>  
    <item path="image/icon5.png" />  
    </remove>  
    </wgtu>

应用中差量更新资源

下载wgtu文件并更新:

    var url='http://demo.dcloud.net.cn/helloh5/update/HelloH5.wgtu';  
    plus.nativeUI.showWaiting("升级中...");  
    var dtask = plus.downloader.createDownload( url, {method:"GET"}, function(d,status){  
        if ( status == 200 ) {   
            console.log( "Download wgtu success: " + d.filename );  
            plus.runtime.install(d.filename,{},function(){  
                plus.nativeUI.closeWaiting();  
                plus.nativeUI.alert("Update wgtu success, restart now!",function(){  
                    plus.runtime.restart();  
                });  
            },function(e){  
                plus.nativeUI.closeWaiting();  
                alert("Update wgtu failed: "+e.message);  
            });  
        } else {  
            plus.nativeUI.closeWaiting();  
             alert( "Download wgtu failed: " + status );   
        }   
    } );  
    dtask.addEventListener('statechanged',function(d,status){  
        console.log("statechanged: "+d.state);  
    });  
    dtask.start();

注意

  1. wgtu包中的update.xml文件名称必须全部小写,并且和www在同一级目录中
  2. wgtu包中www目录下必须包含manifest.json文件,并且里面不能包含注释(HBuilder中默认带注释,需要手动删除所有注释)
  3. update.xml中的appid值是应用的AppID(如“H5F6AE111”),不是程序的包名(如“io.dcloud.H5F6AE1111”)
  4. wgtu包必须是使用zip格式压缩的文件(不能使用如rar等其它压缩格式)

App store应用更新说明
应用资源更新肯定是违反apple政策的,但目前看起来它也不管。你在官网案例那里下载Appstore版本的那些app,大多启动后都会提示更新,反正也都没下架。如果你不是很大的公司,apple不会理睬你。如果你是大公司,建议不要做整体更新,每次更新几个页面,也不要提示更新后需要重启,这样会安全点。

感谢 @大裤子 反馈建议更新补充文档,wgtu更新经验分享:http://ask.dcloud.net.cn/question/6353

44 关注 分享
蔡繁荣 杨羊羊 ztingjian 半杯可乐 小手真黑 古丶木风 飞羽 小小雨 gerry 布洛瓷 NyxFang BoredApe 埃文 不知道 天行 果汁 木子喵 望月孤魂 江南长 除膜慰道 妙妙 holy1004 yinzhq12 止水 夜汨 Trust _burt 2***@qq.com 赵 skysowe atongmu 启程588 1***@qq.com 3***@qq.com 6***@qq.com 银少 4***@qq.com 1***@qq.com studio jzq84229 1***@qq.com 7***@qq.com m***@gmail.com 理子

要回复文章请先登录注册

Kathy_zu

Kathy_zu

回复 阿拉斌 :
解决了么,我的也是安卓的可以,ios的不行
2019-08-12 19:33
老哥教教我

老哥教教我

并且分别生成每个历史版本到新版本的差量升级包 这句话什么意思,一个差量文件不能升级所有历史版本到最新版本吗?
2019-07-08 17:16
7***@qq.com

7***@qq.com

回复 DCloud_App_Array :
嗯,谢谢
2019-07-08 16:49
DCloud_App_Array

DCloud_App_Array (作者)

回复 7***@qq.com :
uni-app不支持差量更新
2019-07-05 15:32
7***@qq.com

7***@qq.com

回复 1***@qq.com :
同问这种方法可以用在uni-app里吗,在uniapp里试了很多次都不行
2019-07-05 10:32
1***@qq.com

1***@qq.com

这种资源更新方式可以用在uni-app里吗
2019-06-01 17:50
谷雨霖

谷雨霖

我写了个在线工具,可以批量替换“manifest.json”中的注释,地址:http://www.dfer.top/index.php?A=tools&c=home&a=strReplace&para=0
2018-08-20 15:35
3***@qq.com

3***@qq.com

回复 7***@qq.com :
我也遇到这个问题了,请问怎么解决的呢
2018-07-02 17:45
3***@qq.com

3***@qq.com

回复 c***@163.com :
我也遇到这个问题了,请问怎么解决的呢
2018-07-02 17:44
阿拉斌

阿拉斌

Android能升级成功,但是IOS升级就失败了,这是为什么啊。。。
2018-06-10 21:52