通常一个大型项目由多个项目集成。那么android项目在集成时如何处理项目之间的依赖关系呢?
一个android项目通常由代码和资源文件组成。如果把代码和资源文件打成Jar包供其他工程使用,则Jar包中的资源文件将无法被打包到最终的APK文件中,致使程序无法正常运行。
Android为我们提供了另一种方案。
假设有一个base工程和A工程,A工程依赖base工程。
1.将base工程做成library工程。
在project.properties文件中加上
android.library=true
或者使用图形界面配置,右击工程——》Properties——》Android——》勾选Is Library
2.clear一下工程。
此时会发现,在bin目录下生成了一个Jar文件,该Jar文件包含编译后的class文件(不包含R文件)。再仔细观察Gen目录下的R文件,所有的常量都变成了变量(去掉了final关键字)。这是因为资源文件的ID在最终打包进APK文件时才会确定。所以,当一个工程被做成library工程时,只要switch case语句引用了R类,都必须改成if...else...语句(case后面只能跟常量)。
3.给A工程添加依赖
右击工程——》Properties——》Android——》Add
将base工程添加进来即可。
4.将base工程AndroidManifest.xml文件中的相关配置(Activity、Service等等)复制到A工程AndroidManifest.xml文件中。
至此,将base工程集成进A工程基本完成,base工程中的资源文件会自动打包到APK文件中。但是由于base工程中的资源文件与A工程中的资源文件会被打包到同一目录下,所以两个工程中的资源文件不能重名,否则base工程中的资源文件无法打包到APK中。
还可以参考android-support-v7-appcompat项目,再建一个工程base-lib,将步骤2中生成的Jar包拷贝到base-lib工程的libs目录下,再将base中所有的资源文件拷贝到base-lib中,然后只需要把base-lib添加到A工程就行了,就像添加base工程一样。这种方式很适合对外发布Android API。