Android项目中如何正确的引入第三方jar包(工程)

来源:互联网 发布:黑洞效果源码 编辑:程序博客网 时间:2024/05/03 00:42

把当前工程编译成jar包:http://www.cnblogs.com/lanxuezaipiao/p/3291641.html

在阅读这边文章之前:其实有一个更容易的方法导入第三方jar包:

直接把jar包下载下来,然后直接拷贝到工程libs目录下即可,如果是不需要查看第三方jar包的源代码,是用的话,仅此而已即可,但是有时候我们需要查看导入的第三方jar包的源代码,以方便我们了解实现源代码,这时候我们就需要把导入的jar包链接到其源代码上,这个方法是:首先也是把下载下来的jar包(例如:jsoup-1.72.jar)拷贝到libs下,然后在下载jar包对应的带源代码的jar包(jsoup-1.72-sources.jar),之后再右键点击工程->【Build Path】->【Configure Build Path】->【Libraries】->【Android Dependencies】->【Add JARs】->选中libs中的jar包(jsoup-1.72.jar)->【Source attachment: none】->【Eidt】->链接到jsoup-1.72-resources.jar,即可。

最近在学习一个Android技术点时,需要在工程项目中引入第三方jar包,遇到的问题是在编译的时候能通过,但是在实际运行的时候会出错。后来经过调研发现,原来是在引入第三方jar包的时候出错了,现在总结已经成功的两种方式。


一 使用Build Path中的Order and Export选项卡

1.将实例Android项目(project源码)importEclipse中,这时由于第三方jar包路径和原作者的存放路径不一致,项目会提示红叉叉,不能进行编译;


2.下载第三包jar3rd.jar保存到本地,然后通过Build PathConfigure Build PathLibrariesAdd external JARS,3rd.jar添加到项目的Build Path中去,这时该Android项目上的红叉叉就会消失,项目能通过编译;


```


```点击“OK”


3.接着,我们到模拟器上Run下这个项目,模拟器启动是在是太慢了,这个时候,我们可以喝点水,上个厕所,站起来走走。程序员,要对自己的身体好一点。我这次就不去厕所了,写这篇文章呢。模拟器还崩溃了一次,悲剧,只得again......

结果:


logcat中查错呗:


4.重新配置Build Path:

继续Build PathConfigure Build PathOrder and Export,将里面的3rd.jar勾选,点击OK



run一次:

还是报错?!虾米情况!!!

别急Projectclean一下当前项目,再run一次就得到正确结果了。

Success!


思考:如果第三方jar包只有一个这样做还好说,如果在项目中引入的jar包很多,这是可参考第二种方法。


二 创建自己的 Source Folder


1.Build Path→New Source Folder→给第三方jar的文件夹起个名字,例如3rd.jar→将所有的第三方jar包全部复制黏贴到这个包下面:

2.复制黏贴所有第三方jar包:

3.这个时候,仅仅是将这个新建的Folder添加到Build Path中去,复制过来的3rd.jar还是没有添加进去的,这时,选中3rd jar文件下面的所有第三方jar包,右键→Add to Build Path


```我们看看这里发生了什么变化:

为了区别之前的,我在这里clean一下。

结果:成功,success

==================================================================================================================

总结:

其实这个问题的核心是:有没有将第三方jar包添加至新apk文件的Build Path中去。

什么是Build Path?其实在这里(Android Project最后构建成apk文件)顾名思义,就是最后apk文件构建的资源在该项目中存放的路径。结合这里的实际情况,在正确的Order and Export选项卡里面,默认勾选了3个路径:srcgen和我们自定义的3rd jar,这就表示,我们的3rd jar包将会直接构成最后的apk文件(部分还是全部?)。

我们结合Order and Export选项卡的注释来看下:构建class文件路径的顺序和导出条目,导出的条目对依赖的项目有效。


我们电脑上的Eclipse IDE开发环境是配置了本地的JDK环境的(环境变量classpath),我们将已经为Eclipse配置好的JDK环境当做第一方,我们为第二方,那么3rd.jar就是第三方了。(不知道正确与否,我是这么理解的)

Eclipse上开发当前项目的时候,我们默认依赖的是本地JDK环境里面的工程(这里的工程就是一个个的jar文件),如果要引入第三方(工程)jar的话,必须要添加额外的jar文件(工程文件),保证能通过编译,也就是当前项目没有红叉叉,允许你去run

当当前项目构建好(Buildapk文件(project)后,我们用模拟器去运行。请注意这时候环境开始发生了微妙的变化,现在当前的运行环境是Android SDKdalvikvm(而不是为Eclipse配置的本机JRE环境,那是一般的Java项目的运行环境,我们现在是Android Project)。对于dalvikvm来说,apk是它的一个project;同理,在Eclipse开发过程中,当前项目明显是它的一个projectAndroid Project),额外引用的3rd.jar包也是它的一个project。在项目的开发阶段,我们自己的当前项目依赖了3rd.jar,在项目构建成apk文件(project)的时候,如果我们不将3rd.jar这个工程设为Exported(让依赖当前Android Projectapk project也能依赖3rd.jar)。在apk文件运行时,当apk运行到需要依赖3rd.jar流程的时候,dalvikvm环境无法访问3rd.jar project中的class文件,自然就会报错。


依赖关系分析:

在实际运行的时候:apk project依赖我们开发的Android Project,而Android Project又依赖3rd.jar project,相当于apk project间接依赖3rd.jar project,这种间接关系应该是不能自动传递的,需要进行手动设置,也就是在构建apk project的时候,把3rd.jar project设为Exported,让它可以被apk project间接依赖,当然apk project是直接依赖Android Project的。

第二种方法完全就是将3rd.jar projectAndroid project一起构建(打包)成apk project,然后部署(安装)在dalvikvm中运行,其实也是相当于在dalvikvm运行环境中直接添加了一个3rd.jar

通过文件的大小分析,我们发现第一种export的方式比第二种直接构建的方式构建成的正常apk文件要小一些。具体是:第一种方法正常情况下apk文件大小306KB;第二种方法下正常情况下apk文件大小334KBapk异常情况时大小是295KB3rd.jar的大小是33.7KB。我也不知道具体原因,猜测是进行了“结合编译”,也就是将Android Project3rd.jar project在编译的时候结合起来,比如去掉相同的地方,从而构建成apk project;或者是“有效编译”,也即是只将3rd.jar中有效有用的部分整合到Android Project中去,然后构建成apk project。本人也只是菜鸟一只,只能这样猜想一下,凭目前的知识水平,还不知道到底是怎么回事,也不知道如何去验证,如有高手能赐教一二的话,不胜感激。当然由于本人的水平有限,本文中的语言和词汇肯定有表述不当的地方,大家自己辨别了,这只是我的个人理解。建议大家无论什么时候都不要尽心他人言,官方的文档才是你最坚实后盾。

转自:http://www.360doc.com/resaveArt.aspx?articleid=310390794&isreg=1

原创粉丝点击