问题描述
我发现了一些有关tools:replace
的错误的问题,但是在Internet上却找不到它的作用。
我确实找到了tools attributes reference,看来这是一个过时的属性,不再记录。
有人可以解释它的作用吗?例如,
发现tools:replace="android:label,android:supportsRtl,android:allowBackup">
作为application
标签的属性。在相同的application
xml标记中,指定了android:label
,android:supportsRtl
和android:allowBackup
,所以我只能猜测它将覆盖这些属性如果它们是嵌套在activity
标记内的application
标记中指定的。就像我期望的application
属性一样,此功能似乎没有用,如果没有设置,则默认情况下设置其子级属性。
编辑:感谢您在答案中链接the docs。我个人认为文档非常全面,甚至提供了有关何时使用此功能的示例。不幸的是,我的搜索引擎无法为我找到这个。该链接实际上是首先在Google上发布的,但在DuckDuckGo上却丢失了。
解决方法
tools:replace
是一个属性标记,可以通过合并项目reconfigure中的特定清单设置(构建变体)来flavors主清单文件。
假设您在主清单中有下一个节点,其中特定的Activity定义为已导出:
<activity android:name="com.example.ActivityTest"
android:exported="true">
...
但是对于特定的风味(构建变体),不应导出相同的Activity。因此,您可以在flavor文件夹中定义一个准系统清单文件,并添加具有replace属性的节点:
<activity android:name="com.example.ActivityTest"
android:exported="false"
tools:replace="android:exported">
...
在 Active Build Variant 中选择目标风味时,构建系统将合并两个清单,并在主清单节点中将android:exported
属性替换为flavor的属性。
总而言之,当您具有多个项目类型时,可以使用此属性标记,并且每个属性都需要为主清单文件中定义的现有节点定义不同的属性。
请注意,您也可以通过添加tools:node="replace"
来完全替换整个节点。