2

最近我用这个 gradle 代码添加了 HMS PushKit SDK:

implementation "com.huawei.hms:push:5.0.4.302"

在那之后,我注意到我的应用程序已添加到有权安装来自未知来源的应用程序的应用程序列表中(特殊权限)。我检查了AndroidManifest.xml这个库的一个依赖项(com.huawei.hms.base.availableupdate)的文件,发现它有这个特殊权限:

<!-- If it is Android 8.0, the targetSdkVersion of the application compilation configuration>=26, please be sure to add the following permissions --> 
<uses-permission  android:name="android.permission.REQUEST_INSTALL_PACKAGES" />

那么为什么 PushKit 需要这个权限呢?我不希望我的应用使用此权限。如果我用这段代码删除它会有问题(崩溃):

<uses-permission
        android:name="android.permission.REQUEST_INSTALL_PACKAGES"
        tools:node="remove"/>
4

2 回答 2

4

更新

取消该权限,华为手机不受影响,但非华为手机可能无法安装HMS Core APK。

会不会因为升级失败而导致我们的应用程序崩溃?--不会,只会使应用程序无法自动升级,必须卸载并下载新版本。


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

此权限用于更新 HMS Core 和推送套件 APK。Push kit 强烈依赖于 HMS Core 和 push kit APK。如果不授予该权限,可能会导致应用安装失败,导致HMS和push kit的APK升级失败。

因此,此权限是强制性的。

于 2021-02-01T01:16:52.070 回答
1

android.permission.REQUEST_INSTALL_PACKAGES 是一种权限,允许 Android 上的框架或组件引用外部(最常见的 Maven)存储库,以便通过远程安装源代码来最小化最终用户的最终安装 apk 大小,而不是将其全部打包在同一个 apk 中(用于初始下载)。

请注意此权限,因为如果启用它,不是在您的应用程序上,而是在依赖项上,它将被拒绝。这是因为如果您的依赖项存在任何安全问题,当您将应用程序包上传到商店时,谷歌将无法获取。这是因为源代码的远程下载,而不是被打包在谷歌可以剥离的同一个 apk 中。

结果 google 不会接受这个 apk,它会被拒绝(只是因为 google 不知道,也无法知道最终最终用户包中是否包含任何恶意代码)。

你可以尝试 fork 这个库,并从清单中删除权限,但是你会遇到缺少方法的异常。

在这种情况下,您最好的选择是找到另一个不从远程 maven 存储库安装额外源代码的库,以避免 google play store 拒绝。

查看这个包,它看起来像是一个构建在 Android SDK 之上的 SDK。如果有办法让您解决这个问题,直接在 google android sdk 上工作,同时让客户不会注意到,那应该没问题。归根结底,只要它有效,客户就不会关心您是如何做到的。

于 2021-01-31T09:17:14.853 回答