Android知识要点整理(17)----Gradle 之自定义构建
Posted znapast
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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'
通过以上这些定制方法,我们可以非常灵活地控制构建过程。
以上是关于Android知识要点整理(17)----Gradle 之自定义构建的主要内容,如果未能解决你的问题,请参考以下文章
Android 知识要点整理(12)----Animation(动画)