HBuilder----APP热更新升级

HBuilder打包升级分两种方式:

【1】打包下载覆盖安装

【2】热更新app,制作wgt包

重点是APP如何实现热更新:

【2.1】制作wgt包

点击确定制作升级包。

【2.2】具体实现逻辑

app检测是否有新版本,有的话提示更新下载,实现热更新的代码

// 这里是热更新的逻辑
owner.downLoad = function(option = {
			        url : '',
			loadBefore : function(){},
			loading : function(){},
			install : function(){},
			installed : function(){},
			error : function(){}
		}){
			//var waiting = plus.nativeUI.showWaiting("下载升级包...",{height:"150px",width:"150px"})
           // 这里是wgt包所在的路径,我这里是测试版
			option.url = 'http://zlw.ngrok.zhoulw.cn:8080/zlw/movie/sdbigand.wgt';
			var dtask = plus.downloader.createDownload(option.url, {
				filename : "_downloads/update/"
			});
			dtask.addEventListener("statechanged", function (d, status) {
				if(d.state == 2){
					option.loadBefore()
				}
				if(d.state == 3) {
					option.loading({
						load_size : (d.downloadedSize/1024).toFixed(0),
						size : (d.totalSize/1024).toFixed(0),
						percent : (d.downloadedSize/1024).toFixed(0) /  (d.totalSize/1024).toFixed(0) *100
					})
				} else if(d.state == 4 && status == 200) {
					console.debug("下载升级包成功:" + d.filename);
					// 安装升级包
					option.install()
					plus.runtime.install(d.filename, {}, function (e) {
						// 安装成功
						if(d.filename.indexOf('apk') > -1){
							return false
						}
						option.installed()
					}, function (e) {
						option.error()
						console.log("安装wgt文件失败:"+e.message);
					});
				} else if(d.state == 4) {
					option.error()
				}
			});	
			return dtask
		}
<!-- 热更新下载时的样式 -->
<!doctype html>
<html>

	<head>
		<meta charset="UTF-8">
		<title></title>
		<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
		<link href="../css/mui.min.css" rel="stylesheet" />
	</head>
	<style>
	</style>
	<body style="background: transparent;">
		<div style="background: rgba(50, 50, 50,0.5);;height: 100%;position: absolute;width: 100%;">
			<div class="mui-card" style="top: 40%;">
				<div class="mui-card-header">正在下载</div>
				<div class="mui-card-content">
					<div class="mui-card-content-inner">
						<div style="height: 5px;"  id="progressbar" class="mui-progressbar"><span></span></div>
					</div>
				</div>
				<div class="mui-card-footer">
					<a class="mui-card-link pause">暂停</a>
					<a class="mui-card-link cancel">取消下载</a>
				</div>
			</div>
		</div>
		<script src="../js/mui.min.js"></script>
		<script src="../js/app/app.js"></script>
		<script type="text/javascript">
			mui.init()
			function setTitle(e){
				document.querySelector('.mui-card .mui-card-header').innerText = e
			}
			function setProgressbar(num){
				mui('#progressbar').progressbar().setProgress(num);
			}
			mui('#progressbar').progressbar().show();
			
			var self
			mui.plusReady(function(){
				self = plus.webview.currentWebview()
				var down = app.downLoad({
					url : self.downurl,
					loadBefore : function(){
						setTitle('开始下载')
						setProgressbar(0)
					},
					loading : function(a){
						setTitle('正在下载(' + a.load_size + 'kb/' + a.size +'kb)')
						if(a.percent >= 95)
							setProgressbar(95)
						else 
							setProgressbar(a.percent)
					},
					install : function(){
						setProgressbar(95)
						setTitle('开始安装')
					},
					installed : function(){
						setTitle('安装完成')
						setProgressbar(100)
						setTimeout(function(){
							plus.runtime.restart()
						},500)
					},
					error : function(){
						self.close()
					}
				})
				//开始下载
				
				mui('.mui-card-footer').on('tap','.cancel',function(){
					console.log('取消')
					plus.downloader.clear()
					self.close()
				})
				mui('.mui-card-footer').on('tap','.pause',function(){
					down.pause()
					this.classList.add('start')
					this.classList.remove('pause')
					this.innerText = '开始'
				})
				mui('.mui-card-footer').on('tap','.start',function(){
					down.resume()
					this.classList.add('pause')
					this.classList.remove('start')
					this.innerText = '暂停'
				})
				down.start();
			})
		</script>
	</body>

</html>

【2.3】实现效果

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HBuilderX是DCloud推出的一款跨平台的开发工具,而uni-app是基于Vue.js框架的一种跨平台应用开发解决方案。下面我将简要介绍HBuilderX uni-app的开发教程。 1. 环境搭建:首先,我们需要下载并安装HBuilderX开发工具,然后在工具的插件市场中搜索并安装uni-app插件。安装完成后,打开HBuilderX,点击新建uni-app项目,选择你的开发平台(如App、小程序等)和模板,填写项目名称和存储路径,点击完成即可创建一个uni-app项目。 2. 组件使用:uni-app开发中使用的是Vue.js框架,所以你可以使用Vue语法来编写你的界面和逻辑。在HBuilderX的编辑器中,可以直接创建和编辑uni-app项目中的页面,你可以添加页面、组件和自定义样式等。 3. API调用:uni-app封装了一些常用的API接口,可以用来进行数据交互、地理位置服务、摄像头调用等。你可以在编写代码的过程中,直接调用这些API接口来完成你的功能。 4. 打包发布:完成开发后,你可以选择将你的uni-app项目打包发布到不同的平台,如App、小程序等。在HBuilderX中,你可以选择对应的平台,然后进行打包操作。 总的来说,使用HBuilderX开发uni-app项目可以让你在一个工具中完成多个平台的开发,极大地提高了开发效率和便利性。你可以通过学习和实践上面的教程,掌握HBuilderX uni-app开发的基本技能,进行跨平台开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值