Gradle自定义构建

自定义构建

自定义构建构成的方式有很多种,当你在Android Studio中编写构建文件时,无论你在构建文件中自定义了什么,都应该同步该项目。当你开始添加依赖或BuildConfig变量时,同步将会变得尤为重要。

在你编写settings.gradle或build.gradle时,Android Studio将会在编辑器展示一条信息,通过导航到Tools|Android|Sync Project with Gradle Files,或单击工具栏上对应的按钮都可以触发同步。如图:
在这里插入图片描述

在底层,Android Studio同步实际上运行了generateDebugSources任务来生成所有必须的类。

操控manifest条目

我们可以直接通过构建文件而不是manifest文件来配置applicationId,minSdkVersion,targetSdkVersion,versionCode和versionName。另外,下面一些属性也是我们可以操作的:

  • testApplicationId:针对instrument测试APK的applicationId。
  • testInstrumentationRunner:JUnit测试运行器的名称,被用来运行测试。
  • signingConfig
  • proguardFile和proguardFiles

在Android Studio内部

不必手动修改构建文件,在Android Studio的Project Structure对话框中可以修改基本的设置。你可以通过File菜单打开对话框,对话框允许你修改项目范围内的设置和每个模块的设置。对于每个Android模块,你都可以修改Android插件的属性和所有manifest属性。如下图:
在这里插入图片描述

Android studio会把Project Structure对话框中所做的任何更改都写入Gradle构建配置文件中。

BuildConfig和资源

自SDK工具版本升级到17之后,构建工具都会生成一个叫做BuildConfig的类,该类包含一个按照构建类型设置值的DEBUG常量。如果有一部分代码你只想在debugging时期运行,比如logging,那么DEBUG会非常有用。你可以通过Gradle来扩展该文件,这样在debug和release时,就可以有不同的常量:

buildTypes {
        debug{
            buildConfigField "boolean","LOG","true"
        }
        release {
            buildConfigField "boolean","LOG","false"
        }
    }

项目范围的设置

如果在一个项目中,你有多个Android模块,并且没有人为修改每个模块的构建文件,而是将他们设置应用到所有模块,那么将变得非常有用。我们已经知道在生成的顶层构建文件中,allprojects代码块时如何定义依赖仓库的,你也可以使用相同的策略来运用Android特定的设置:

allprojects {
    
    apply plugin:"com.android.application"
    android{
        compileSdkVersion 22
        buildToolsVersion "22.0.1"
    }
}

改代码只有在你的所有模块都是Android app项目的时候才有效,因为你需要运用Android插件来获取Android特有的设置。实现这种行为的更好方式是在顶层构建文件中定义值,然后将他们应用到模块中。Gradle允许在Project对象上添加额外的属性。这意味着任何build.gradle文件都能定义额外的属性,添加额外属性需要通过ext代码块。你可以给顶层构建文件添加一个含有自定义属性的ext代码块:

ext{
    compileSdkVersion 22
    buildToolsVersion "22.0.1"
}

该段代码使得模块层的构建文件可以使用rootProject来获取属性。

android {
    compileSdkVersion rootProject.ext.compileSdkVersion
}

项目属性

前面例子的ext代码块是定义额外属性的一种方式。你可以使用属性来动态定制构建过程。
定义属性的方式有很多种,这里我们只介绍三种常用的:

  • ext代码块
  • gradle.properties文件
  • -P命令行参数

默认的任务

如果没有指定任何任务而运行Gradle的话,其会运行help任务,他会打印一些如何使用Gradle工作的信息。help任务被设置为默认的任务,在每次运行没有明确指定任务的Gradle时,可以复写默认的任务,添加一个常用的任务,甚至时多个任务:

defaultTasks ‘clean’,‘assembleDebug’

现在,当你运行没有任何参数的Gradle Wrapper时,它会运行clean和assembleDebug。通过运行tasks任务和格式化输出,可以清晰的看到哪些任务被设置为默认任务。

未完。。。

原创文章 63 获赞 59 访问量 4万+

猜你喜欢

转载自blog.csdn.net/u013049016/article/details/91441013