Android在内部和外部导入库的好处

时间:2012-05-07 07:03:46

标签: java android eclipse adt

发布ADT 17后,非Android库需要包含在项目的“libs”文件夹中,或者通过构建路径中的“Order and Export”选项卡导出。导入库外部

之间有什么区别(如果有的话)

External1

External2

内部

Internal2

Internal1

以“Android依赖关系”组中包含的方式导入库是否有优势?

4 个答案:

答案 0 :(得分:9)

如何将外部jar依赖项添加到Android项目的构建路径(内部或外部)对实际构建过程没有任何影响(更具体地说,在编译和dex步骤中),它所做的就是告诉构建过程在哪里查找在compile和dex步骤中获取所需的jar。

Android Dependencies窗口中显示的Java Build Path - Libraries元素只是ADT插件用于管理/分组jar依赖项的另一个抽象层。你的外部jar文件(在你的情况下是android-support-v4.jar)出现在那个窗口中(Android Dependencies内部或外部)没有区别。

自r17以来,依赖关系管理得到了很大的改进,建议使用libs /目录存储所有jar依赖关系(请参考内部方式),这被认为是一种自动化方法(因为ADT插件现在变得更加智能) ,请参阅Revisions for ADT 17.0.0

  

新版功能

     
      
  • 添加了自动设置JAR依赖项的功能。 / libs文件夹中的任何.jar文件都将添加到构建配置中(类似于Ant构建系统的工作方式)。此外,库项目所需的.jar文件也会自动添加到依赖于这些库项目的项目中。 (更多信息)
  •   

但是,如果您愿意,您仍然可以使用旧方式(请参考您的外部方式),这被视为手动方法(因为之前ADT插件很愚蠢),请参阅Recent Changes‎ for r17 Release

  

重要提示:如果您仍在手动引用jar库而不是将它们放在libs下/请注意以下事项:

     
      
  • 如果项目是库项目,则应用程序项目不会自动显示这些jar库。你应该把它们移到libs /

  •   
  • 如果项目是一个应用程序,这可以工作,但您必须确保将jar文件标记为已导出。

  •   

以“Android依赖关系”组中包含的方式导入库是否有优势?

自动化与手动从依赖管理的角度来看,自动化在计算机科学领域一直被认为比手动更无错误。

答案 1 :(得分:2)

第一,显示停止,'我不敢相信他们没有测试这个',将外部jar放在libs目录中的缺点是你无法为它们设置javadocs位置,因为选项显示为'无(不可修改)'。

因此我仍然在构建属性中使用导出选项

答案 2 :(得分:1)

它与Android的库依赖管理有关。有关详细信息,请参阅http://tools.android.com/recent/dealingwithdependenciesinandroidprojects

答案 3 :(得分:0)

来自Eclipse FAQ

  

内部资源驻留在工作台中的某个项目中,因此由工作台管理;与其他资源一样,这些资源可以由工作台进行版本管理。外部资源不是工作台的一部分,只能通过引用使用。例如,JRE通常是外部的,非常大,并且不需要将它与VCM系统相关联。

因此,很简单,如果您希望能够将JAR作为项目的一部分进行管理,将其暴露给SCM等,那么将其视为内部资源,否则将其视为外部资源。它最终会产生的APK没有任何区别,它只是一个日食。

如果您希望每次要使用库时都避免创建副本,请将其视为外部资源。但是,我可以建议你研究mavenandroid maven plugin,maven有一点学习曲线(特别是如果你习惯于“制作”或“蚂蚁”风格的构建脚本),但它非常值得努力。