Android Studio引用第三方库很方便,只需要一句代码就可以搞定,几种引用第三方库的方式,总结一下:
方式:1:它就会自动把这个包下载下来,并且引用它。节省git空间,而且修改版本也很方便。
compile 'com.android.support:support-v4:23.3.0'
方式2:引用libs下所有jar包
compile fileTree(dir: 'libs', include: ['*.jar'])
方式3:引用一个jar
compile files('libs/fastjson-1.1.53.android.jar')
方式4:引用一个aar文件,注意并不能像 方式2 那样自动引用全部的aar,而需要对每个aar分别进行引用。
compile(name: 'aar_file_name', ext: 'aar')
方式5:引用库类型的项目
compile project(':xxxsdk')
方式6:仅仅在编译时使用,但最终不会被编译到apk或aar里
provided files('libs/glide-3.7.0.jar')
三、使用。
1. *.jar文件使用。
*.jar文件拷贝到libs目录,eclipse直接导入即可,AndroidStudio项目中添加:
1. dependencies {
2. compile fileTree(include: ['*.jar'], dir: 'libs')
3. }
重新编译即可完成。
2. *.aar文件使用。
*.aar文件使用有两种方式,一种是使用在线的(网上的),一种是添加本地的*.aar文件。网络加载,只要你知道*.aar文件在maven中的路径即可,此处不演示了。下面主要看看在Android Studio中如何加载本地的*.aar文件。
(1).把aar文件放在一个文件目录内,比如就放在libs目录内;
(2).在app的build.gradle文件添加如下内容;
1. repositories {
2. flatDir {
3. dirs 'libs'
4. }
5. }
(3).之后只需要添加一句gradle依赖便方便的引用了该aar文件;
1. dependencies {
2. ...
3. compile(name:'test', ext:'aar')
4. ...
5. }
至此,在Android Studio中加载本地的*.aar文件就结束,是不是很简单呢!需要补充一点,如果*.aar文件中引用了其他Maven 仓库的包,那么需要在gradle中添加依赖,否则在运行的时候,可能会报“Caused by: Java.lang.ClassNotFoundException”!
可能有的朋友还有疑问,“如何在Eclipse中使用aar文件“”,这里就不讲解了,建议尽快更换为Android Studio吧!
四、小结。
在什么情况下使用*.jar文件?在什么情况下使用*.aar文件呢?
如果你只是一个简单的类库那么使用生成的*.jar文件即可;如果你的是一个UI库,包含一些自己写的控件布局文件以及字体等资源文件那么就只能使用*.aar文件。
五.在Android Studio的使用过程中,发现这么一个问题:
创建项目后,会生成第一个module:app。
module:app 依赖了 module:b
module:b 依赖了 module:c
如果没有特殊依赖,此时编译是不会产生任何问题的。
接着,module:b 依赖 b/libs/xxx.aar。按常规处理,在b的build.gradle文件中应该添加
dependencies {
compile(name: ‘xxx’, ext: ‘aar’)
}
repositories {
flatDir {
dirs ‘libs’
}
}
此时b可以正确依赖xxx.aar
此时编译,发现报错,提示:app的build.gradle中木有找到xxx.aar
(因为app依赖了b,所以对于b中的依赖得完全能找到,所以此时要在app的build.gradle中添加依赖)
dependencies {
compile(name: ‘xxx’, ext: ‘aar’)
}
repositories {
flatDir {
dirs ‘libs’
}
}
此时编译,发现仍然报错,提示:app的build.gradle中木有找到xxx.aar 并没有什么卵用啊
(在网上一篇文章的帮助下发现,那是因为flatDir指定的路径是libs,只会在app本身的libs中查找,为了找到b中的xxx.aar,得提供正确路径)
理所当然的采用相对路径
dirs ‘../b/libs’
再次编译,成功执行
如果此时c中又有aar需要依赖肿么办?或者app本身有aar肿么办?那就是同时指定不同的查找路径
repositories {
flatDir {
dirs ‘libs’,‘../b/libs’,‘../c/libs’
}
}