欢迎光临~湖南智能应用科技有限公司-hniat.com
语言选择: 中文版 ∷  英文版

基础知识

详解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
关闭
用手机扫描二维码关闭
二维码