39

我在这里读过类似的问题,但仍然不清楚一些事情。使用库项目意味着我的整个项目将有两个清单——一个用于库,另一个用于“主”应用程序项目——我不清楚其中有什么或是否有一些冗余。

我正在开发一个具有“精简”和“付费”版本的应用程序小部件,因此几乎所有代码都将包含在库项目中。作为一个小部件,库将至少有一个接收器、一个服务、一个配置活动,以及一些其他活动。那么这些组件的完整声明——包括意图、过滤器等——应该在哪里声明呢?它们是在库的清单中,还是在应用程序包本身的清单中,引用库中的类(例如 android:name="com.foo.mylibrary.MyService")?

我看过的一些示例似乎在两个清单中都声明了它们,但我怀疑将它们放在一个或另一个中是无操作的。

4

3 回答 3

43

使用库项目意味着我的整个项目将有两个清单——一个用于库,另一个用于“主”应用程序项目——我不清楚其中有什么或是否有一些冗余。

目前未使用库项目清单。

Gradle for Android 和 Android Studio 支持库项目和发布清单的 AAR。这可以包括活动声明、所需的权限或功能或最低支持的 Android SDK 级别等内容。

库清单如何与应用程序自己的清单合并的规则 - 特别是当您考虑构建类型和产品风格时 -有点复杂

那么这些组件的完整声明——包括意图、过滤器等——应该在哪里声明呢?

在宿主项目中。

库可以发布这些组件,然后 Android Studio 宿主项目可以在需要时删除它们。

它们是在库的清单中,还是在应用程序包本身的清单中,引用库中的类(例如 android:name="com.foo.mylibrary.MyService")?

后者。

在任何一个中(使用 Gradle for Android 和 Android Studio)。理论上,库更容易发布组件,因此应用程序作者不必这样做。就个人而言,我不是这个的超级粉丝,因为太多的开发人员最终会运送不必要的清单条目。

于 2012-04-16T18:04:35.003 回答
9

从 ADT r20 Preview 3 开始,现在可以合并清单。所以现在可以将通用配置放入库清单中。有关更多信息,请参阅https://stackoverflow.com/a/10400355/262789

清单合并支持需要 Intellij IDEA 版本 13 ( manifestmerger.enabled=true)。此外,Android Studio 支持似乎需要基于 Grade 的构建系统。

于 2013-11-06T16:40:09.840 回答
5

任何引用的 android 元素,如活动、接收器、服务等。必须进入您的应用程序清单,否则操作系统将无法识别它们。如您所料,库清单文件几乎是一个空实现

更新

正如 CommonsWare 上面指出的,Android 构建工具现在将尝试代表您合并各种清单。为后代留下原始答案

于 2012-04-16T18:05:16.907 回答