我正在尝试为我的Android项目创建可重用的库。图书馆将包括资源。不幸的是,我找不到任何关于Android库如何运作的合理解释。
Android参考只是说明了如何设置Eclipse项目和Ant项目。我正在使用Maven和IntelliJ。如果我能找到关于所有部分如何协同工作的任何合适的描述,我会想出如何设置它们。
所以我想知道是否有人想挑选并尝试解释它。这是我的一些开放性问题。
假设我的项目AndroidApp
有AndroidManifest.xml
个包app.foo
并生成AndroidApp.apk
。
我还有包AndroidLib
的项目app.bar
。我AndroidManifest.xml
AndroidLib
需要什么?只是声明包装足够还是应该有别的东西?
现在,我想在两者中都有资源,并参考来自AndroidLib
的{{1}}中的资源。我只是致电AndroidApp
吗?有些帖子表明不存在身份冲突。对还是错?
lib.bar.R
的可交付工件是什么?它也是apk吗?我该如何部署两者?或者更重要的是,我可以生成包含AndroidLib
和AndroidApp
的单个apk吗?
项目在开发环境中如何相互关联?例如,在IntelliJ中,我尝试在AndroidLib
中包含AndroidLib
的模块,但它只是将资源编译为AndroidApp
。 (可能我错过了AndroidApp
)。如果我使用javac和Android工具,序列会是什么?
还有什么值得了解的吗?
反正。如果有人可以就此问题分享知识库,我将不胜感激。
答案 0 :(得分:5)
我已经写了一篇详细的帖子:Android Application, Android Libraries and Jar Libraries。
如果您想模仿原始Android构建系统的行为方式,那么最好的方法是运行
ant debug -d
在使用Android库(或Android库)的项目上。
这将为您提供所有命令行ant
运行以创建R.java
文件,编译代码并打包最终的.apk文件。这基本上是您现在可以找到的最佳参考。虽然注意到Android的构建系统正在不断发展,但您需要使构建系统与原始系统保持同步。
答案 1 :(得分:1)
好的,我不是这方面的专家,但这些是我的想法(可能是错的):
据我所知,严格来说,Android上并没有像“图书馆”这样的东西。基本上有三种选择:
让“Lib”项目成为“普通”Java项目,并将该项目添加到“App”项目的构建路径中。然后“Lib”只能包含Java代码,该代码被编译并正常添加到“App”的APK中。由于在设备上运行的应用程序无法访问其他应用程序的代码,如果您想在第二个Android应用程序中重用“Lib”,则必须在其APK中包含(已编译的)lib代码的副本。这也意味着lib不能包含任何资源,因为它们需要位于“App”项目的相应目录中。
与#1类似,但您可以将Lib代码编译到常规Java库(jar)中,然后将其复制/编译到“App”项目的lib目录中。除此之外,它将具有与#1相同的限制,因此您创建的任何应用都必须在其APK中包含JAR的副本。
让“Lib”项目成为一个完全成熟的独立应用程序,并使用自定义Intents定义API,使“Lib”和“App”之间的所有通信都运行在它们之上。这需要单独分发“Lib”和“App”,以便用户需要手动安装两者。但是,这允许您创建可以重复使用“Lib”应用程序功能的其他应用程序,而不包含重复的代码。
答案 2 :(得分:0)
我最近在Maven Android插件的示例项目中合并了库项目支持。通过查看它们的设置方式,了解它的工作原理。