详解Android项目中的三个gradle文件
前言
使用 Android studio 开发 Android 项目时,接触gradle 是必不可少的,比如引入依赖,配置签名信息等。当我们创建一个新的工程,Android studio 会默认帮我们创建三个Gradle文件,一个settings.gradle 文件,两个build.gradle 文件,build.gradle 文件分别别放在 project 工程的根目录和module目录下,下面我们就来揭开Gradle 的神秘面纱吧。
首先来看一下studio 新建项目的文件目录结构图:
settings.gradle
settings.gradle 的作用就是一些模块被包含过后,就需要在这里声明:
include ':app'
include ':app', ':demo'
1
2
包含多个模块用 “,” 隔开,settings.gradle文件将会在初始化时期执行。
project 根目录下的 build.gradle文件
该gradle文件是定义在这个工程下的所有模块的公共属性,它默认包含二个方法:
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.0-beta2'
}
}
allprojects {
repositories {
google()
jcenter()
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
buildscript方法是定义了全局的相关属性,repositories定义了jcenter作为仓库。一个仓库代表着你的依赖包的来源,例如maven仓库。dependencies用来定义构建过程。这意味着你不应该在该方法体内定义子模块的依赖包,你仅仅需要定义默认的Android插件就可以了,因为该插件可以让你执行相关Android的tasks。
allprojects方法可以用来定义各个模块的默认属性,你可以不仅仅局限于默认的配置,未来你可以自己创造tasks在allprojects方法体内,这些tasks将会在所有模块中可见。
module 目录下的 build.gradle 文件
module模块内的gradle文件只对该模块起作用,而且其可以重写任何的参数来自于根目录下的gradle文件。在编写程序的时候,有时候我们需要兼容不同系统版本的手机来进行真机测试,所以有时候我们需要修改sdk或者其他的东西的版本号,这时候我们就需要了解build.gradle文件了,该模块文件应该是这样:
apply plugin: 'com.android.application'//说明module的类型,com.android.application为程序,打包得到的是.apk。com.android.library为库,打包得到的是.aar。
android
{
compileSdkVersion 25//编译的SDK版本
buildToolsVersion "25.0.0"//编译的Tools版本
defaultConfig
{//默认配置
applicationId "com.test"//应用程序的包名
minSdkVersion 14//支持的最低版本
targetSdkVersion 22//支持的目标版本
versionCode 1//版本号
versionName "1.0.0"//版本名
}
sourceSets {//目录指向配置
main
{
manifest.srcFile 'AndroidManifest.xml'//指定AndroidManifest文件
java.srcDirs = ['src']//指定source目录
resources.srcDirs = ['src']//指定source目录
aidl.srcDirs = ['src']//指定source目录
renderscript.srcDirs = ['src']//指定source目录
res.srcDirs = ['res']//指定资源目录
assets.srcDirs = ['assets']//指定assets目录
jniLibs.srcDirs = ['libs']//指定lib库目录
}
debug.setRoot('build-types/debug')//指定debug模式的路径
release.setRoot('build-types/release')//指定release模式的路径
}
signingConfigs
{//签名配置
release
{//发布版签名配置
storeFile file("E:/test.jks")//密钥文件路径
storePassword "123"//密钥文件密码
keyAlias "test"//key别名
keyPassword "123"//key密码
}
debug
{//debug版签名配置
storeFile file("test.jks")
storePassword "123"
keyAlias "test"
keyPassword "123"
}
}
buildTypes
{//build类型
release {//发布
minifyEnabled true//混淆开启
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'//指定混淆规则文件
signingConfig signingConfigs.release//设置签名信息
}
debug {//调试
signingConfig signingConfigs.release
}
}
packagingOptions
{
exclude 'META-INF/ASL2.0'
exclude 'META-INF/LICENSE'
exclude 'META-INF/NOTICE'
exclude 'META-INF/MANIFEST.MF'
}
lintOptions
{
abortOnError false//lint时候终止错误上报,防止编译的时候莫名的失败
}
//android studio 3.0支持java8特性
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
lintOptions {//设置跳过翻译
disable 'MissingTranslation'
}
flavorDimensions "color"
productFlavors {
baidu {}
xiaomi{}
yyb {}
huawei {}
}
productFlavors.all {
flavor -> flavor.manifestPlaceholders = [ChannelName: name]
}
//打包apk重命名
applicationVariants.all { variant ->
SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd")
def dateFlag = dateFormat.format(new Date())
variant.outputs.all {
def flavorFlag = variant.flavorName
def newName = "yzb_" + dateFlag + "_v" + variant.versionName + "_" + variant.versionCode + "_" + flavorFlag + ".apk"
outputFileName = newName
}
}
}
dependencies
{
compile fileTree(dir: 'libs', exclude: ['android-support*.jar'], include: ['*.jar']) //编译lib目录下的.jar文件
compile project(':demo')//编译附加的项目
//glide图片加载框架
compile 'com.github.bumptech.glide:glide:3.7.0'
}
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
这就是我对 Android 项目中Gradle的理解,如有不足,欢迎留言指正,谢谢~~
————————————————
版权声明:本文为CSDN博主「fyjc_wlj」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_30461311/article/details/77775421