收藏本站
博为峰Android开发培训Banner
您所在的位置:博为峰教育首页 > 资料精选 > 学习资料 > 【学习资料】Android程序之项目的依赖关系解析

【学习资料】Android程序之项目的依赖关系解析

   发布时间:2015年03月21日 13:33分    来源:博为峰教育网采编    关键词:Android,项目      | 上一篇 | 下一篇 |


     在Android SDK Tools和Eclipse ADT 插件的第17版本 (revision 17)中,我们对Android项目的依赖关系管理做了很多改变。

     我们所做的第一个改变是调整基于 Ant 的编译系统和 Eclipse ADT 插件,使他们具有相同的行为。Android 项目包含源代码文件夹,以及对库项目 (android library projects) 和 jar 文件的依赖。

     重要的变化 我们已经改变了库项目生成和打包R类的方式:

     R类不再被打包到库项目的输出 jar 包中。
     库项目不再为其所依赖的库项目生成R类。只有主应用项目才会在生成本身R类的同时为所依赖的库项目生成R类。


     Eclipse的具体变化

     由于不光包含库项目,被称为”Library Projects”的动态class path容器 (dynamic class path container) 已更名为“Android Dependancies”。

     如果该项目是一个 library project,应用项目默认情况下看不见这些jar 类库。 你必须把这些类库挪到”libs”子目录下。
     下图介绍了如何将Java项目和jar类库标记为”exported”(Android Dependencies 容器不必被标为”exported”,反正它总是会被导出):


Android程序之项目的依赖关系解析


     再次强调一下, 重复的引用(包括引用的项目和 jar 文件)会被自动发现并且删除掉。

 

     依赖解析

     当一个项目引用了两个库项目,都需要相同的jar文件,编译系统需要检测和解决这种重复。

     一个完整的依赖系统会将每个jar文件关联到一个完全限定名 (fully qualified name) 和一个版本号,以决定使用哪个版本。

     不幸的是,Android编译系统暂时还没有一个完整的依赖解析系统。 在此期间,我们按照下列规则实现了一个简单的系统:

    ** 严格按照文件名来识别 jar 文件 **

     这意味着mylib.jar 和 mylib-v2.jar 是不同的两个文件,虽然它们实际上是不同版本的同一个类库, 他们都将被打包,从而可能导致 dx “already added”错误。
     对于具有相同文件名的 jar 文件,“相同版本”是指完全相同的文件。

     目前,我们的检测是非常基本的,只检查这些文件是不是有相同的大小和sha1 值。
     如果两个库都包含在他们的libs文件夹名为mylib.jar文件,但是这两个文件是不同的,编译系统将不能指出这种依赖错误。
     解决的办法: 如果它们是相同的类库,确保两个jar文件实际上是同一个。 如果是不同的两个类库,把他们重新命名为不同的jar包。
      特殊情况: android-support-v4.jar 和 android-support-v13.jar

     我们把这两个库当作特殊情况来处理, 因为-V13里面包含一个完整-V4的版本。 如果发现两者同时存在,只有V13被使用。

     请注意,我们不能保证-V13中使用的-V4版本和其他老的类库使用到的-V4版本是相同的。 我们建议,当您更新您的项目与新版本的support library,你在同一时间更新您的所有项目,无论他们使用-V4还是-V13。