【问题标题】:android library project and Activitiesandroid 库项目和活动
【发布时间】:2011-02-18 21:37:25
【问题描述】:

我正在开发一个 Android SDK 库。在这个库中,我声明并使用了一些活动。现在我尝试将库包含在应用程序中,但我注意到我必须在应用程序中声明所有库活动。这是一件非常糟糕的事情,因为在库中,我已经包含了很多活动,开发人员必须将所有活动复制到他自己的应用程序中。有解决办法吗?

【问题讨论】:

  • 将活动复制到其他应用是什么意思?你在说清单吗?如果是这样,谷歌表示他们打算在未来添加清单合并,但你现在需要复制/粘贴。如果没有,那你就做错了。
  • @schwiz manifestmerger.enabled=true 现在已经存在,但我们应该强制开发人员(在他们的应用程序中使用我的库)将 min 和 target SDK 设置为我们的 min 和 target sdk! (来源:stackoverflow.com/questions/10976635/…

标签: android android-activity android-manifest android-library


【解决方案1】:

不,这是目前库的已知限制。 android 开发社区中有很多关于将来修复这个问题的讨论,但目前这是他们如何做库的限制。

来自doc

在清单文件中 应用项目,必须添加 所有组件的声明 应用程序将使用 从库项目导入。为了 例如,您必须声明任何 <activity>, <service>, <receiver>, <provider>,等等,还有 <permission><uses-library> 和 相似的元素。

另外,Mark Murphy 的出色回答 here

【讨论】:

  • 感谢您的回复。也许我必须使用对话框而不是活动。这可以避免这种限制。你同意吗?
  • (另外:我不需要创建jar)
  • 库中唯一需要在消费项目中的部分是 android 清单中的声明。我不确定您所说的使用对话框而不是活动是什么意思。
  • 如果我使用对话框来显示用户界面,我不需要在清单中声明它们。
  • 在架构上,对话框和活动之间存在显着差异。对话框将与使用它们的应用程序共享更多状态,您需要为使用它们的应用程序设置一些结构化机制来调用它们。这实际上取决于您尝试做什么来确定这是否是可行的替代方案。
【解决方案2】:

更新 1: 使用 Gradle 时,Manifest 合并现在会自动完成。有关其工作原理以及如何解决冲突的更多详细信息,请参见 here(感谢 guy.gc 的评论)

原帖:

要更新此线程:现在可以进行自动合并。你只需要添加

manifestmerger.enabled=true

到您的 project.properties。 Using the new "manifestmerger" property in Android 也讨论了这个问题。

我知道这是一个旧线程,但我只是偶然发现了它,并希望防止其他人(包括我)认为这是不可能的。在我的项目中,这一行完全足以使用图书馆消费应用程序中的活动。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-18
  • 1970-01-01
  • 1970-01-01
  • 2016-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多