Java 可重用Android库如何运行(开发、部署等)
我正在尝试为我的Android项目创建可重用库。图书馆将包括资源。不幸的是,我找不到任何关于Android库如何运行的合理解释 Android参考只是说明如何设置Eclipse项目和Ant项目。我正在使用Maven和IntelliJ。如果我能找到任何关于所有部件如何协同工作的合适描述,我会想出如何设置它们 所以我想知道是否有人想挑一个来解释。下面是我的一些开放性问题 假设我有一个projectJava 可重用Android库如何运行(开发、部署等),java,android,compilation,libraries,Java,Android,Compilation,Libraries,我正在尝试为我的Android项目创建可重用库。图书馆将包括资源。不幸的是,我找不到任何关于Android库如何运行的合理解释 Android参考只是说明如何设置Eclipse项目和Ant项目。我正在使用Maven和IntelliJ。如果我能找到任何关于所有部件如何协同工作的合适描述,我会想出如何设置它们 所以我想知道是否有人想挑一个来解释。下面是我的一些开放性问题 假设我有一个projectAndroidApp,它有AndroidManifest.xml和包app.foo,并生成Android
AndroidApp
,它有AndroidManifest.xml
和包app.foo
,并生成AndroidApp.apk
我还有projectAndroidLib
和packageapp.bar
。对于AndroidLib
,我在AndroidManifest.xml
中需要什么?仅仅声明包就足够了,还是应该有其他东西
现在,我想在两者中都有资源,并从AndroidApp
中引用AndroidLib
中的资源。我是否只调用lib.bar.R
?一些帖子建议不会有id冲突。对还是错
什么是AndroidLib
的可交付工件?它也是apk吗?如何部署两者?或者更重要的是,我可以生成包含AndroidApp
和AndroidLib
的单个apk吗
项目在开发环境中如何相互关联?例如,在IntelliJ中,我试图在AndroidApp
中包含带有AndroidLib
的模块,但它只是将资源编译成AndroidApp
。(可能我错过了使用库的内容)。如果我使用javac和Android工具,顺序是什么
还有什么值得知道的吗
无论如何。如果有人能分享这方面的知识,我将不胜感激。好的,我不是这方面的专家,但这些是我的想法(可能是错误的):
就我所能说的,严格来说,安卓上并没有真正意义上的“库”。基本上有三种选择:
让“Lib”项目成为“普通”Java项目,并将该项目添加到“App”项目的构建路径中。“Lib”只能包含Java代码,Java代码通常被编译并添加到“App”的APK中。由于在设备上运行的应用程序无法访问另一个应用程序的代码,如果您想在第二个Android应用程序中重用“Lib”,它必须在其APK中包含(编译)Lib代码的副本。这也意味着lib不能包含任何资源,因为它们需要位于“App”项目的相应目录中
与#1类似,但是您将Lib代码编译到一个常规Java库(jar)中,然后将其复制/编译到“App”项目的Lib目录中。除此之外,它还具有与#1相同的限制,因此您创建的任何应用程序都必须在其APK中包含JAR的副本
让“Lib”项目成为一个完整的独立应用程序,并使用自定义意图定义一个API,让“Lib”和“app”之间的所有通信都运行在它们之上。这要求“Lib”和“App”分开分发,因此用户需要手动安装这两个。但是,这允许您创建其他应用程序,这些应用程序可以重用“Lib”应用程序的功能,而不包括重复的代码
我已经写了一篇关于这方面的详细文章:
如果您想模仿原始Android构建系统的行为方式,那么最好的方法就是运行
ant debug -d
在使用Android库(或Android库)的项目上
这将为您提供所有命令行ant
运行,以创建R.java
文件,编译代码并打包最终的.apk文件。这基本上是你现在能找到的最好的参考资料。不过请注意,Android的构建系统正在发展,您需要保持构建系统与原始系统同步。我最近在Maven Android插件示例项目的库项目支持中进行了合并。通过查看它们是如何设置的,就可以了解它们是如何工作的
谢谢你的回答<代码>库可以包含任何资源
din您的意思是不能
?因为之前你说的“Lib”只能包含Java代码。更正。很棒的博客帖子!这正是我想要的。这个博客,连同《Pro Android 3》(起始页387)一书,是一个完美的组合来解释Android库,我昨天刚刚试过。beta-4被破坏了,我甚至提交了一个bug。但我根据代码编译的最新快照很好。插件是伟大的!谢谢。我们计划很快发布新版本,以解决您的问题;-)