DCloud_Android_ST
DCloud_Android_ST
  • 发布:2019-03-16 19:42
  • 更新:2024-04-28 10:49
  • 阅读:32993

针对plus.runtime.install在安卓9.0+上无法执行的解决方案

分类:HTML5+

先确保你的IDE使用的是HBuilderX, 老HBuilder用户请升级HBuilderX

云打包配置

云打包时配置manifest.json将targetSdkVersion改为26或更高 最高建议28。
5+应用:
http://ask.dcloud.net.cn/article/94


uniapp:
https://uniapp.dcloud.io/collocation/manifest

如果提交云端打包后调用plus.runtime.install无法安装apk文件,请添加以下权限

<uses-permission android:name=\"android.permission.INSTALL_PACKAGES\"/>  
<uses-permission android:name=\"android.permission.REQUEST_INSTALL_PACKAGES\"/>

如何添加权限?可参考

TIPS

云打包配置修改完毕后。请重新提交云端打包。生成你的APK,该APK才有调用plus.runtime.install安装APK的能力。

离线打包配置

  1. 将build.gradle中的targetSdkVersion调到26或者更高。

  2. 在Androidmanifest.xml添加provider节点,将里面的io.dcloud.HBuilder改成自己应用的包名。

        <provider  
            android:name="io.dcloud.common.util.DCloud_FileProvider"  
            android:authorities="XXXX.XXX.XX(当前的应用包名).dc.fileprovider"  
            android:exported="false"  
            android:grantUriPermissions="true">  
            <meta-data  
                android:name="android.support.FILE_PROVIDER_PATHS"  
                android:resource="@xml/dcloud_file_provider" />  
        </provider>  
  3. 在Androidmanifest.xml中添加权限。
    注:最新版SDK已经将权限加入基础库里面使用时请下载最新版SDK

    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>  

配置完权限请重新编译生成APK。该APK才有调用plus.runtime.install安装APK的能力。

13 关注 分享
choin 罪途 i***@qq.com 花鸟风月 r***@163.com 我要了明天 天空微算 l***@126.com 小花瓶 l***@qq.com 2***@qq.com 1***@test.com 8***@qq.com

要回复文章请先登录注册

DCloud_Android_ST

DCloud_Android_ST (作者)

回复 1***@qq.com :
hbuilder现在已经不维护了。建议升级HX
2020-03-03 14:06
1***@qq.com

1***@qq.com

还是不行,改成25,26,27,28都不行,权限也加上了,但是如果换成hbuilderx打包的话就可以,问题是我们项目有很多hbuilder的代码,没法切换到 hbuilderx,求解决
2020-03-03 09:15
小兔子乖乖丫

小兔子乖乖丫

回复 天空微算 :
请问你是怎么配置的?
2020-03-01 16:03
c***@163.com

c***@163.com

targetSdkVersion改为25没问题,为啥啊?华为应用市场要求最低26,咋办?
2020-01-03 12:47
天空微算

天空微算

感谢,,可以安装啦~~
2019-12-19 11:16
1***@163.com

1***@163.com

按这个要求配置的,plus.runtime.install()可以安装了
plus.nativeUI.confirm("有新版本,是否更新?", function(e) {
var upr = (e.index == 0) ? "Y" : "N";
if(upr == "Y") {
var wt = plus.nativeUI.showWaiting("下载更新中,请勿关闭");
var url = "下载地址";
var dtask = plus.downloader.createDownload(url, {}, function(d, status) {
if(status == 200) {
var path = d.filename;
plus.runtime.install(path,{},function(){
plus.nativeUI.closeWaiting();
plus.runtime.restart();
},function(err){
console.log("========="+err);
mui.alert("Install failed:" + err);
});

} else { // 下载失败
alert("Download failed:" + status);
plus.nativeUI.closeWaiting();
}
});
dtask.start();
}
}, "提示信息", ["确认", "取消"]);
}
2019-12-10 14:23
q***@163.com

q***@163.com

android:authorities="XXXX.XXX.XX(当前的应用包名).dc.fileprovider" 此处的包名其实不完全准确,应该是build.gradle中 applicationId
2019-09-26 11:26
C***@live.cn

C***@live.cn

关于 @xml/dcloud_file_provider 这个的方法,
这个地方是读取res/xml/dcloud_file_provider.xml 中的数据
这个res是一个和assets同级别的文件夹.
dcloud_file_provider.xml中的数据为
```
<?xml version="1.0" encoding="utf-8"?>
<paths
xmlns:android="http://schemas.android.com/apk/res/android">
<external-path
name="ext_root"
path="/" />
</paths>

```
2019-09-10 20:16
逞英雄

逞英雄

有些机子上 io.dcloud.common.util.DCloud_FileProvider 找不到
java.lang.RuntimeException: Unable to get provider io.dcloud.common.util.DCloud_FileProvider: java.lang.ClassNotFoundException: Didn't find class
2019-08-21 09:25
1***@qq.com

1***@qq.com

我对比了一个能执行安装APP的包,发现他的权限比我多了个请求安装文件包,是不是这个原因导致我的不能安装,请问这个请求安装文件包的权限是在哪里设置的?
2019-08-02 10:57