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 知识要点整理(13)----网络连接

Android 知识要点整理(12)----Animation(动画)

Android知识要点整理----控制相机

Android 知识要点整理(13)----网络连接

Android 知识要点整理(12)----Animation(动画)

Android知识要点整理----文件分享