瞅瞅Gradle系列(二)-构建文件理解

当咱们在Android Studio中建立一个新项目时,会默认生成三个Gradle文件,其中settings.gradlebuild.gradle文件位于项目的根目录,另外一个build.gradle文件则位于项目的app模块中.html

settings.gradle

对于只包含一个Android应用的新项目来讲,settings.gradle中是这样的:java

include ':app'
复制代码

settings文件在初始化阶段被执行,而且其中定义了哪些模块应该包含在构建内(单项目模块能够没有settings文件,但多项目模块必须有,不然Gradle不知道哪一个模块应该包含在构建内).此时Gradle会为每一个settings文件建立一个Settings对象,并调用该对象的相关方法.android

Settings类

Settings类的官方解释是声明实例化和配置要参与构建的Project实例的层次结构所需的配置,而且settings文件和Settings对象之间存在一一对应关系.
Settings对象的目的之一是容许咱们使用Settings.include(java.lang.String[])方法将项目添加到构建中.api

build.gradle(根目录)

build.gradle用来配置模块的一些参数,默认状况下包含以下代码块:bash

buildscript {
    ext.kotlin_version = '1.3.50'
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.5.1'
    }
}

allprojects {
    repositories {
        jcenter()
    }
}
复制代码
  • buildscript代码块用于构建配置.
    • repositories代码块用于配置构建依赖的仓库地址
    • dependencies代码块用于配置构建过程当中的依赖包
  • allprojects代码块用来声明那些须要被应用于全部模块的属性

build.gradle(模块目录)

模块目录下的build.gradle文件的属性只能做用于Android app模块,其中的配置能够覆盖根目录的build.gradle文件中的任何属性.该模块的构建文件示例以下:app

apply plugin: 'com.android.application'

android {
    compileSdkVersion 29
    buildToolsVersion "29.0.2"
    defaultConfig {
        applicationId "io.sqms.study"
        minSdkVersion 15
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.1.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}
复制代码

插件

com.android.application代码为Android应用插件,该插件在根目录的构建文件中被配置成了依赖,提供构建、测试和打包应用以及依赖项目的全部任务.工具

android

android{}代码块包含了所有的Android的特有配置,使用这些配置前提条件是应用了上面说的插件.
必须有的属性是:测试

  • compileSdkVersion 用来编译应用的Android API版本.
  • buildToolsVersion 构建工具和编译器使用的版本号
defaultConfig

defaultConfig代码块用于配置应用的核心属性(注:此代码块中的属性可覆盖AndroidManifest.xml文件中对应的条目,若是没有在build.gradle文件中配置,那么AndroidManifest.xml文件中配置的则会生效).gradle

  • applicationId 会覆盖AndroidManifest.xml文件中的packagename
    • packagename有两个作用:
      • 做为应用的惟一标识
      • 在R资源类中被用做包名
    • 当咱们使用构建变体(variants)建立不一样版本的应用时,如免费版和付费版,此时若是想同时将这两个应用都安装到手机上或上传到应用商店,那么此时就须要有不一样的标识符,然而生成的R类和资源代码须要在任什么时候候都保持着相同的包名,不然全部源文件都要随之改变.AndroidManifest.xml文件中的packagename会继续使用在源代码和R资源类中,applicationId用来当作惟一标识.
  • minSdkVersion 用来配置运行应用的最小API级别
  • targetSdkVersion 用于告知系统该应用已经在某个指定Android版本经过测试,从而操做系统没必要启动任何向前兼容的行为
  • versionCode 定义版本号
  • versionName 版本名称
相关文章
相关标签/搜索