转载自: http://blog.sina.com.cn/s/blog_a3b9b9040101lco3.html
在Github上下载了Android开源项目 Quick News的源码, 其中使用到了第三方项目框架 vitamio, 在下载的源码导入到IDE后, 发现凡是引用vitamio的文件都会报错, 在不知如何解决该问题的时候, 又回到Github该项目的页面, 认真看了看该项目的介绍, 发现了这句描述"QuickNews is a run project and vitamio is a library project." 于是决定搜索 library project的含义, 就找到了这篇文章http://blog.sina.com.cn/s/blog_a3b9b9040101lco3.html, 在它的帮助下, 我解决了上述报错的问题, 故转载以备今后再次遇到类似问题时作为指导.
1、如何将一个android工程作为库工程(library project)
library project是作为jar包被其它android工程使用的,首先它也是普通的android工程。然后:
1)在eclipse Package Explorer, 右键android工程选择Properties
2)选择Android,下拉右边的滚动条到最下面,选中”Is Library“
3)点击Apply,点击OK
这个android工程就成为了library工程。
注意:作为library工程可以引用外部jar包,但不能引用其它library工程,在library工程中不能使用aidl文件,不能引用raw、assets下资源
另外当试图运行一个library工程时,eclipse将报错:
2、主工程如何引用库工程
当引用lib工程后,主工程就可以调用library工程的相关类和方法。android工程引用其它library工程步骤:
1)在Package Explorer, 右键android工程选择Properties
2)选择Android,下拉右边的滚动条到最下面
3)点击Add按钮打开lib工程选择对话框
4)从选择对话框中选择工程,点击OK
5)点击Apply按钮,点击OK按钮
3、在主工程manifest.xml文件中声明lib工程的组件
主工程manifest.xml中必须添加library工程的所有Activity、Service、receiver、provider,还要添加library工程的permission、uses-library等属性,注意引用的组件要使用完全的包名,否则将报对应的NotFoundException。
4、库工程与主工程资源冲突问题
当运行有引用library工程的android工程时,android工具将会合并library工程与主工程的所有资源。如果一个资源ID将有可能在library工程之间或library工程、主工程之间都有定义,这时候优先级别高的资源ID将覆盖优先级别低的,使用资源时将使用有线级别最高的工程的资源。工程之间优先级别如何判定,请看下一条。
5、库工程之间以及主工程的资源使用上的优先级问题
上图显示一个android工程引用了四个library工程,这四个library工程和主工程之间是有优先级之分的。android主工程的优先级别最高,四个library工程科举上图排序有上到下优先级别依次降低。library工程之间也可以手动排序,选择其中一个,点击up(提高优先级)或者down(降低优先级)。
6、库工程和主工程使用不同的android platform version问题
主工程打包时,android sdk版本使用的是主工程。所以library工程使用的android sdk版本要不高于主工程的sdk版本。如果library工程sdk版本高于主工程,将不能通过编译。