[Android]导入第三方模块

在做项目的时候经常会引入第三方的技术,这个时候就会引入第三方的jar包、so文件或者aar,这个是不可避免的。
首先讲如何引入第三方的jar包:一般来说新建的项目没有引用jar包的,所以要切到project目录结构,然后把第三方的jar包放到"project/app/libs"目录下,然后在切换成android目录结构,这个时候不会出现"jniLibs"目录,所以需要我们在build.gradle的android{}中添加一句话:

[Android杂谈]导入jar包和aar以及可能出错的解决方法 - 尹源 - 尹源的博客
  然后重新编译一下:
[Android杂谈]导入jar包和aar以及可能出错的解决方法 - 尹源 - 尹源的博客

  这个时候就可以在Android目录结构中看到"jniLibs"目录了,当然了,有些第三方的jar包可以在build.gradle中加入compile来添加,比如okhttp和eventbus。
下面将怎么添加aar资源,流程上和导入jar包相似,但是需要配置两个不同的地方:
. [Android杂谈]导入jar包和aar以及可能出错的解决方法 - 尹源 - 尹源的博客
[Android杂谈]导入jar包和aar以及可能出错的解决方法 - 尹源 - 尹源的博客
 
然后重新sync一下project就行。
导入第三方的资源多了之后就会出现冲突,冲突有两种:一种是jar包冲突,我在集成某公司语音引擎的时候引入了gson-2.2.1.jar,然后在集成第二家公司语义库的时候,第二家公司语义库使用了gson-2.8.0.jar,然后这两个包就冲突了,这种错误比较容易解决,在编译报错时一般会指出哪两个文件冲突,只需要删除一个就行了。
还有另外一种错误,我也是百度了之后才找到的,报错内容:
 
  
Error:The number of method references in a .dex file cannot exceed 64K.
Error:Execution failed for task ':app:transformClassesWithDexForRelease'.
com.android.ide.common.process.ProcessException:………………………………………… finished with non-zero exit value 2
在我第一次引入aar的时候看到了"finished with non-zero exit value 2",首先想到的就是jar包冲突,然后询问了第二家技术人员,只找到了gson这个jar包有冲突,没发现其它jar包冲突,我还天真的以为是某个包和aar里的资源包名不同但是引入的jar包是相同的 [Android杂谈]导入jar包和aar以及可能出错的解决方法 - 尹源 - 尹源的博客在浪费了几个小时之后,百度上看到了一句话,加入" multiDexEnabled true",然后顺着这句话往下找,才找到真正的原因: Error:The number of method references in a .dex file cannot exceed 64K.原来是因为方法数超过了限定64K(准确数目来说是65535),随着软件的功能越来越大,突破这个数目是迟早的事,总不能把项目缩减功能吧,百度一下解决方法,得到了一个办法:
在build.gradle加入如下内容:
[Android杂谈]导入jar包和aar以及可能出错的解决方法 - 尹源 - 尹源的博客
 
[Android杂谈]导入jar包和aar以及可能出错的解决方法 - 尹源 - 尹源的博客

  sync project后在Application中加入如下内容:
[Android杂谈]导入jar包和aar以及可能出错的解决方法 - 尹源 - 尹源的博客
  到这里理论上已经完成了,但是!!完成上述工作后编译速度会变慢,所以要在build.gradle中加入如下内容:
[Android杂谈]导入jar包和aar以及可能出错的解决方法 - 尹源 - 尹源的博客
  加入后确实变快了一些。至此,终于解决了这个问题。
另外:有一篇内容讲这个讲的很全面,这里附上链接 《其实你不知道MultiDex到底有多坑》

猜你喜欢

转载自blog.csdn.net/woaily1346/article/details/80792574