Android Library Manifest vs. App Manifest



我在这里读过类似的问题,但仍然不清楚几件事。使用库项目意味着我的整个项目将有两个清单 - 一个用于库,另一个用于"主"应用程序项目 - 我不清楚哪些内容在哪个中,或者是否有一些冗余。

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

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

使用库项目意味着我的整个项目将有两个清单 - 一个用于库,另一个用于"主"应用程序项目 - 我不清楚哪些内容在哪个中,或者是否有一些冗余。

当前未使用库项目清单。

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

库清单如何与应用自己的清单合并的规则(尤其是考虑构建类型和产品风格时)有点复杂。

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

在宿主项目中。

该库可以发布这些组件,然后 Android Studio 主机项目可以根据需要删除它们。

它们是在库的清单中

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

后者。

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

从 ADT r20 预览版 3 开始,现在可以合并清单。因此,现在可以将通用配置放入库清单中。有关详细信息,请参阅 https://stackoverflow.com/a/10400355/262789。

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

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

更新

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

相关内容

最新更新