美文网首页Android开发经验谈Android技术知识Android知识
[Gradle for Android 笔记系列]一 、理解 G

[Gradle for Android 笔记系列]一 、理解 G

作者: GYLEE | 来源:发表于2017-12-17 17:41 被阅读76次

    本文内容主要来源:Gradle for Android (中文版)

    Gradle 虽然每天都在自己的眼皮底下,也大致知道他们的作用,但是比较笼统,这件事情怎么允许发生呢,所以自己具体学习 Gradle ,主要依托 Gradle for Android (中文版) 这本书,大致记录大致,以供回头翻看。

    在 Android 项目中的 Gradle的三个文件,他们分别是setting.gradle 以及位于项目根目录和app模块根目录的build.gradle

    1、setting.gradle 文件

    作用setting.gradle 文件在初始化阶段被执行,主要的功能时定义了哪些模块应该被包含在构建内。

    Include ':app',':library'
    

    从此文件内容可以知晓该项目有两个模块:app 和 library
    注意: 在单模块项目中 setting.gradle 不一定需要,但是在多模块的项目中该文件必须存在,否则,Gradle 将不知道哪个模块包含在构建中。

    2、顶部构建文件 -- build.gradle

    作用:配置所有模块的参数。

    // Top-level build file where you can add configuration options common to all sub-projects/modules.
    buildscript {
        repositories {
            jcenter()
            mavenCentral()
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:2.2.0'
        }
    }
    
    allprojects {
        repositories {
            jcenter()
            mavenCentral()
        }
    }
    task clean(type: Delete) {
        delete rootProject.buildDir
    }
    

    在项目中,所有模块的配置参数都应该在此文件中配置,默认有两个代码块 buildscript {}allprojects{}

    • 实际的配置在buildscript{}代码块中,repositories代码jcenter() 、mavenCentral()配置成一个仓库,在这种情况下一个仓库则代表一系列的依赖包,或者说,在我们的应用和依赖项目中可使用的一系列可下载的函数库。
    • dependencies {}代码块则用于配置构建过程中的依赖包,这也就意味着你不能将你的应用或依赖项目所需要的依赖包包含在顶层构建文件中。默认情况下,唯一被定义的依赖包是 Gradle 的Android 插件。原因是每个模块都需要有 Android 插件,因为该插件可使其执行 Android 相关的任务。
    • allproject{}代码块可以用来声明那些需要被用于所有模块的属性

    3、项目中的构建文件

    作用:模块层面的 build.gradle文件属性只能应用于 Android app 模块,它可以覆盖顶层 build.gradle 文件的任何属性。示例如下:

    apply plugin: 'com.android.application'
    
    android {
        compileSdkVersion 26
        defaultConfig {
            applicationId "com.xxxx.xxxx"
            minSdkVersion 21
            targetSdkVersion 26
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }
    
    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        implementation 'com.android.support:appcompat-v7:26.1.0'
        testImplementation 'junit:junit:4.12'
    }
    

    该文件中主要的三个代码块分别为:

    3.1、插件

    该文件的第一行用到了 Android 应用插件,该插件在顶层构建文件中被配置成依赖。

    3.2、Android {}

    在该文件中,此部分占比最大,该代码块包含了全部的 Android 特有配置。这些配置之所以可以被使用,是因为我们之前使用了 Android 插件(具体的属性,不展开写了,太多了,(ˇˍˇ) )。

    3.3. dependencies{} - 依赖包

    依赖代码块是标准 Gradle 配置的一部分,所以它被单独放在 android{}代码块以外,其定义了一个应用或者一个本地项目依赖库的所有的依赖包。

    4、总结

    setting.gradle:定义了哪些模块应该被包含在构建内。
    build.gradle(顶层):配置所有模块的参数。
    build.gradle(模块):配置所有所属模块的参数。

    相关文章

      网友评论

        本文标题:[Gradle for Android 笔记系列]一 、理解 G

        本文链接:https://www.haomeiwen.com/subject/haaywxtx.html