Android库Manifest与App Manifest

gor*_*nwd 38 android android-manifest android-service android-library android-activity

我在这里已经阅读了类似的问题,但我仍然不清楚几件事情.使用库项目意味着我的整个项目将有两个清单 - 一个用于库,另一个用于"主"应用程序项目 - 我不清楚是什么或哪些有冗余.

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

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

Com*_*are 43

使用库项目意味着我的整个项目将有两个清单 - 一个用于库,另一个用于"主"应用程序项目 - 我不清楚是什么或哪些有冗余.

目前尚未使用库项目清单.

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

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

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

在主机项目中.

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

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

后者.

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

  • @CommonsWare从ADT r20预览版3开始,现在可以合并清单.因此,现在可以将常见配置放入库清单中.http://stackoverflow.com/a/10400355/262789 (4认同)
  • @CommonsWare - 我总是喜欢你的直接答案.在这种情况下,它帮助了我! (2认同)

Ben*_*min 9

从ADT r20 Preview 3开始,现在可以合并清单.因此,现在可以将常见配置放入库清单中.有关更多信息,请参阅/sf/answers/728024881/.

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


JRa*_*ond 5

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

UPDATE

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