【问题标题】:It is safe to delete library module AndroidManifest before release compiling?在发布编译之前删除库模块 AndroidManifest 是否安全?
【发布时间】:2015-08-23 20:34:27
【问题描述】:

我有一个带有虚拟清单的库模块(它是我的应用程序清单的精确副本,但包名称已更改),我在过去(eclipse)使用它来测试没有应用程序模块的库。现在在 android studio 中,我可以使用断点测试和调试使用我的应用程序模块启动它的库,因此不再需要库的虚拟清单。

我可以在发布编译之前删除库清单吗?清单合并给我带来了很多问题,在清单上重复了很多东西,所以如果可能的话,我最好删除库模块。

删除它是否安全,否则将来会给我带来麻烦?

谢谢

【问题讨论】:

  • AFAIK,您需要一个清单,但除了根 <manifest> 元素和 package 属性之外,清单中不需要任何其他内容。
  • 嗯,我可以删除所有内容(只留下 元素与包)并安全地解决我的清单合并问题吗?
  • 我无法知道,因为我不知道库清单中的内容、应用程序清单中的内容以及库和应用程序的代码库中的内容。你需要确保你的合并清单包含你需要的一切,但只有你能做到,我不能。
  • 在哪些情况下需要Android项目的库模块清单中的内容?
  • 嗯,从逻辑上讲,库模块的清单应该反映库中的内容。如果库需要 X 权限,则 <uses-permission> 元素应该在库中。如果库发布FooActivity,并且默认情况下所有使用该库的应用都应使用该活动,则库的清单应具有<activity> 元素。等等。应用程序的清单应该包含应用程序中的内容(例如,不是来自库的内容)或覆盖库认为正确但应用程序没有的内容。

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


【解决方案1】:

好吧,我将发布一个用 CommonsWare 的 cmets 制作的答案(谢谢!)

基本上,在库中使用的活动、接收器等,应该只在库中声明,而不是在应用程序模块中,清单合并会将它们添加到最终清单中。

它适用于活动,但不适用于接收者、提供者和特殊权限,例如需要应用程序包名称作为元素内的属性的 C2DM。为什么?因为这些元素在最终的 manifest 中合并为与库相同的包名,而不是应用程序的包名,并且所有三个元素都需要具有应用程序包名。对于那些,我们应该使用清单占位符:http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger#TOC-Placeholder-support

感谢 CommonsWare

【讨论】:

    猜你喜欢
    • 2012-12-08
    • 2012-11-10
    • 2019-03-02
    • 2017-09-12
    • 2013-03-29
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    • 2021-12-17
    相关资源
    最近更新 更多