美文网首页
gradle查找三方包中引入的权限

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

作者: baifanger | 来源:发表于2018-05-02 22:14 被阅读0次

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

    如何查找

    1.官网

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

    2.gradle log

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

    image.png 此文件夹下,便是生成的各安装包的mainfest的合并详情。在里面详细记录了每个sdk所要用到的权限(包含普通权限和危险权限)。
    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

    相关文章

      网友评论

          本文标题:gradle查找三方包中引入的权限

          本文链接:https://www.haomeiwen.com/subject/omgcrftx.html