禁用依赖权限

Disable dependency permissions

我目前面临以下问题:

我开发了应用程序 'A',它使用权限 1、2、3 并使用第 3 方库 'B' 作为依赖项(使用 maven & gradle 添加)。

库'B'使用权限4和5。现在构建应用程序时,清单合并将权限4和5添加到应用程序'A'。

如何防止这种情况发生并且在最终清单中只有权限 1、2 和 3?

我的第一个猜测是使用此处显示的合并标记之一:http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger#TOC-Markers

您需要使用Selector

Each tools:node or tools:attr declaration can be augmented by a tools:selector attribute which is contextual information on whether or not the merging strategy should be applied to the current lower priority XML description. For instance, this is useful when removing a permission only if coming for one particular library as opposed to any library:

<permission
      android:name="permissionOne"
      tools:node="remove"
      tools:selector="com.example.lib1">

根据您的初步要求,它将是下一个

<!--suppress AndroidDomInspection -->
<uses-permission
    tools:node="removeAll"/>

但请记住,所有其他 <uses-permissions/> 都将被删除。

如您所知,所有库都有一个清单文件并将合并在一起。 您可以通过以下方式删除某个库中的权限:

tools:node="remove"

删除位置权限的示例:

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