使用Gradle构建Android应用
最近重读 Gradle for Android 一书,发现以前囫囵吞枣式的阅读只了解到点皮毛。重读一次,收获颇丰,想着结合实践,做做笔记。本文从统一配置依赖管理,高级配置,多模块构建,创建构建变体,运行测试,构建过程,创建任务和插件,Jenkins持续集成设置,这几个方面总结gradle是如何配置,构建,测试 Android项目的。
一、统一配置依赖管理
使用Android Studio开发Android 应用程序,首先接触到的是project和module这两个概念。简单理解,project是一个Android项目,一个项目里面有一个或多个module。划分模块的好处:
1. 便于分工合作;
2. 解耦,易于维护管理;
3. 复用,每个module都是相对独立的,可以在各个模块甚至别的项目中共用。
一般情况下,一个Android项目会有多个module,各个module可能会依赖相同的支持库,或者第三方库,如support library,gson等。而这些依赖库有不同的版本,如果引用的依赖库版本不一样就会有冲突。此外,每个module都可以设置minSdkVersion、targetSdkVersion、compileSdkVersion、buildToolsVersion,一般来说,同一个项目各个module的这几个设置需要一致。为了解决冲突,统一配置,方便依赖管理,有必要统一配置依赖管理。
1.1 创建config.gradle
可以在根目录的build.gradle中统一配置,也可以创建一个config.gradle文件,然后再根目录的build.gradle中引入。个人感觉创建一个config.gradle文件来管理会更加方便,所以本文采用这种方式。config.gradle和根目录的build.gradle在同一个目录。在根目录的文件头引入:
apply from: "config.gradle"
1.2 config.gradle
- ext.android 包含四个基本属性:compileSdkVersion,buildToolsVersion,minSdkVersion,targetSdkVersion。
- ext.supportDependencies 是需要引入的support library
- ext.thirdParty 是第三方库依赖
(PS:supportDependencies 和 thirdParty 明显是一回事嘛,这里只是为了突出Google提供的support library,完全可以把thirdParty 的内容定义在supportDependencies 内)
/**
* 在主项目的根目录下创建config.gradle文件
* 注意需要在根目录的build.gradle中进行引入:apply from: "config.gradle"
*/
ext {
android = [
compileSdkVersion: 26,
buildToolsVersion: "26.0.0",
minSdkVersion : 21,
targetSdkVersion : 26
]
supportLibrary = "26.+"
supportDependencies = [
supportAppcompatV7: "com.android.support:appcompat-v7:${supportLibrary}",
supportV4 : "com.android.support:support-v4:${supportLibrary}",
design : "com.android.support:design:${supportLibrary}",
constraintLayout: 'com.android.support.constraint:constraint-layout:1.0.0-alpha8'
]
thirdParty = [
fastJson : 'com.alibaba:fastjson:1.1.63.android',
fileDownloader : 'com.liulishuo.filedownloader:library:1.6.5',
mpAndroidChart : 'com.github.PhilJay:MPAndroidChart:v3.0.2',
retrofit : 'com.squareup.retrofit2:retrofit:2.3.0',
gsonConverter : 'com.squareup.retrofit2:converter-gson:2.0.0-beta4',
scalarConverter : 'com.squareup.retrofit2:converter-scalars:2.0.0-beta4',
rxJavaAdapter : 'com.squareup.retrofit2:adapter-rxjava2:2.2.0',
rxJava : 'io.reactivex.rxjava2:rxjava:2.1.3',
rxAndroid : 'io.reactivex.rxjava2:rxandroid:2.0.1',
eventBus : 'org.greenrobot:even