Gradle构建配置

1.  介绍

       Gradle是Java世界里最受欢迎的构建工具之一,基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置,并且可以通过扩展来支持其他语言(例如c++)。Google的Adroid团队2013年宣布使用gradle为首选的构建工具,如今的Android开发已经离不开gradle的各种配置,虽然Android Studio等IDE会为我们自动生成一些默认的gradle配置,但是在项目规模扩大、内部或外部依赖变多之后,了解gradle配置的意义变得至关重要。

       本文主要介绍Android项目中主要的gradle配置文件及常用的配置方法,配置的含义与用法在配置文件的注释中。

2.  Android项目结构

使用Android Studio构建Android项目时,主要的gradle配置文件有settings.gradle, build.gradle(project), build.gradle(module)。


3.  Gradle 设置文件

settings.gradle 文件位于项目根目录,用于指示 Gradle 在构建应用时应将哪些模块包括在内。对大多数项目而言,该文件很简单,只包括以下内容:

include ‘:app’

不过,多模块项目需要指定应包括在最终构建之中的每个模块。

4.  顶级构建文件

       顶级 build.gradle 文件位于项目根目录,用于定义适用于项目中所有模块的构建配置。默认情况下,这个顶级构建文件使用 buildscript {} 代码块来定义项目中所有模块共用的 Gradle 存储区和依赖项。以下代码示例描述的默认设置和 DSL 元素可在新建项目后的顶级 build.gradle 文件中找到。

 

/**
 * buildscript 块是用来配置仓库及gradle自身的依赖,这代表你不应该在这里引用你自身
 * 项目的依赖。例如,这个配置块引用了Android的gradle插件来提供额外的gradle构建
 * Android的功能
 */
 
buildscript {
 
    /**
     * repositories块配置了用来查找和下载依赖的Gradle仓库,gradle预支持的远程仓
     * 库例如Jcenter、MavenCentral、和Ivy。你也可以使用自己的本地库或者定义你自
     * 身的远程库。默认使用JCenter作为仓库
     */
 
    repositories {
        jcenter()
        // 表示maven仓库中心
        mavenCentral()
        // 表示maven本地仓库
        mavenLocal()
        /**
         * 指定了具体的maven远程仓库
         */
        maven {
            url"https://repo.example.com/maven2"
        }
        /**
         * 指定了本地的maven仓库
         */
        maven {
            url "file://local/repo/"
        }
    }
 
    /**
     * dependencies块配置了构建项目时的依赖,下面的一行表示添加了gradle的
     * Android插件作为一个classpath依赖
     * 关于dependencies的具体类型参见模块级配置处的依赖
     */
 
    dependencies {
        classpath'com.android.tools.build:gradle:2.3.2'
    }
}
 
/**
 * allprojects块配置了你项目里所有模块用到的库和依赖,比如第三方插件或者库。不被所
 * 有项目用到的插件或库应该在模块级下的build,gradle文件里。Android Studio 默认使用
 * Jcenter作为默认库。
 */
 
allprojects {
    repositories {
        jcenter()
    }
}
 
/**
 * 配置在项目下的所有模块的公用的构建选项
 */
ext {
    compileSdkVersion = 25
    buildToolsVersion = "25.0.3"
    supportLibVersion = "25.3.1"
 
    /**
     * 参见模块级build.gradle
     */
}

 

5.  模块级构建文件

模块级 build.gradle 文件位于每个 <project>/<module>/ 目录,用于配置适用于其所在模块的构建设置。您可以通过配置这些构建设置来提供自定义打包选项(例如附加构建类型和产品风味),以及替换 main/ 应用清单或顶级 build.gradle 文件中的设置。

以下这个示例 Android 应用模块 build.gradle 文件概述了您应该了解的部分基本 DSL 元素和设置。

 

/**
 * 构建文件的第一行配置了gradle构建时使用的android插件并且使得android块可以配置
 * 特定的构建选项
 */
apply plugin: 'com.android.application'

/**
 * android块配置了特定的构建选项
 */

