1

我有一个库项目和 2 个应用程序项目。我在库项目的 AndroidManifest.xml 中声明了活动,并manifestmerger.enabled设置了库清单与两个应用程序清单合并。

我想覆盖应用程序清单中的活动属性。具体来说,我在库项目的清单中有以下声明:

<activity
  android:name=".sample.Activity1"
  android:hardwareAccelerated="true"
  .... />

我想将hardwareAccelerated其中一个应用程序项目中的属性覆盖为false.

在应用程序清单中放置相同的活动声明但使用 `hardwareAccelerated="false" 会在构建时导致错误:

[mergemanifest] Merging AndroidManifest files into one.
[mergemanifest] Merging manifests from project and 4 libraries.
[mergemanifest] Error: [AndroidManifest.xml:32, AndroidManifest.xml:57] Trying to merge incompatible /manifest/application/activity[@name=.sample.Activity1] element:

显然,manifestmerger 只允许您合并清单文件,而没有覆盖声明的机制。给出我试图实现的用例,有什么替代方案可以让我为一个活动指定不同的值,而不必在两个应用程序项目中重复活动声明?

4

1 回答 1

6

manifest merger如果您有冲突,则当前失败,AndroidManifests并且无法忽略冲突。

在您的情况下,最简单的解决方法是声明一个布尔资源,告知是否为Activity.

图书馆项目:

<bool name="hardware_acceleration_enabled">true</bool>

现在你只需要在库项目中声明你的Activity,并在真实项目中覆盖资源值:

图书馆项目:

<activity
    android:name=".sample.Activity1"
    android:hardwareAccelerated="@boolean/hardware_acceleration_enabled"
    .... />

真实项目:

<bool name="hardware_acceleration_enabled">false</bool>
于 2013-04-03T06:13:40.763 回答