plus.runtime.install在android10无效
在 Android 10 中,使用 plus.runtime.install
方法来进行动态安装应用或进行其他操作可能会失效。这是因为从 Android 10 开始,操作系统在安全性和隐私方面做了很多改进,特别是与应用安装相关的权限变更。
在 Android 10(API 级别 29)中,plus.runtime.install
方法的功能可能受到系统的限制,尤其是对于动态安装应用的功能。以下是一些关键的原因和解决方案:
1. Scoped Storage 政策
Android 10 引入了 Scoped Storage 政策,限制了应用对存储的访问权限。它只允许应用访问特定的文件和目录,这对于以往通过 install
等方法操作系统存储的功能产生了影响。
解决方案:
- 确保应用有适当的权限。例如,使用
MANAGE_EXTERNAL_STORAGE
权限来访问广泛的存储,但这需要应用是 系统应用 或 被特殊授权。 - 如果你只是需要安装或更新应用,可能需要依赖 文件选择器 或其他官方的安装机制来进行安装,而不是直接通过
install
API。
2. Install API 的变更
在 Android 10 之后,Google 增强了系统的安装过程,并对通过程序动态安装应用的能力进行了更严格的管理。应用需要更多的用户授权才能进行安装。对于普通的应用,不能直接通过程序启动安装过程。
解决方案:
-
使用适合的权限:你需要请求 安装权限 (
REQUEST_INSTALL_PACKAGES
),但该权限只能在特定场景下使用,并且有时只能由系统级应用或已经获得相关权限的应用调用。你可以在
AndroidManifest.xml
中添加如下声明:<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
-
用户授权:在大多数情况下,Android 需要用户授权才能进行安装。因此,你可能需要通过标准的
Intent
启动安装活动,而不是使用plus.runtime.install
。例如: -
var intent = new plus.android.Intent("android.intent.action.VIEW"); intent.setDataAndType(Uri.parse("file://" + path), "application/vnd.android.package-archive"); plus.android.runtimeMainActivity().startActivity(intent);
3. 安装限制
如果你希望通过应用程序直接安装 APK,通常需要用户手动去设置中启用 安装来自未知来源的应用 权限。Android 10 对这项操作进行了更多限制,因此可能需要通过明确的界面提示用户,手动授权安装权限。
解决方案:
- 提示用户到 设置 中打开 允许安装未知来源应用 权限:
- 进入 设置 -> 应用与通知 -> 特殊应用权限 -> 安装未知应用。
- 用户需要手动授权你的应用可以从文件系统中直接安装 APK。
4. H5 插件兼容性
如果你使用的是 DCloud 的 H5 插件(例如在 UniApp 或其他类似的框架中),需要确保插件和系统版本兼容。插件可能没有完全适配 Android 10 的变化,因此需要检查是否有更新的版本,或考虑使用官方的替代方案。
5. 适配新权限模型
在 Android 10 及以上版本,应用可能需要适配新的权限模型,尤其是与文件系统、安装和网络相关的权限。检查你的应用是否已经处理了 Android 10
新增的权限和行为限制。
总结与建议:
- 确认权限:在
AndroidManifest.xml
中确保声明了所需的权限,如REQUEST_INSTALL_PACKAGES
。 - 使用标准 API:考虑使用标准的 Android 安装机制,使用
Intent
来触发 APK 安装。 - 适配 Scoped Storage:确保应用遵循 Android 10 的 Scoped Storage 规则,特别是文件访问方面。
- 用户授权:在用户安装或授权过程中提供明确的指引,确保用户开启 安装来自未知来源应用 的权限。