问题场景:在升级到 R 后,本应用通过 PackageManager 获取其他应用的安装包信息时突然发现获取不到对应信息,但是某些外部应用可以获取到。
原因:在Android R中,Google引入了“包的可见性”概念
1.鼓励最小权限原则,需要与那些应用交互,就申请那些包名。
2.帮助 Google Play 等应用商店评估应用的隐私性和安全性。
说白了就是增强权限限制及提高安全性。
解决:1.首先确保本地配置支持升级到 R 后的相关配置
a.Android Gradle升级到3.6.0或更高版本
dependencies {
classpath 'com.android.tools.build:gradle:3.6.3'
}
b.targetSdkVersion
设为 30
2.在AndroidManifest中添加要交互的应用包名
<queries>
<package android:name="com.android.xxxx"/>
<package android:name="com.android.xxxx"/>
</queries>
至此大功告成!