android {

    /**
     * compileSdkVersion 规定了编译时使用的API版本。这代表你的app可以使用这个版本或更低的api
     */
    compileSdkVersion 25

    /**
     * buildToolsVersion 规定了gradle用来构建你的项目的构建工具、命令行工具、编译器的
     * 版本。你应该使用SDKmanager工具下载对应的构建工具
     */
    buildToolsVersion "25.0.3"

    /**
     * defaultConfig块封装了所有构建变体的默认设置和实体,并且可以由构建系统动态的覆盖
     * main/AndroidManifest.xml清单文件里的一些属性。你可以配置项目特性来覆盖这些特性在不同版本中的值
     */

    defaultConfig {

        /**
         * applicationId 是用来唯一识别你的发布的包,然而,这里应该参照在
         * main/AndroidManifest.xml清单文件里定义的包名
         */

        applicationId 'com.example.myapp'

        // 定义了app运行需要的最低api版本
        minSdkVersion 15

        // 定义了app测试时的api版本
        targetSdkVersion 25

        // 版本数字
        versionCode 1

        //版本号
        versionName "1.0"

        //版本后缀
        versionNameSuffix "-default"

        //应用ID后缀
        applicationIdSuffix '.dafault'
    }

    /**
     * buildTypes 块配置了许多的构建类型。默认情况下,构建系统定义了两种类型:debug和release。
     * debug构建类型不会显示的展示在默认的构建配置中,但是会被debugging工具所依赖并且附上debug签名。
     * release构建类型使用了Proguard设置并且默认情况下没有签名
     */

    buildTypes {

        /**
         * 默认情况下,Android Studio配置了代码压缩,并且指定了Proguard的设置文件
         * 要尽可能减小 APK 文件,您应该启用压缩来移除发布构建中未使用的代码和资源
         * 代码压缩通过 ProGuard 提供,ProGuard 会检测和移除封装应用中未使用的类、字段、方法和属性,
         * 包括自带代码库中的未使用项ProGuard 还可优化字节码,移除未使用的代码指令,
         * 以及用短名称混淆其余的类、字段和方法。
         */
        release {
            minifyEnabled true //为release版本启动代码压缩
            /**
             * getDefaultProguardFile()方法可从Android SDK tools/proguard/ 文件夹获取的ProGuard设置。
             * proguard-rules.pro文件用于添加自定义ProGuard规则。默认情况下,该文件位于模块根目录(build.gradle 文件旁)。
             * 具体的代码压缩参照 https://developer.android.com/studio/build/shrink-code.html
             */
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

            /**
             * 添加构建域,需要的3个字段依次为 <type> <name> <value>
             * 为生成的BuildConfig类里添加一个字段
             */
            buildConfigField "String", "DEMO-URL", "\"http://example.com/demo\""
        }

        customBuildType {
            /**
             * 表示复制某个buildTypes的所有参数,如这里复制了debug类型的所有参数
             */
            initWith debug
        }
    }

    /**
     * productFlavors块配置了多个产品的flavor(应叫做口味,可以当做产品的功能特点),
     * 这允许你可以覆盖defaultConfit配置来为你的app创建不同的版本。productFlavors是可选的,
     * 并且构建系统不会自动的创建他们,这个例子创建了一个免费和一个付费的产品,
     * 每个产品制定了其自身的应用ID,所以他们可以同时存在与Google Play Store或Android设备上。
     */

    productFlavors {
        free {
            applicationId 'com.example.myapp.free'
        }

        paid {
            applicationId 'com.example.myapp.paid'
        }
    }

/**
 * dependencies块配置了模块级别的依赖,只在本模块内使用
 * 依赖类型主要分为本地库模块依赖、本地二进制依赖、远程二进制依赖
 * 使用compile添加依赖
 *
 */

    dependencies {
        /**
         * 本地库模块依赖
         * 本地项目中需要有一个模块名为lib
         */
        compile project(":lib")
        /**
         * 远程二进制依赖
         * 根据配置好的仓库查找对应的依赖
         */
        compile 'com.example.android:app-magic:12.3'
        //以上也可以显示的指定为group name version
        compile group: 'com.example.android', name: 'app-magic', version: '12.3'
        /**
         * 本地二进制依赖
         * 因为gradle读取路径时是相对于build.gradle文件的,所以这个配置告诉构建系统需要添加位于
         * moduleName/libs/下的jar文件为依赖
         */
        compile fileTree(dir: 'libs', include: ['*.jar'])
        //上一个也可以定义为这样
        compile files('libs/foo.jar', 'libs/bar.jar')

        /**
         * 可以指定只在测试阶段添加的依赖
         */
        testCompile 'junit:junit:4.12'
    }
}


更多的配置相关内容待续...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值