Android studio 渐变合并包装器/子模块';将Android清单放入主模块';旅客名单

Android studio 渐变合并包装器/子模块';将Android清单放入主模块';旅客名单,android-studio,android-gradle-plugin,Android Studio,Android Gradle Plugin,我的项目中有以下模块,我无法让Gradle正确合并Android清单: myproject_alpha myproject_beta myproject_lib myproject_release *_lib模块是包含所有源代码的项目的主模块。其他3个模块是“包装器模块”,对内容提供商的“权限”参数进行轻微修改,更改*_lib模块清单中指定的活动意图过滤器内的“数据”字段,并启用myproject_发布模块中不存在的一些其他活动 目前,我在alpha(或beta或release)和lib之间有

我的项目中有以下模块,我无法让Gradle正确合并Android清单:

myproject_alpha
myproject_beta
myproject_lib
myproject_release
*_lib模块是包含所有源代码的项目的主模块。其他3个模块是“包装器模块”,对内容提供商的“权限”参数进行轻微修改,更改*_lib模块清单中指定的活动意图过滤器内的“数据”字段,并启用myproject_发布模块中不存在的一些其他活动

目前,我在alpha(或beta或release)和lib之间有gradleandroid清单合并错误。例如,在lib和alpha之间,我看到以下两个渐变错误:

Trying to merge incompatible /manifest/application/provider[@name=com.myproject.contentprovider.MyProvider] element:
  <provider
--    @android:authorities="com.myproject.alpha.provider"
  <provider
++    @android:authorities="com.myproject.lib.provider"

:myproject_alpha:processDebugManifest FAILED

Trying to merge incompatible /manifest/application/activity[@name=com.myproject.activity.LoginActivity] element:
  <activity
  @android:name="com.myproject.activity.LoginActivity"
          @android:name="android.intent.action.MAIN">
          @android:name="android.intent.category.LAUNCHER">
  <intent-filter>
          @android:name="android.intent.action.VIEW">
          @android:name="android.intent.category.BROWSABLE">
          @android:name="android.intent.category.DEFAULT">
      <data
--            @android:host="myhost.test.com"
  <activity
  @android:name="com.myproject.LoginActivity"
          @android:name="android.intent.action.MAIN">
          @android:name="android.intent.category.LAUNCHER">
  <intent-filter>
          @android:name="android.intent.action.VIEW">
          @android:name="android.intent.category.BROWSABLE">
          @android:name="android.intent.category.DEFAULT">
      <data
++            @android:host="myhost.com"

:myproject_alpha:processDebugManifest FAILED
正在尝试合并不兼容的/manifest/application/provider[@name=com.myproject.contentprovider.MyProvider]元素:
如果检查,您将看到
mergeNewOrEqual()
方法不够聪明,无法合并不相同的元素。不幸的是,这是用于合并提供者和活动的方法


因此,唯一的“解决方案”是要么只在一个位置定义元素,要么在两个定义中给它们相同的签名。

声明清单的标题,如下所示:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
此信息来自:

我对上面的答案有疑问,因为当我编译时,我总是会收到消息

无效指令“合并”,有效指令为: 拆卸、更换、紧固

我发现在@swooby answer中导入了工具,然后在
标记中为我要替换的活动添加
工具:node=“merge”
,然后添加

<intent-filter tools:node="remove">
                <action android:name="android.intent.action.MAIN"/>

我不希望有启动器图标的活动的启动器


希望这能有所帮助。

谢谢你的链接,它很有用。我们从外部团队继承了代码,因此不确定他们是否能够按原样构建代码。目前,我编辑了所有清单以使用相同的签名,在未来的版本中,我将重组代码库以更好地利用gradle。请解释“不起作用”。合并的清单是什么样子的?请提供子清单和超级清单的副本。它将显示:正在尝试合并不兼容的/manifest/application/activity[@name=#provider#]元素:您正在尝试合并哪种类型的元素?请提供清单的一个片段。您的解决方案无效:我想合并android:uiOptions,bug Failed谢谢您的更新。以前的解决方案一定有点过时了。通过检查生成的中间清单,我验证了这在我使用它的两种产品风格中都能正常工作。
<intent-filter tools:node="remove">
                <action android:name="android.intent.action.MAIN"/>