Android知识要点整理(17)----Gradle 之自定义构建

通过Gradle,我们可以灵活地定制构建中的变量,从而方便灵活地控制构建过程。

1.理解三个文件

Gradle项目有3个重要的文件需要深入理解:项目根目录的build.gradle,settings.gradle和模块目录的build.gradle

  • 1.settings.gradle文件会在构建的initialization阶段被执行,它用于告诉构建系统哪些模块需要包含到构建过程中。对于单模块项目,settings.gradle文件不是必需的。对于多模块项目,如果没有该文件,构建系统就不能知道该用到哪些模块。更详细的用法见https://gradle.org/docs/current/dsl/org.
    gradle.api.initialization.Settings.html
  • 2.项目根目录的build.gradle文件用来配置针对所有模块的一些属性。它默认包含2个代码块:buildscript{...}allprojects{...}。前者用于配置构建脚本所用到的代码库和依赖关系,后者用于定义所有模块需要用到的一些公共属性。
  • 3.模块级配置文件build.gradle用于配置只应用于本模块的一些属性 ,它可以重写在项目根目录中定义的一些全局属性。它有3个重要的代码块:plugin,android 和 dependencies

2.定制清单项(manifest entries)

我们已经知道,通过gradle可以直接设置applicationId, minSdkVersion,targetSdkVersion, versionCode, 和versionName 。除此之外,我们还可以设置如下一些清单属性:

  • testApplicationId:为测试用apk 设置应用ID;
  • signingConfig:签名配置;
  • proguardFile:混淆配置。

3.定制编译常量和字符串

从SDK tool 17 开始,编译工具在编译时会生成BuildConfig类,这个类里包含一些编译相关的常量,比如DEBUG常量是一个BOOL值,表示当前的buildType 是否是debug,通过这个常量,我们可以在代码中控制Log只在DEBUG版本的APK中打印。我们甚至可以扩展BuildConfig类,定义自己的一些常量。实例方法如下:

android {
    buildTypes {
        debug {
            buildConfigField "String", "API_URL",
                    "\"http://test.example.com/api\""
            buildConfigField "boolean", "LOG_HTTP_CALLS", "true"
        }
        release {
            buildConfigField "String", "API_URL",
                    "\"http://example.com/api\""
            buildConfigField "boolean", "LOG_HTTP_CALLS", "false"
        }
    }
}

上面的代码定义了2个常量,一个是服务器URL,一个是日志调用开关。它们在debug版本和release版本中拥有不同的值。语法如下:

buildConfigField "{常量类型}" "{常量名称}" "{常量值}"

特别注意的是,如果常量类型是String,则常量的值是要带双引号的。

除了定制BuildConfig类的常量,在新版编译工具中,我们还可以定制res资源。如下所示:

android {
    buildTypes {
        debug {
            resValue "string", "app_name", "Example DEBUG"
        }
        release {
            resValue "string", "app_name", "Example"
        }
    }
}

定义res资源用到的关键字是resValue,语法和上面一样,也是类型,名称,值。支持整型,布尔型,字符串等类型。但是这里的字符串类型的值本身不需要带上双引号。因为在res资源定义中,它的值总是由双引号包围着的。

4.定制项目属性(project properties)

在项目根目录的build.gradle配置文件中,我们可以定制适用于所有模块的属性,通过ext 代码块来实现。如下所示:

ext {
    compileSdkVersion = 22
    buildToolsVersion = "22.0.1"
}

然后我们可以在模块目录的build.gradle配置文件中引用这些属性,引用语法为rootProject.ext.{属性名}。如下:

android {
    compileSdkVersion rootProject.ext.compileSdkVersion
    buildToolsVersion rootProject.ext.buildToolsVersion
}

此外,在项目根目录的build.gradle配置文件中,我们可以定义默认的task,示例如下:

defaultTasks 'clean', 'assembleDebug'

除了在build.gradle文件中定制属性外,还可以在项目根目录的gradle.properties或者local.properties文件中定制属性。语法如下所示:

propertiesFile = Hello from gradle.properties

同时我们在命令行执行task时也可以定制属性,使用-P参数指定参数名和参数值,如下:

$ gradlew printProperties -Pcmd='Hello from the command line'

通过以上这些定制方法,我们可以非常灵活地控制构建过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值