gradle查找三方包中引入的权限

在进行动态权限时,除了主工程中声明的权限外,很有可能引用的三方sdk中也有特殊权限的声明,那么如何找到某些特殊权限是由哪个sdk引入的,又如何解决呢。

如何查找

1.官网

对于三方sdk,在相应官网都会有详细的使用说明,使用到的权限等,这确实是一种查找方案,但如果三方sdk很多,或者引用的一些小众的sdk,并没有详细的说明,那这种方法就会显的无能为力。因此,我们需要找到另一种更简便的方式。

2.gradle log

gradle在进行打包时,会将主工程、子工程以及三方sdk中的manifest文件中的内容进行合并操作,对于权限的合并,会生成一个相应的Log文件。在 app/build/outputs下,除了常用的 apk和mapping文件夹外,还有一个logs文件夹:

《gradle查找三方包中引入的权限》 image.png 此文件夹下,便是生成的各安装包的mainfest的合并详情。在里面详细记录了每个sdk所要用到的权限(包含普通权限和危险权限)。

《gradle查找三方包中引入的权限》 image.png 如图所示,可以清楚的知道,vds-android-agent:1.1.2这个sdk引入的READ_PHONE_STATE 这个危险权限。

如何解决

1. 更新sdk

想要移除sdk中的相应权限,尤其是危险权限,首先是还是去官网上,更新到最新的sdk,看看相应的说明中,是否已经把该危险权限已去除。

2. tools:node 属性

这个标签指定了manifest中冲突属性的合并规则或删除不必要的元素和属性,很明显,对于三方中的权限,我们是要进行删除的

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

tools是一个比较强大的功能,除了指定permission外,对于activity的属性、service以及application等中的属性都可指定,而除了remove,还有replace、strict等,具体可见官网:https://developer.android.com/studio/build/manifest-merge?hl=zh-cn

注意:在使用上述tools:node=”remove”方式移除危险权限时,一定要保证sdk无此权限也能正常运行且不影响功能,否则的话,还需在应用中申请此权限。

参考:
https://medium.com/glucosio-project/how-libraries-can-silently-add-permissions-to-your-android-app-620911d7de6c
https://developer.android.com/studio/build/manifest-merge?hl=zh-cn

    原文作者:baifanger
    原文地址: https://www.jianshu.com/p/0dfe7db7ecde
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