k***@126.com
k***@126.com
  • 发布:2025-11-25 15:22
  • 更新:2025-11-25 20:15
  • 阅读:19

安卓端开发自动更新功能 HBuilder X 4.84云打包 没问题 离线打包就不能自动安装更新

分类:HBuilderX

 showUpdateDialog() {  
        uni.showModal({  
            title: "发现新版本",  
            content: this.updateDescription || "修复已知问题,推荐更新。",  
            confirmText: "立即更新",  
            showCancel: !this.isForceUpdate,  
            cancelText: this.isForceUpdate ? "退出应用" : "取消",  
            success: res => {  
                if (res.confirm) {  
                    this.startUpdate();  
                } else if (this.isForceUpdate) {  
                    plus.runtime.quit();  
                }  
            }  
        });  
    }  

    startUpdate() {  
        if (this.platform === "android") {  
            this.downloadAndInstallApk();  
        } else {  
            uni.showToast({ title: '仅支持 Android', icon: 'none' });  
        }  
    }  

    downloadAndInstallApk() {  
        // 使用系统浏览器或下载管理器下载  
        plus.runtime.openURL(this.downloadUrl);  

        // 或者使用 plus.downloader 创建系统下载任务  
        const dtask = plus.downloader.createDownload(  
            this.downloadUrl,  
            { filename: '_downloads/app_update.apk' },  
            (download, status) => {  
                if (status === 200) {  
                    console.log("下载完成",download.filename,download);  
                    // 系统会自动提示安装  
                    plus.runtime.install(plus.io.convertLocalFileSystemURL(download.filename),{},{},function(error){  
                        uni.showToast({  
                            title: '安装失败',  
                            mask: false,  
                            duration: 1500  
                        });  
                    })  
                } else {  
                    uni.showToast({  
                        title: '更新失败',  
                        mask: false,  
                        duration: 1500  
                    });  
                }  
            }  
        );  
        dtask.start();  
    }
```  simpleDemo/manifests/AndroidManifest.xml  中已经添加   
  <!-- 应用安装权限(低版本兼容)-->  
    <uses-permission android:name="android.permission.INSTALL_PACKAGES" />  

    <!-- 安装未知来源应用权限(高版本必需)-->  
    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />  
在HBuilder X的manifest.js  的安卓/IOS权限配置中也添加了  
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>  
<uses-permission android:name="android.permission.INSTALL_PACKAGES"/>   
请问一下这是什么问题 为什么会这样.
2025-11-25 15:22 负责人:无 分享
已邀请:
Ask小助手

Ask小助手

根据您描述的问题,云打包能正常更新而离线打包不能,主要原因在于离线打包时权限配置未完全生效及Android系统限制。

关键点分析:

  1. 权限配置差异:云端打包会自动添加INSTALL_PACKAGESREQUEST_INSTALL_PACKAGES权限,但离线打包需要手动在原生工程中确认权限是否真正写入APK。您在manifest.json添加的权限可能未被离线打包流程正确处理。

  2. Android系统限制:从Android 8.0开始,INSTALL_PACKAGES权限仅限系统应用使用。普通应用只能使用REQUEST_INSTALL_PACKAGES权限触发系统安装界面,无法完全静默安装。您的代码直接调用plus.runtime.install()在离线环境下可能因权限不足失败。

  3. 离线打包特殊性:离线打包需在原生工程环境中配置(见Android平台离线打包参考),仅修改manifest.json不够,还需检查:

    • 生成的APK是否包含权限(用APK分析工具验证)
    • Android 8.0+设备需在系统设置中手动开启"未知来源安装"权限

解决方案:

  1. 改用系统安装流程:删除plus.runtime.install()调用,下载完成后通过plus.runtime.openURL("file://"+download.filename)触发系统安装界面
  2. 确保离线打包时原生工程的AndroidManifest.xml最终包含这两个权限
  3. 参考安卓App配置-权限配置重新检查离线打包配置

注意:完全自动安装(无需用户确认)在非系统应用中无法实现,这是Android系统安全策略决定的。

内容为 AI 生成,仅供参考
k***@126.com

k***@126.com (作者)

我返编译了 自己打的apk 结果在AndroidManifest.xml中看到了
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
<uses-permission android:name="android.permission.INSTALL_PACKAGES"/>
这两个权限 然后我就又迷茫了 还是无法自动安装 plus.runtime.openURL("file://"+download.filename)也不触发触发系统安装界面

要回复问题请先登录注册