自定义构建构成的方式有很多种,当你在Android Studio中编写构建文件时,无论你在构建文件中自定义了什么,都应该同步该项目。当你开始添加依赖或BuildConfig变量时,同步将会变得尤为重要。
在你编写settings.gradle或build.gradle时,Android Studio将会在编辑器展示一条信息,通过导航到Tools|Android|Sync Project with Gradle Files,或单击工具栏上对应的按钮都可以触发同步。如图:
在底层,Android Studio同步实际上运行了generateDebugSources任务来生成所有必须的类。
我们可以直接通过构建文件而不是manifest文件来配置applicationId,minSdkVersion,targetSdkVersion,versionCode和versionName。另外,下面一些属性也是我们可以操作的:
在Android Studio内部
不必手动修改构建文件,在Android Studio的Project Structure对话框中可以修改基本的设置。你可以通过File菜单打开对话框,对话框允许你修改项目范围内的设置和每个模块的设置。对于每个Android模块,你都可以修改Android插件的属性和所有manifest属性。如下图:
Android studio会把Project Structure对话框中所做的任何更改都写入Gradle构建配置文件中。
自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代码块是定义额外属性的一种方式。你可以使用属性来动态定制构建过程。
定义属性的方式有很多种,这里我们只介绍三种常用的:
如果没有指定任何任务而运行Gradle的话,其会运行help任务,他会打印一些如何使用Gradle工作的信息。help任务被设置为默认的任务,在每次运行没有明确指定任务的Gradle时,可以复写默认的任务,添加一个常用的任务,甚至时多个任务:
defaultTasks ‘clean’,‘assembleDebug’
现在,当你运行没有任何参数的Gradle Wrapper时,它会运行clean和assembleDebug。通过运行tasks任务和格式化输出,可以清晰的看到哪些任务被设置为默认任务。
未完。。。