zoukankan      html  css  js  c++  java
  • Android中的依赖问题(五种依赖、eclipse、AS、添加第三方库、jar)

    这篇文章的主题是:
    1. 依赖是什么
    2. eclipse中的依赖
    3. AS中的依赖(有一篇详细的文章讲得非常好,这里就不再写了http://blog.csdn.net/yy1300326388/article/details/46422939
    另外相关的话题有↓,可以自行查看:
    1. 安卓的support包的历史
    2. AS中grandle具体的内容
    3. 怎么做一个给别人用的Jar包和lib库
     (另外,贴图有点麻烦,所以这里图片只放了一张,如果有博友觉得本文有帮助而且希望补充图片,可以留言)
     
    依赖是什么
    依赖这个东西在安卓开发中是非常有用的,它让我们可以肆无忌惮地成为一位调包侠
    安卓开发中不可能让你从头开始写一个个基础的功能,我们往往会调用系统提供的方法,使用系统提供的工具,来实现我们的需求,往往我们只需要在JAVA文件的开头Import一些类就OK了,这种情况其实就是一种依赖,我们写的代码依赖系统提供的一些工具包
    而这是最简单的情况,因为这是系统提供的包,我们除了import外,什么都不用干
    但当你需要使用一些其他的包,不论是系统提供的附加包还是第三方包,你就需要做更多的事情了
    这些事情我们统称依赖,IDE中对依赖的实现我们称为依赖机制
     
     
    Eclipse中的依赖机制
     
    1.工程文件夹
    我们来看一个安卓工程(eclipse对于不同的工程,细节会有区别,我们这里特指安卓工程)
     
    我目前遇到过的全部的安卓项目中会出现的依赖的形式就是这5种,或者确切地说是这4种
    1. Android6.0
      1. 这是在你新建项目的时候默认直接支持的包,里边就只有一个叫android的jar包
      2. 它根据版本号的不同,只支持对当前版本号的安卓系统的APP的开发,如果我们不需要兼容性,那我们开发软件可以不用v4,用这个包里的内容也可以,但是为了兼容性,就会用到v4已经其他的
      3. 这个包里的东西我点开看,有这些:Android包、Java包、Javax包、Dalvik虚拟机包、org包
      4. 它修改最直接的方式是在图1使用1和2指定,还有默认的设置方式是你一开始设置的目标taget版本
      5. 一般说来它不太会出问题,而且一般都设置到最新
    2. Android Private Libraries / Libs
      1. Android Private Libraries本身的意思是Android项目私有的库,而它其实就是libs目录里面的jar包的映射
      2. 添加jar包到libs里面,系统自动把jar加载到android private libraries中,你把libs中的jar包移除 Private Libraries中也就没有了
      3. 而私有是什么意思我也不太懂,如果是相对下面的Android Dependency,那确实是有点公私区别的意思
      4. 这是最常见最普通的我们引入外部库的方式,操作也最方便,下面会详细说
    3. Android Dependency
      1. 这也是一种引入外部库的归宿(外部库存放的位置)
      2. 相比上面那个,这个家伙有三个特点
        1. Android Private Libraries引用的是包只能给自己使用,dependencies是引用的公用的库,它可以同时被其他的项目引用
        2. 使用dependencies 的操作更复杂,下面会说
        3. Android Private Libraries引用的是jar包,dependencies是引用的libraries
    4. Referenced Libraries
      1. 这好像也是一种引用jar包的方式,我虽然操作过,但我只是按照有的教程的说法做的,而且最后这种方式好像都没有用,于是我尝试之后又删掉了,这种的跟前面的有什么区别我也不知道,不过好像这是旧的使用jar包的方式,是使用libs包之前的方式
      2. 详细的情况下面会说
     
    2.操作方式
    推荐而且常用的操作
    一个android项目通常由代码和资源文件组成。如果把代码和资源文件打成Jar包供其他工程使用,则Jar包中的资源文件将无法被打包到最终的APK文件中,致使程序无法正常运行(直接引用Jar报的话,jar包中的style之类的应该不会自动在R类中生成,所以View中如果使用了资源就会报错)
    于是就有了这两种方式,一种是引入不带资源文件的jar包,另一个是引入带资源的Library
    1. 引入Jar包
      1. 这是最简单的一种方式,当一个库被打包成了jar包之后,你可以非常方便的使用:直接把这个jar包用鼠标拖入项目的libs文件夹中,点击copy to,于是项目会进入libs文件夹,而且同时,系统自动把jar加载到android private libraries中,然后你就可以在代码中Import相关库了
      2. Private Libraries 就是libs里面的jar包的映射!你把libs中的jar包移除 Private Libraries中也就没有了(移除步骤就是这样,非常简单)
      3. 大部分成熟的第三方库都是这个形式,比如我用过的ksoap,mpandroid,以及安卓官方提供的support v4
    2. 引入带资源的Library
      1. 有些特殊的情况下,这个包是带资源的,居然说类似这个形式的包就可以使用这种方式引入(如下图,libs中其实有个Jar包,然后res就是资源),比如support design,我们会使用另一种稍显复杂的方式来引入
      2. 引入步骤:
        1. 在eclipse中new一个安卓项目,方式使用 ,找到要引入的包,这里的例子就是design包,copy to,这个步骤不会有问题
        2. 引入之后我们弹出这个项目的图1,选择3,把它本身作为Library,选了这个之后,这个项目就可以被其他项目引用,并且这个项目本身不能被运行
        3. 然后在我们要引用这个项目的实际工程项目中弹出图1,点击5,就能看到刚刚设置为library的项目,选择之后就会在4中看到我们已经引用了这个项目
        4. 然后在Android Dependency 中就会看到一个以这个项目名称命名的一个jar包,它是带资源的
      3. 移除步骤:直接在图1中使用remove就OK了
      4. 需要这么使用的包不太多,我目前用过的必须要以这种方式引入的有support v7,support design
      5. 包图: 
    一般以上步骤完之后需要clean项目
     
    上面两种方式的旧版本
    1. 引用Jar包【等价于上面第一种】
      1. 进入图2,点击3,选择目标jar包
      2. 进入图3,勾选2,点击3
    2. 引用library
      1. 进入图2,点击2
      2. 选择“User library”,点击“下一步”     
      3. 点击“User librarys”按钮在出现的界面中点击“New..”按钮,在弹出的界面中随便起一个名字,点击“确定”   
      4. 点击“Add jars”按钮选择第三方jar包,
      5. 点击“确定”完成操作
     
    然后还有一种方式是右键build path
    1. build path
      1. 你把jar包拖入Libs之后,当你右键的时候如图4,在build path中能看到add to build path,当你点击之后,你的项目下会自动新建Referenced Libraries 文件夹,这个Libs包会出现在下面,但这个时候你还没有真正引用到它,你需要进入图3,在1的2中打钩,甚至有的人说你需要使用3把这个包放Up到最上面
      2. 移除方式:右键这个包,delete是灰的,但在图4中的build path中能看到remove,点击它就OK了;或是进入图2,选择包,并remove
      3. 上面5个工程文件夹中,右键的build path中能看到add to build path只有Libs
     
    3.操作中可能出现的意外处理
    1. 一般你感觉正确操作完就出现问题,第一件要做的事就是clean和refresh项目,如果问题还在,简单检查后也不知道问题出在哪儿,那就重启eclipse
    2. libs中的Jar包无法删除
      1. 直接关闭eclipse(关闭项目没有用)
      2. 手动到Lib文件夹下,删除
      3. 打开eclipse,右键refresh项目
    3. jar包好像无所谓,但是引入带资源文件的Library时,如果这个Library本身也依赖其他的jar包或者library,这时候可能会发生错误,有两个解决方式可以试试
      1. 把被多次引用的jar包替换成同一个版本的(复制替换)
      2. 保留最底层的引用,上层同样的包要引用的话干脆删掉
      3. (还有说法是:如果所开发的类与Android原生的类冲突,可以通过project->properties->java build path-> order and export (up / down)切换jar 编译时使用的优先级)
    如果最后还是有问题无法解决,那请换用AS大法,亲测同样的代码,在eclipse中报错,在AS中完美运行,就为这点换的AS! 
     
    图:
    1. 图1
    2. 弹出方式:右键项目名称,选择properties,然后弹出
    3. 它跟图2、图3其实是一个对话框,可以使用同样方式弹出
     
    1. 图2
    2. 弹出方式:如图4,选择下面的configure bulid path
    3. 也可以如图1一样的方式
    4. 3和4其实差不多,只是可选择的范围不同而已。add jars 可选范围是你的Project目录,add external jars可选范围是任何目录。
    5. Add variables :通过类似于环境变量的方式指定一个引用jar的路径
    6. Add libraries :将一些已经存在的库文件添加到引用路径
    7. Add (External) class folder :添加项目中类所在的文件夹
     
    1. 图3
    2. 如图1图2方式
     
    1. 图4
  • 相关阅读:
    树链剖分 (模板) 洛谷3384
    ST表 (模板) 洛谷3865
    IOI 2005 River (洛谷 3354)
    IOI 2005 River (洛谷 3354)
    poj1094 Sorting It All Out
    poj1094 Sorting It All Out
    spfa(模板)
    HAOI 2006 受欢迎的牛 (洛谷2341)
    HAOI 2006 受欢迎的牛 (洛谷2341)
    洛谷1850(NOIp2016) 换教室——期望dp
  • 原文地址:https://www.cnblogs.com/bellkosmos/p/5373261.html
Copyright © 2011-2022 走看看