uniapp 安卓更新
uniapp 安卓更新实现方法
静默更新方案
在manifest.json中配置版本号和下载地址,通过plus.runtime.getProperty获取当前版本号,与服务器最新版本对比。若需要更新,调用plus.runtime.install方法静默安装。
// 检查更新逻辑
uni.getSystemInfo({
success: function(res) {
if (res.platform === 'android') {
const currentVersion = plus.runtime.version
uni.request({
url: 'https://your-api.com/version',
success: (res) => {
if (res.data.version > currentVersion) {
plus.runtime.install(
'https://your-cdn.com/app.apk',
{force: true},
() => console.log('安装成功'),
(e) => console.error('安装失败:', e)
)
}
}
})
}
}
})
用户确认更新方案
创建自定义弹窗提示用户,通过uni.downloadFile下载APK后调用plus.runtime.install。需要处理Android 8.0以上版本的未知来源安装权限。

// 弹窗提示下载
uni.showModal({
title: '发现新版本',
content: '是否立即更新?',
success: (res) => {
if (res.confirm) {
const downloadTask = uni.downloadFile({
url: 'https://your-cdn.com/app.apk',
success: (res) => {
if (res.statusCode === 200) {
plus.runtime.install(res.tempFilePath, {force: true})
}
}
})
}
}
})
注意事项
-
AndroidManifest.xml需添加网络权限和安装权限:
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/> -
对于Android 8.0+设备,需要在代码中动态请求安装权限:

const main = plus.android.runtimeMainActivity() const Intent = plus.android.importClass('android.content.Intent') const Settings = plus.android.importClass('android.provider.Settings') const Uri = plus.android.importClass('android.net.Uri') const intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES) intent.setData(Uri.parse('package:' + main.getPackageName())) main.startActivityForResult(intent, 10086)
版本管理建议
- 服务器端应提供版本检查接口,返回最新版本号和下载地址
- 每次打包时递增manifest.json中的versionCode
- 建议使用CDN加速APK下载
- 对于重大更新可考虑强制更新策略
热更新方案(非整包更新)
通过wgt包实现资源更新,需使用plus.runtime.install安装wgt文件。此方法不适用于原生模块更新。
uni.downloadFile({
url: 'https://your-cdn.com/update.wgt',
success: (res) => {
plus.runtime.install(res.tempFilePath, {
force: false
}, function() {
plus.runtime.restart()
})
}
})






