Android Studio 使用 Gradle 做为生成的工具在 Dependency 的管理上,节省掉很多烦人的工作,让引用 Library 变成极为单纯的作业,也让开发人员可以更专注在重要的事项。如同在“使用 Android Studio 开发 Web 程序 - 设定共用库”或这篇中提到,项目透过 Gradle 的功能,要引用 Project 以外的 Library,只要在 build.gradle
中提供 Library 的识别名称及对应版本编号,即可透过预先配置好的 Repository 来自动取得 jar,不需要再由人工下载、更新。
以下是一个简易的引用演示:
dependencies {
// //www.greatytc.com/u/fea63707e07f
compile 'com.android.support:appcompat-v7:24.2.1'
}
就算是公司内部自行开发的 Library,也能在编译、输出 jar 后,上传到私有的 Repository 中。再经由同样的模式,在 build.gradle
中新增私有 Repository、要引用的 Library 资讯,就可以于 Coding 时使用 Library 中的功能。
例如:
repositories {
maven {
// //www.greatytc.com/u/fea63707e07f
url "http://192.168.1.1”
}
}
更多深入的文章请参阅简书 //www.greatytc.com/u/fea63707e07f 或 wznote.blogspot.com
纵使利用 Repository 的形式来管理 Dependency 可以满足大部份的开发需求,但仍然有一些情境之下必须要使用独立的 jar 来做为 Dependency。像是有一些小型的团队,可能没有足够的资源来设置自己私有的 Repository,可是还是有跨项目共用功能的需求,这时就只能透过 jar 或共用 Android Studio 的 Module 来达成。
所幸在 Gradle 的设定中,除了使用 Repository 之外,还提供直接引用 jar 的配置方法。在 Android Studio 预设产生的 build.gradle
中都会有以下的内容:
dependencies {
// //www.greatytc.com/u/fea63707e07f
compile fileTree(include: ['*.jar'], dir: 'libs')
}
这个内容代表了只要把 jar 的文件放到 Project 结构中名为 libs
的目录下,在 Coding 时就可以直接使用 jar 内提供的功能。
只是光这样还是会有一些不足之处,若是以开发为业,势必不可能只有一个 Project。团队内部共用的 jar 在每开一个 Project 就要再复制一份到其下的 libs
目录中,似乎不是一个好的 Dependency 管理模式,而把 jar 集中在所有项目之外的需求就应运而生。
这时就出现了一个疑问,原先的配置只有把 jar 放在 Project 内的 libs
之下,在 Project 之外的 jar 要如何设定 Dependency?
面对这一个问题,其实解决的方法也很简单。之前 build.gradle
的例子中,dir: 'libs'
代表的是相对于 Project 的位置,也就是在 Project 之下的 libs 路径。当 jar 在 Project 之外时,只要调整内容为 Project 之上的路径即可。
dependencies {
// //www.greatytc.com/u/fea63707e07f
compile fileTree(include: ['*.jar'], dir: ‘../../shared’)
}
以上面的例子来说,是假定所有的共用 jar 都被放在与 Project 平行的 shared
路径之下,以下是目录结构的示意:
+ Project A
+ app
+ libs
+ src
+ androidTest
+ main
+ test
+ Project B
+ app
+ libs
+ src
+ androidTest
+ main
+ test
+ shared
- *.jar
透过以上的方式,就可以达成类似 Repository 的效果,当 shared
内的 jar 被更新后,Project A 与 Project B 都可以在 Source Code 中使用最新的功能。而当这二个 Project 所使用的 jar 有版本不一致的情况时,只要分别把对应版本的 jar 放到所属 Project 的 libs 路径下即可。
更多深入的文章请参阅简书 //www.greatytc.com/u/fea63707e07f 或 wznote.blogspot.com