简单理解Android Studio中的gradle文件

在一个Android Studio项目中有三个gradle相关文件需要注意:

  1. 项目根目录下的build.gradle

  2. 根目录下的settings.gradle

  3. 子文件夹下的build.gradle

在这里插入图片描述
Android Studio的Project其实是一个工作文件夹,而不仅仅供一个APP开发,相反可以在其中创建多个互不相关的APP, 表达上用module指代APP。
在这里插入图片描述

在这里插入图片描述

  1. 其中根目录下的build.gradle是整个Project的共有属性;

  2. settings.gradle文件是描述此gradle文件都影响了哪些module(默认是所有Project下的module);

在这里插入图片描述
3. 而子文件夹下的gradle文件则是各个module私有的配置文件。

Gradle是一种依赖管理工具,基于Groovy语言,面向Java应用为主,它抛弃了基于XML的各种繁琐配置,取而代之的是一种基于Groovy的内部领域特定(DSL)语言。

通俗的说:gradle是打包用的。

它描述了APP所需要的环境,jar依赖关系,这样发布到不同的市场后可以很方便的生成apk。

逐行解释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'

包含多个模块用 “,” 隔开,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()
    }
}

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'
  }
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值