Android库清单与应用程序清单

我在这里读过类似的问题,但是在一些事情上我还不清楚。 使用图书馆项目意味着我的整个项目将有两个清单 – 一个用于图书馆,另一个用于“主”应用程序项目 – 我不清楚在哪些方面或如果有一些冗余。

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

我所看到的一些例子似乎是在两个清单中都宣布它们,但是我怀疑把它们放在一个或另一个中是没有用的。

使用图书馆项目意味着我的整个项目将有两个清单 – 一个用于图书馆,另一个用于“主”应用程序项目 – 我不清楚在哪些方面或如果有一些冗余。

图书馆项目清单目前没有使用。

Gradle for Android和Android Studio支持库项目和AAR发布清单。 这可以包括诸如活动声明,所需的权限或function,或支持的最低Android SDK级别。

图书馆清单如何与应用程序自己的清单合并的规则(特别是当您考虑构buildtypes和产品风味时) 有点复杂 。

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

在主机项目中。

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

他们是否进入图书馆的清单,或者在应用程序包本身的清单中,引用图书馆中的类(例如android:name =“com.foo.mylibrary.MyService”)?

后者。

在任何一个(与Android和Android Studio的Gradle)。 从理论上讲,图书馆更容易发布组件,所以应用程序作者不需要。 就我个人而言,我不是一个很大的粉丝,因为太多的开发人员会发送不必要的清单条目。

从ADT r20预览版3开始,现在可以合并清单。 所以常见的configuration现在可以放入库清单。 有关更多信息,请参阅https://stackoverflow.com/a/10400355/262789

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

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

UPDATE

正如CommonsWare上面指出的那样,Android构build工具现在将尝试以您的名义合并各种清单。 留下后人的原始答案