Android Studio常用Gradle操作

一、Gradle介绍
Gradle是一个高级构建系统和构建工具,允许通过插件自定义构建逻辑。Gradle的实质是配置脚本,执行一种类型的配置脚本时就会创建一个关联的对象,它由三种脚本类型构成,分别是构建脚本(Build Script)、初始化脚本(Init Script)及设置脚本(Settings Script),其对应的三种代理对象分别是Project对象、Gradle对象及Settings对象。

二、Gradle基础配置

  1. Android Studio对应工程目录
    Android Studio工程目录
  2. settings.gradle文件介绍
    该文件是全局的项目配置文件,里面主要声明一些需要加入gradle的module。
  3. build.gradle文件介绍
    该文件如果是面向工程的,一般用来存储构建脚本的版本来源及工程的仓库来源,如下图所示,指定的构建工具版本是gradle1.2.3,该工具及全局工程的仓库来源都是jcenter;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.2.3'
}
}

allprojects {
repositories {
jcenter()
}
}

而如果该文件面向的是对应的module,则一般指定的module类型,Android相关及依赖库,如下图所示为常用配置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
//module类型,常用的如:'com.android.application'、'com.android.library'、'java'、'maven'等。
apply plugin: 'com.android.application'

//Android常用配置
android {
//编译版本
compileSdkVersion 22
//构建工具版本
buildToolsVersion "22.0.1"
//默认配置
defaultConfig {
//应用包名
applicationId 'com.xyy.example'
//最小版本
minSdkVersion 15
//目标版本
targetSdkVersion 22
//应用版本号
versionCode 1
//应用版本名称
versionName "1.0"
//是否允许dex文件超过65535大小,默认打开
multiDexEnabled true
}
//指定编译版本
compileOptions{
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
//lint检查配置,默认关闭
lintOptions {
abortOnError false
}
//渠道指定
productFlavors {

}
//签名配置
signingConfigs {
//调试版本
debug {
storeFile file('×.keystore')
storePassword ×××
keyAlias ××××
keyPassword ×××
}
//发布版本
release {

//签名文件目录指定,相对于该module
storeFile file('×.keystore')
//签名密码
storePassword ×××
//Alias名称
keyAlias ××××
//Alias密码
keyPassword ×××
}
}
//构建类型配置
buildTypes {

debug {
buildConfigField("boolean", "LOG_DEBUG", "true")
versionNameSuffix "debug"
minifyEnabled false
zipAlignEnabled false
shrinkResources false
signingConfig signingConfigs.debug
}
release {
//添加buildConfig配置字段,可以设置日志打印开关字段,方便发布时自动关闭打印日志
buildConfigField("boolean", "LOG_DEBUG", "false")
//在生成的release版本APK后缀中添加"release"字段
versionNameSuffix "release"
//是否混淆(特别注意:如果混淆文件未配置使用false)
minifyEnabled false
//是否支持Zip Align
zipAlignEnabled true
//是否清理无用资源
shrinkResources true
//混淆文件指定
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
//签名指定
signingConfig signingConfigs.release
}
}
//相关源路径的设置
sourceSets{

main{
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
jniLibs.srcDirs = ['libs']
}
}
}

//依赖配置
dependencies {
//本地依赖文件树
compile fileTree(dir: 'libs', include: ['*.jar'])
//远程依赖
compile '...'
//远程编译时依赖库但不包含该库,防止重复包含引起包冲突
provided '...'
//本地依赖文件
compile files('...')
//本地编译时依赖文件,不包含该文件
provided files('...')
//本地依赖工程
compile project('...')
}

4 gradle.properties文件介绍
该文件一般用来存储工程范围内的全局属性,而如果是与开发者个人相关且不便纳入版本控制的属性,则放到 $HOME/.gradle 下的 gradle.properties 文件,比如签署app的密钥等。

三、多渠道打包配置

1.在AndroidManifest.xml中设置PlaceHolder(占位符)
在application下添加

1
2
3
4
5
<meta-data
android:name="渠道名称"
//渠道名称,可以使用android:value="${变量名}",假如变量名为XYY_FLAVORS,下面使用该变量进行说明
android:value="渠道ID"
/>

2.在对应module中的build.gradle文件中设置productFlavors(渠道信息)
首先在defaultConfig下设置默认渠道

1
manifestPlaceholders = [XYY_FLAVORS: "渠道ID"]

然后在android下指定需要打包的渠道信息

1
2
3
4
5
6
7
8
9
10
productFlavors {
渠道ID1 {}
渠道ID2 {}
渠道ID3 {}
渠道ID4 {}
...
}
productFlavors.all {
flavor -> flavor.manifestPlaceholders = [XYY_FLAVORS: name]
}

最后在buidTypes的release下指定发布时的渠道包名称

1
2
3
4
5
6
7
8
9
applicationVariants.all {
variant -> variant.outputs.each {
output -> def outputFile = output.outputFile
if(outputFile != null && outputFile.name.endsWith(".apk")){
def fileName = "xyy_v${defaultConfig.versionName}_${variant.productFlavors[0].name}.apk"
output.outputFile = new File(outputFile.parent, fileName)
}
}
}

3.使用assemble命令进行打包
使用./gradlew assemble+productFlavor+buildType进行打包,如:
./gradlew assembleBaiduRelease指定Baidu的release版本;
./gradlew assembleBaidu指定Baidu的release和debug版本;
./gradlew assembleRelease指定所有渠道的release版本;
./gradlew assemble指定所有渠道的release和debug版本。

四、Maven仓库管理配置
1、本地配置,针对所有该用户下所有工程
在$HOME/.gradle下添加init.gradle文件,这是Gradle初始化脚本,也是面向用户的全局配置,配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
allprojects{
repositories {
def REPOSITORY_URL = '本地仓库路径'
//主要逻辑是判定如果是maven2及jcenter仓库,都先执行本地仓库
all { ArtifactRepository repo ->
if(repo instanceof MavenArtifactRepository){
def url = repo.url.toString()
if (url.startsWith('https://repo1.maven.org/maven2') || url.startsWith('https://jcenter.bintray.com/')) {
project.logger.lifecycle "Repository ${repo.url} replaced by $REPOSITORY_URL."
remove repo
}
}
}
maven {
url REPOSITORY_URL
}
}
}

2、在对应工程的build.gradle配置

1
2
3
4
5
6
7
8
9
10
11
12
13
allprojects {
repositories {
maven{
credentials{
username '用户名'
password '密码'
}
url '本地仓库路径'
}
//jcenter()
//mavenLocal()
}
}

3、上传代码到本地仓库配置
在需要上传的module下的build.gradle中添加如下配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
apply   plugin:'maven'
uploadArchives{
repositories{
mavenDeployer{
//指定groupId,在仓库下展示为路径com/xyy/example
pom.groupId = "com.xyy.example"
//指定版本号
pom.version = "1.0.0"
repository(url: "本地仓库路径"){
authentication(userName: 用户名, password: 密码)
}
}
}
}

五、自动化测试配置
在需要进行测试的module下的build.gradle文件中添加

1
apply from: '../config/quality.gradle'

在工程下新建config文件夹,将如下路径https://github.com/xiaoyaoyou1212/vb-android-app-quality/tree/master/config下的文件下载后放置到该文件夹下,再在该工程下使用gradle findbugs、gradle checkstyle、gradle lint及gradle pmd进行代码检查,检查的结果会在build下的reports文件夹下。

六、参考链接

  1. Gradle插件用户指南(译)
  2. 拥抱Gradle:下一代自动化工具
  3. Gradle脚本基础全攻略
文章目录
,