美文网首页
Gradle构建配置

Gradle构建配置

作者: Youth_Fly | 来源:发表于2017-05-28 01:48 被阅读0次

    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 文件位于每个 // 目录,用于配置适用于其所在模块的构建设置。您可以通过配置这些构建设置来提供自定义打包选项(例如附加构建类型和产品风味),以及替换 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个字段依次为

    * 为生成的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'

    }

    }

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

    相关文章

      网友评论

          本文标题:Gradle构建配置

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