×

注意!页面内容来自https://blog.csdn.net/qq285744011/article/details/141032188,本站不储存任何内容,为了更好的阅读体验进行在线解析,若有广告出现,请及时反馈。若您觉得侵犯了您的利益,请通知我们进行删除,然后访问 原网页

uniapp离线打包热更新失败-AndroidStudio离线打包apk后无法下载打开-热更新失败-plus.runtime.install失败

效果图

仅安卓

前言

1.plus.runtime.install一直fail(20240808)uni.openDocument可以打开本地apk文件
2.权限问题需小心

跑通前提

1.先确定apk地址有效,浏览器中手动下载可安装
2.确保已添加离线打包AndroidStudio的“android.permission.INSTALL_PACKAGES”权限
   参考https://uniapp.dcloud.net.cn/tutorial/app-permission-android.html
3.

核心代码

const downloadTask = uni.downloadFile({
	url: 'https://xxxx/demo.apk',
	success: (res) => {
		if (res.statusCode === 200) {
			runApk(res.tempFilePath)
		}
	}
})

downloadTask.onProgressUpdate((res) => {
	// 总大小 - 字节
	// res.totalBytesExpectedToWrite
	
	// 已下载 - 字节
	// res.totalBytesWritten

	// 进度 - 百分比 0-100
	// res.progress
})


const runApk = (local_path = '') => {
	uni.openDocument({
		filePath: local_path,
		showMenu: true,
		success: (res) =>{
			// 打开成功
		},
		fail: (e) =>{
			// 打开失败
		},
	})
}

题外话

1.plus.io.convertLocalFileSystemURL( uni.downloadFile结果.tempFilePath )获取绝对路径,

在uni.openDocument中无效 - 不执行也不报错

2.plus.io.LocalURL(*) 什么参数都不执行,也不报错

3.uniapp打包后图片偶尔缺失 - 因为电脑可用内存不够,项目编译不够内存空间,造成偶尔的static资源没法完整打包进去

plus.runtime.install 安装失败,并且失败回调的参数 error一直为null
https://ask.dcloud.net.cn/question/57909
https://www.html5plus.org/doc/zh_cn/runtime.html#plus.runtime.install
https://blog.csdn.net/lzz123987csdn/article/details/136730680
加了离线打包的权限也不行 <uses-permission android:name="android.permission.INSTALL_PACKAGES" />
https://uniapp.dcloud.net.cn/tutorial/app-permission-android.html    

// 获取应用信息 - uniapp获取manifest文件内容
// https://www.html5plus.org/doc/zh_cn/runtime.html#plus.runtime.getProperty
const getAppInfo = async () => {
    // APP更新检查 > 获取应用信息
    return new Promise((resolvereject) => {
        plus.runtime.getProperty( plus.runtime.appid( wgtinfo ) => {
            resolve(wgtinfo)
        })
    })
}
/**
 * APP-PLUS下载地址
 * 
 * 处理:uni.downloadFile 》 success 》 res.tempFilePath
 * 获得:_doc/uniapp_temp_172308307703610/download/expert-v1.0.2.apk
 * 
 * 处理:plus.io.convertLocalFileSystemURL(res.tempFilePath)
 * 获得:/storage/emulated/0/Android/data/com.amd.expert/apps/__UNI__78B9194/doc/uniapp_temp_172308307703610/download/expert-v1.0.2.apk
 * 参考:https://www.html5plus.org/doc/zh_cn/io.html#plus.io.convertLocalFileSystemURL
 * 
 * 处理:plus.io.LocalURL( convertLocalFileSystemURL结果 )
 * 获得:file:///storage/emulated/0/Android/data/com.amd.expert/apps/__UNI__78B9194/doc/uniapp_temp_172308307703610/download/expert-v1.0.2.apk
 * 参考:https://www.html5plus.org/doc/zh_cn/io.html#plus.io.LocalURL
 */

推荐

baidu.rudon.cn 没有广告的百度首页

确定要放弃本次机会?
福利倒计时
: :

立减 ¥

普通VIP年卡可用
立即使用
参与评论 您还未登录,请先 登录 后发表或查看评论
### UniApp 离线打包后实现热更新的方法 #### 配置服务器端环境 为了支持应用的热更新功能,需先搭建好服务端环境。通常情况下,开发者会选择使用DCloud提供的MUI云平台或其他第三方服务商来部署云端资源。这一步骤确保了应用程序能够连接到指定的服务地址并获取最新的页面逻辑与样式文件。 #### 修改`manifest.on`配置项 在项目的根目录下编辑`manifest.on`文件,在其中加入如下字段用于定义远程调试以及版本控制的相关参数[^1]: ```on { ... "app-plus": { "distribute": { "remoteDebugging": true, "update": { "checkOnStart": true// 启动时自动检测新版本 "url": "http://yourserver.com/update",// 更新包下载链接 "interval": 86400 // 版本检查间隔时间(秒),这里设置为一天一次 } }, ... } } ``` #### 处理签名一致性问题 由于离线打包过程中涉及到APK的安全性和完整性验证,因此必须保证本地开发环境中使用的密钥同正式发布的保持一致。如果遇到因签名不匹配而导致无法正常启动的情况,则应仔细核对keystore路径及其对应的密码等信息是否填写无误[^3]。 #### 应用内集成热修复机制 通过调用plus.runtime类下的API接口可以方便地完成在线升级操作。当监测到有可用的新版程序时会弹窗提示用户确认安装;而一旦同意则后台便会静默下载补丁包并在下次重启之后生效显示最新界面效果[^2]: ```javascript if ( plus.os.name === 'Android' ) { var wt = new plus.nativeObj.ProgressToast('正在加载...'); wt.show(); function checkUpdate() { plus.runtime.getProperty(plus.runtime.appid,function(widgetInfo){ var url = `http://${widgetInfo.host}/update?version=${encodeURIComponent(JSON.stringify({ version : widgetInfo.version, appid : widgetInfo.id }))}`; fetch(url).then(res=>res.on()).then(data=>{ if (!data.code || data.code !== 200) return; let diffUrl = `${data.data.diff_url}&platform=android`; downloadAndInstall(diffUrl); }).catch(err => console.error(err)).finally(() => wt.hide()); }); } function downloadAndInstall(patchFileUrl){ plus.downloader.createDownload( patchFileUrl,{}, (download,filename)=>{ installPatch(filename); } ).start(); } function installPatch(filePath){ plus.runtime.install( filePath,{ force:true },()=>{ alert('更新成功!'); location.reload(); },error=>{ alert(`更新失败:${JSON.stringify(error)}`); } ); } } // 定期执行版本号对比任务 setInterval(checkUpdate 1 * 60 * 1000); // 每分钟检查一次是否有新的更新 ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Rudon滨海渔村

花的越多,赚得越多...

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

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

打赏作者

实付
点击重新获取
扫码支付
< type="text/css">
钱包余额 0

抵扣说明:

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

余额充值