从合并清单中覆盖AndroidManifest.xml属性

eje*_*jel 1 android android-manifest android-activity

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

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

<activity
  android:name=".sample.Activity1"
  android:hardwareAccelerated="true"
  .... />
Run Code Online (Sandbox Code Playgroud)

我想覆盖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:
Run Code Online (Sandbox Code Playgroud)

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

Vla*_*nov 6

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

在您的情况下,最简单的解决方法是声明一个布尔资源,告诉您是否启用了硬件加速Activity.

图书馆项目:

<bool name="hardware_acceleration_enabled">true</bool>
Run Code Online (Sandbox Code Playgroud)

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

图书馆项目:

<activity
    android:name=".sample.Activity1"
    android:hardwareAccelerated="@boolean/hardware_acceleration_enabled"
    .... />
Run Code Online (Sandbox Code Playgroud)

真实项目:

<bool name="hardware_acceleration_enabled">false</bool>
Run Code Online (Sandbox Code Playgroud)