当前位置: 主页 > 日志 > 个人日记 > 文章

plus.runtime.install安装apk的坑

发布时间: 2022-01-06 18:52:50 作者: 王乐园 浏览次数: 220

在更新uniapp app大版本的时候,下载文件之后,使用plus.runtime.install方法安装会提示解析包出现错误,搞了一下午,才解决

在平时uniapp开发中使用,热更新的时候,通常会使用 plus.runtime.install 方法来安装,

但是在大版本更新的时候也用 plus.runtime.install 方法来进行安装就会出现问题,不过在大版本更新的时候 使用 uni.openDocument 方法就成功了,

简洁版热更/大版本更新代码献上

// 更新应用资源包(wgt文件)
let installWgt = (path,types) => {
	console.log(' 包安装地址', path,types)
	// plus.nativeUI.showWaiting("安装wgt文件...");
	plus.runtime.install(path, {
			force: false
		},
		function(res) { 
			// plus.nativeUI.closeWaiting();
			console.log("安装文件成功!",res); 
			
			uni.removeSavedFile({
				filePath: path,
				complete: function(res) {
					console.log('删除成功', res);
					if(types == ''){
						plus.runtime.restart();
					}else{
						console.log('应用资源更新')
						plus.nativeUI.alert("应用资源更新完成!", function() {
							plus.runtime.restart();
						});
					}
				}
			});
			
		},
		function(e) {
			// plus.nativeUI.closeWaiting();
			console.log("安装wgt文件失败", JSON.stringify(e));
			// plus.nativeUI.alert("安装wgt文件失败[" + e.code + "]:" + e.message);
		});
};

// 下载 wgt文件
let dowWgt = (wgtUrl='') => {
	
	
	if(wgtUrl == ''){
		// 获取版本号
		plus.runtime.getProperty(plus.runtime.appid, function(e) {
			console.log('获取版本号',e)
			// gwt
			setTimeout(() => { 
				appGwtUpdate({
					version:e.version,//大版本
					versionCode:e.versionCode,//小版本
				}).then(res => { 
					console.log('更新包', res)
					if (res.state == 1) {
							let clear =null;
							if(res.data.type == 'version'){ //大版本更新
								console.log('需要大版本更新')
								clear = plus.downloader.createDownload(res.data.download_url, {
									// filename: "_doc/update/"
								}, function(d, status) {
									plus.downloader.clear(clear);
									if (status == 200) { 
										console.log('下载内容',d)
										uni.openDocument({ // 打开安装apk包 
											filePath:d.filename,
										})
										// 这里使用 installWgt 会有问题
										// installWgt(d.filename,wgtUrl); // 安装apk包  
									} else {
										console.log("下载wgt失败!");
									}
								}).start();
								
							}else if(res.data.type == 'versionVCode'){ //小版本更新
							console.log('需要小版本更新')
								clear = plus.downloader.createDownload(res.data.download_url, {
									filename: "_doc/update/"
								}, function(d, status) {
									plus.downloader.clear(clear);
									if (status == 200) {
										installWgt(d.filename,wgtUrl); // 安装wgt包  
									} else {
										console.log("下载wgt失败!");
									}
								}).start();
							}
						
					} else {
						console.log('不需要 热更新')
					}
			
				}).catch(err => {
					console.log(err, 'err11')
				})
			},400)
			
		}); 
	}else{
		plus.downloader.createDownload(wgtUrl, {
			// filename: "_doc/update/"
		}, function(d, status) {
			if (status == 200) {
				uni.openDocument({
					filePath:d.filename,
				})
				// installWgt(d.filename,wgtUrl); // 安装wgt包  
			} else {
				console.log("下载wgt失败!"); 
			}
		}).start();
	}
	
};



注:在这里最后怀疑零时地址不可行,需要转换到本地地址,不过这里没有做测试。


本站文章均为原创,欢迎转载,转载请以链接形式注明出处

本文地址: