我在这里读过类似的问题,但仍然不清楚几件事。使用库项目意味着我的整个项目将有两个清单 - 一个用于库,另一个用于"主"应用程序项目 - 我不清楚哪些内容在哪个中,或者是否有一些冗余。
我正在开发一个具有"精简版"和"付费"版本的应用程序小部件,因此几乎所有代码都将包含在库项目中。作为一个小部件,该库至少将有一个接收器、一个服务、一个配置活动,以及一些其他活动。那么,这些组件(包括意图、过滤器等)的完整声明应该在哪里声明呢?它们是在库的清单中,还是在应用程序包本身的清单中,引用库中的类(例如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构建工具现在将尝试代表您合并各种清单。把原来的答案留给后人