【问题标题】:Customize AndroidManifest in different build types在不同的构建类型中自定义 AndroidManifest
【发布时间】:2013-12-22 16:41:29
【问题描述】:

我想在不同的构建类型中自定义 AndroidManifest。例如在调试模式下,我只想导出一个 Activity。

假设主清单:

/main/AndroidManifest.xml

<application>
    <activity
        android:name="com.example.MainActivity" />
</application>

调试清单:

/debug/AndroidManifest.xml

<application>
    <activity
        android:name="com.example.MainActivity"
        android:exported="true" />
</application>

示例清单(与调试相同):

/example/AndroidManifest.xml

<application>
    <activity
        android:name="com.example.MainActivity"
        android:exported="true" />
</application>

在调试清单中我得到Duplicate registration for activity com.example.MainActivity

这就是我创建示例构建类型的原因。

/build.gradle

android {
    buildTypes {
        example.initWith(buildTypes.debug)
    }
}

但它也不起作用。

[AndroidManifest.xml:17, AndroidManifest.xml:4] Trying to merge incompatible /manifest/application/activity[@name=com.example.MainActivity] element:
  <activity
--    @android:name="com.example.MainActivity">
--</activity>
--(end reached)
  <activity
++    @android:exported="true"
++    @android:name="com.example.MainActivity">
++</activity>

我想知道这是一个错误、缺少功能(将在未来实现)还是我做错了什么?

我知道我可以在发布和调试中提供不同的清单(没有/main 中的清单),但我认为这不是一个好的解决方案。

编辑: 到目前为止的解决方案是在资源中定义 bool 并在主清单中使用它。 在调试资源中,布尔值将是 true,而在版本 false 中。这个解决方案似乎比重复的清单好得多,但问题仍然存在。

【问题讨论】:

    标签: android android-manifest android-gradle-plugin


    【解决方案1】:

    从 gradle 插件 0.10 开始,它终于得到支持。有关新清单合并的更多信息:http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger

    目前(gradle plugin 0.10)它需要build.gradle中的这个额外配置

    android {
     useOldManifestMerger false
    }
    

    【讨论】:

      【解决方案2】:

      我知道我可以在发布和调试中提供不同的清单(无需 /main 中的那个),但我认为这不是一个好的解决方案。

      不幸的是,there's a limitation 在合并清单时,您无法在主清单和构建类型清单中定义相同的东西(活动、服务、接收器等)。解决方案是在主清单中仅定义非构建类型特定的内容,并在构建类型清单中定义其他所有内容。

      【讨论】:

      • 您所指的答案是一年,并说“此时此刻”。在我问这个问题之前,我已经看到了这个话题,anit 关注的是 而不是活动的参数,但它确实似乎仍然没有实现而不是一个错误。
      • 限制不限于意图过滤器。我认为这是他们当前使用的 ManifestMerger 类,如果它们相同,它只会合并名称相似的活动。
      猜你喜欢
      • 1970-01-01
      • 2019-02-11
      • 2021-08-25
      • 1970-01-01
      • 2016-07-06
      • 2017-05-25
      • 1970-01-01
      • 2014-08-03
      • 1970-01-01
      相关资源
      最近更新 更多