在我们的项目中,或我或少都会用到一起第三方的库,那么对它的管理也就成为了项目中的一部分。这里就介绍下在Android Studio中如何去管理项目中的库和它们的依赖。
如何添加一个库
Android Studio中添加一个库有三种方法
第一种,直接拷贝到libs目录下
如图先把ja包拷贝到module中的libs目录下,然后点击如下图中所示按钮(Sync Project with Gradle Files)。完成,很简单的,这是常用的做法。
第二种, 在Project Structure中添加
打开Project Structure(File->Project Structure… 或者 ctrl+alt+shift+S),选择要添加的module, 选择Dependencies。
点击右边绿色的“+”号。
- 选择File dependency, 可以选择添加该Project下面的库文件。选择Module dependency, 可以选择Project下的依赖Module.
- 点击确定就可以添加。
打开Module下的build.gradle文件,我们可以看到,这里新增加了我们添加的库,当然你也可以直接修改这个文件。
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:design:23.1.1'
compile files('libs/universal-image-loader-1.9.4.jar')
compile project(':app2')
}
另外说一句,module库中build.gradle的申明为com.android.library
apply plugin: 'com.android.library'
第三种, 使用”Library dependency“方式添加
相信有人注意到了,在Project Structure中点击绿色的“+”号,会出现三种选择,在前面我介绍了其中两种,但我把“Library dependency”这个选择规入了第三种添加方式。原因是这里我们并不会直接去操作jar包,而是把它交给了Gradle去管理。我们先来看下怎么去添加,这里我以Google的gson为例:
1. 打开在Project Structure->Module->Dependencies->”+”->Library dependency。输入你要添加的jar包名字,可输入关键字,点击搜索。
2. Gradle会去搜索合适的库,选择你想到的库,点击确定。
3. 点击确定。
来看下Module的build.gradle文件, 可以看到,这里的gson并没有看到libs\之类的路径,你在libs或者module中也找不到对应的jar文件。
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:design:23.1.1'
compile files('libs/universal-image-loader-1.9.4.jar')
compile project(':app2')
compile 'com.google.code.gson:gson:2.5'
}
那么这个jar包在哪里呢?注意项目下面的External Libraries,展开它,原来它跑到这里来了。选中gson,点击右键,选择Library Properties…,可以看到,原来它的jar包下载到了这里。我们还可以对它进行管理,附加javadoc或者soure等等。
这不是很方便呢,如果第三方库有更新的版本了,也可以方便的去替换。那么还有个问题,这些jar包是从哪里去下载的呢?
还记得下Project中的build.gradle中的这句话吗,Android Studio就是从build.gradle里面定义的Maven仓库服务器上下载library的。jcenter 就是一个标准的Android library文件服务器,所有通过gradle导入的jar包都是从http://bintray.com/bintray/jcenter这个仓库上扒下来的。如果你需要的jar包在这个网站上没有,那就无法通过gradle的方式来导入。
allprojects {
repositories {
jcenter()
}
}
除此之外,我们还可以分享自己的Library到jcenter上,还可以自己定义特有的Maven仓库服务器,这里就没有去研究了。
好了,添加库到这里就说完了,至于如何删除一个库就很简单了,你可以在Project Structure中去删除,也可以在build.gradle中去删除。这里就不用多说了。
另外还可以修改依赖的顺序,同样的都可以在Project Structure或者build.gradle中做修改,也没有啥子多说的。
依赖范围
在Project Structure->Dependencies中,每一个库后面都有一个Scrope选项,这有什么用呢。
Dependency scope 是用来限制Dependency的作用范围的, 影响项目在各个生命周期时导入的库的状态。
compile:默认选项,是对所有的build type以及favlors都会参与编译并且打包到最终的apk文件中。
provided:是对所有的build type以及favlors只在编译时使用,类似eclipse中的external-libs,只参与编译,不打包到最终apk。
APK:只会打包到apk文件中,而不参与编译,所以不能再代码中直接调用jar中的类或方法,否则在编译时会报错。
Test compile:针对单元测试代码的编译编译以及最终打包测试apk时有效,而对正常的debug或者release apk包不起作用。
Debug compile:针对debug模式的编译和最终的debug apk打包
Release compile:针对Release 模式的编译和最终的Release apk打包。