[Android] 应用上架错误:Apps using this permission in an APK are required to have a privacy policy set.

解决幽灵权限问题

1. 问题描述

  • 工作中遇到这样一个问题,应用上架的时候提示使用了 READ_PHONE_STATE 权限,但是实际上在 AndroidManifest.xml 中并没有声明这个权限。提示信息如下:

Your app has an APK with version code 29 that requests the permission:android.permission.READ_PHONE_STATE.Apps using this permission in an APK are required to have a privacy policy set.

  • 这就很奇怪了,明明没有声明和使用这个权限,但是却收到这样的警告。首先先确认一下是不是真的包含了这个权限吧。

2. 确定问题

  • 打开 app/build/outputs/logs/,点开其中一个,以 manifest-merger-debug-report.txt 为例,在这个文件搜索 READ_PHONE_STATE ,确实出现了这个权限的搜索结果,紧随其后的应该就是引起这个问题的相关原因,在这里也可以看出是和我使用的 vlc 库有点关系,因为我的 org.videolan 包下就是vlc,大家可以根据自己的情况进行排查。

在这里插入图片描述

  • 于是我再用 APK Messenger 这个工具查看了一下,结果确实显示应用申请了这个权限。

在这里插入图片描述

  • 看来问题确实是因为应用中申请了这个权限。

3. 解决办法

  • 全局搜索项目中其他使用的 module 也没有这个权限的身影,一通搜索下来才找到能够解决我这个情况的答案。

原答案地址:http://www.voidcn.com/article/p-rwdsssbq-bvu.html

  • 大意就是有些引用的第三方库没有指定 minSdkVersion 和 targetSdkVersion,而当这两个值都低于4的时候系统就会自动添加这个权限都应用中。虽然不明白为什么,但是确实很坑爹。
  • 根据前面的方法找到的引起这个原因的库我已经确定是哪一个了,但是这个库我没有源码,只是一个 aar 文件,没办法重编一个。不过 aar 文件也很好解决,先把后缀改成 zip ,然后修改压缩包里的 AndroidManifest.xml 文件,增加 minSdkVersion 和 targetSdkVersion,改完再把后缀改回 aar 就可以了。
  • 重新编译,再次用 APK Messenger 查看,果然没有那个权限了。

在这里插入图片描述

  • 如果是有源码或者可以从远程拉一份代码的话,直接重新编一份就可以。还有一种方法就是在AndroidManifest.xml 中配置 <uses-sdk tools:overrideLibrary=“xxx.xxx.xxx”/> 这个属性,在里面写minSdk 和 targetSdk ,但是我没有验证过这种办法是否确实有效。
  • 幽灵权限这个名字是在搜解决办法的时候看到一个回答里提出的,但是现在找不到那个回答了就没贴上。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值