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 编译时使用的优先级)

图:

  1. 图1
  2. 弹出方式:右键项目名称,选择,然后弹出
  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
时间: 2025-01-06 22:16:02

Android中的依赖问题(五种依赖、eclipse、AS、添加第三方库、jar)的相关文章

Android攻城狮 Android中更新UI的几种方式

Android中更新UI的几种方式: 1. Activity 的 runOnUiThread() 2. Handler 的 post() 3. Handler 的 sendMessage() 4. View 的 post() 1 public class FiveActivity extends Activity { 2 3 private TextView textView; 4 5 private Handler handler = new Handler() { 6 public void

android中bitmap压缩的几种方法的解读

最近在研究微信的sdk,在缩略图这遇到了一点问题. 微信的缩略图要求是不大于32k,这就需要对我的图片进行压缩.试了几种方法,一一道来. 1.质量压缩法: 代码如下 ByteArrayOutputStream baos = new ByteArrayOutputStream(); image.compress(Bitmap.CompressFormat.JPEG, 100, baos); int options = 100; while ( baos.toByteArray().length /

iOS——Xcode中添加第三方库

一.只有.h和.a文件的库 1.向项目中添加三方库文件 如果添加的第三方库只有.h和.a文件,直接把文件夹拖进项目下面,这时会弹出下面的提示框,一定要勾选下面选择的选项: 这里要注意,在Add to targets里面一定要选择上要将库文件(.a文件)添加到的目标,这是告诉项目哪些目标需要包含.a文件,不然的话项目目标里将不会包含.a文件:这个时候,进入“工程->添加了第三方库的项目目标(TARGETS里面)->Build Phases->Link Binary With Librari

Andriod中数据存储的五种方式

数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用SharedPreferences存储数据 2 文件存储数据 3 SQLite数据库存储数据 4 使用ContentProvider存储数据5 网络存储数据 下面将为大家一一详细介绍. 第一种: 使用SharedPreferences存储数据 SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置比如窗口状态,一般在 Activity中 重载窗

Android中实现IPC的几种方式详细分析及比较

1.使用Bundle   ----> 用于android四大组件间的进程间通信 android的四大组件都可使用Bundle传递数据  所以如果要实现四大组件间的进程间通信 完全可以使用Bundle来实现 简单方便 2.使用文件共享  ---->用于单线程读写 这种方式在单线程读写的时候比较好用 如果有多个线程并发读写的话需要限制线程的同步读写 另外 SharePreference是个特例  它底层基于xml实现  但是系统对它的读写会基于缓存,也就是说再多进程模式下就变得不那么可靠了,有很大

URL转Drawable之 Android中获取网络图片的三种方法

转载自: http://doinone.iteye.com/blog/1074283 Android中获取网络图片是一件耗时的操作,如果直接获取有可能会出现应用程序无响应(ANR:Application Not Responding)对话框的情况.对于这种情况,一般的方法就是耗时操作用线程来实现.下面列三种获取url图片的方法: 1.直接获取:(容易:ANR,不建议) [java] view plain copy mImageView = (ImageView)this.findViewById

Android中获取网络图片的三种方法

android中获取网络图片是一件耗时的操作,如果直接获取有可能会出现应用程序无响应(ANR:Application Not Responding)对话框的情况.对于这种情况,一般的方法就是耗时操作用线程来实现.下面列三种获取url图片的方法: 1.直接获取:(容易:ANR,不建议) mImageView = (ImageView)this.findViewById(R.id.imageThreadConcept) ; Drawable drawable = loadImageFromNetwo

Android 中延时执行的几种方法

延时执行的方法主要有: 1.开启新线程:2.利用定时器:3.消息处理:4.利用AlarmManager 一.开启新线程 new Thread(new Runnable(){ public void run(){ Thread.sleep(XXXX); handler.sendMessage(); //告诉主线程执行任务 } }).start 二.利用定时器 TimerTask task = new TimerTask(){ public void run(){ //execute the tas

Android中传递对象的三种方法

Android知识.前端.后端以至于产品和设计都有涉猎,想成为全栈工程师的朋友不要错过! Android中,Activity和Fragment之间传递对象,可以通过将对象序列化并存入Bundle或者Intent中进行传递,也可以将对象转化为JSON字符串,进行传递. 序列化对象可以使用Java的Serializable的接口.Parcelable接口.转化成JSON字符串,可以使用Gson等库. 1.Serializable Model public class Author implement