参考链接:google官方文档
创建自定义构建配置需要您对一个或多个构建配置文件(或build.gradle文件)进行更改。这些纯文本文件使用域特定语言(DSL)以Groovy语言描述和操作构建逻辑,后者是一种适用于Java虚拟机的动态语言。您无需了解Groovy便可开始配置构建,因为Android Plugin for Gradle引入了您需要的大多数DSL元素。
有几个Gradle构建配置文件是Android应用标准项目结构的组成部分。您必须料及其中每一个文件的范围和用途及其应定义的基本DSL元素,才能着手配置构建。
1_Gradle设置文件
settings.gradle文件位于项目根目录,用于指示Gradle在构建应用时应将哪些模块包括在内。对大多数项目而言,该文件很简单,只包括以下内容:
include ':app'
不过,多模块项目需要制定应包括在最终构建之中的每个模块。
2_顶级构建文件
顶级build.gradle文件位于项目根目录,用于定义适用于项目中所有模块的构建配置。默认情况下,这个顶级构建文件使用buildscriot()代码块来定义项目中所有模块共用的Gradle存储区和依赖项。
以下代码示例描述的默认设置和DSL元素可在新建项目后的顶级build.gradle文件中找到。
/**
* buildscript {}块是您为Gradle本身配置存储库和依赖项的地方 - 这意味着,您不应在此处包含模块的依赖项。
* 例如,此块包含Gradle的Android插件作为依赖项,
* 因为它提供了Gradle构建Android应用程序模块所需的其他指令。
*/
buildscript {
/**
* 存储库{}块配置Gradle用于搜索或下载依赖项的存储库。
* Gradle预配置对JCenter,Maven Central和Ivy等远程存储库的支持。
* 您还可以使用本地存储库或定义自己的远程存储库。
* 下面的代码将JCenter定义为Gradle应该用来查找其依赖项的存储库。
*/
repositories {
google()
jcenter()
}
/**
* dependencies {}块配置Gradle需要用于构建项目的依赖项。
* 以下行将Gradle版本3.1.2的Android插件添加为类路径依赖项。
*/
dependencies {
classpath 'com.android.tools.build:gradle:3.1.2'
classpath 'com.jakewharton:butterknife-gradle-plugin:8.8.1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
/**
* allprojects {}块是您配置项目中所有模块使用的存储库和依赖项的位置,例如第三方插件或库。
* 应在模块级build.gradle文件中配置项目中所有模块不需要的依赖项。
* 对于新项目,Android Studio将JCenter配置为默认存储库,但它不配置任何依赖项。
*/
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
3_模块级构建文件
模块级 build.gradle 文件位于每个 <project>/<module>/ 目录,用于配置适用于其所在模块的构建设置。我们可以通过配置这些构建设置来提供自定义打包选项,以及替换main/应用清单或顶级build.gradle文件中的设置。
以下这个示例 Android 应用模块 build.gradle 文件概述了您应该了解的部分基本 DSL 元素和设置。
/**
* 构建配置中的第一行将Gradle的Android插件应用于此构建,并使android {}块可用于指定特定于Android的构建选项。
*/
apply plugin: 'com.android.application'
/**
* android {}块是您配置所有Android特定构建选项的地方。
*/
android {
/**
* compileSdkVersion指定Gradle用于编译应用程序的Android API级别。
* 这意味着您的应用可以使用此API级别中包含的API功能。
*
* buildToolsVersion指定Gradle用于构建应用程序的SDK构建工具,命令行实用程序和编译器的版本。
* 您需要使用SDK Manager下载构建工具。
* 在文件夹build-tools里面
*/
compileSdkVersion 27
buildToolsVersion '27.0.3'
/**
* defaultConfig {}块封装了所有构建变体的默认设置和条目,并且可以从构建系统动态覆盖main / AndroidManifest.xml中的某些属性。
* 您可以配置产品风格以覆盖应用程序的不同版本的这些值。
*/
defaultConfig {
// applicationId唯一标识要发布的包。 但是,您的源代码仍应引用main / AndroidManifest.xml文件中package属性定义的包名称。
applicationId "com.example.app_network"
// 定义运行应用程序所需的最低API级别。
minSdkVersion 21
// 指定用于测试应用程序的API级别。
targetSdkVersion 27
// 定义应用的版本号。
versionCode 1
// 为您的应用定义用户友好的版本名称。
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
/**
* 您可以在buildTypes {}块中配置多个构建类型。
* 默认情况下,构建系统定义了两种构建类型:debug和release。
* 调试构建类型未在默认构建配置中显式显示,但它包含调试工具并使用调试密钥进行签名。
* 发布版本类型应用Proguard设置,默认情况下不签名。
*/
buildTypes {
debug {
}
// 默认情况下,Android Studio使用minifyEnabled配置发布版本类型以启用代码收缩,并指定Proguard设置文件。
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
/**
* productFlavors {}块是您可以配置多种产品风格的地方。
* 这允许您创建可以使用自己的设置覆盖defaultConfig {}的应用程序的不同版本。
* 产品flavor是可选的,默认情况下构建系统不会创建它们。
* 此示例创建免费且付费的产品风格。
* 然后,每种产品风格都指定自己的应用程序ID,以便它们可以同时存在于Google Play商店或Android设备上。
*/
productFlavors {
free {
applicationId 'com.example.app-network.free'
}
paid {
applicationId 'com.example.app-network.paid'
}
}
/**
* splits {}块是您可以配置不同APK构建的地方,每个APK构建仅包含支持的屏幕密度或ABI的代码和资源。
* 您还需要配置构建,以便每个APK具有不同的versionCode。
*/
splits {
// 屏幕密度分割设置
density {
// 启用或禁用密度分割机制
enable false
// 从分裂中排除这些密度
// exclude "ldpi","tvdpi","xxxhdpi","400dpi","560dpi"
}
}
}
/**
* 模块级构建配置文件中的依赖项{}块仅指定构建模块本身所需的依赖项。
*/
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
4_Gradle属性文件
Gradle 还包括两个属性文件,位于项目根目录,可用于指定适用于Gradle 构件工具包本身的设置:
- gradle.properties 您可以在其中配置项目范围Gradle设置,例如 Gradle 后台进程的最大堆大小。
- local.properties 为构建系统配置本地环境属性,例如 SDK 安装路径。由于该文件的内容由 Android Studio 自动生成并且专用于本地开发者环境,因此您不应手动修改该文件,或将其纳入您的版本控制系统。
5_将项目与Gradle文件同步
当您在项目中对构建配置文件进行更改时,Android Studio 会要求您同步项目文件,以便其导入您的构建配置更改并执行一些检查来确保您的配置不会造成构建错误。
要同步项目文件,您可以点击做出更改后出现的通知栏中的 Sync Now,或者点击菜单栏中的 Sync Project。如果 Android Studio 通知配置出现错误,例如:您的源代码使用了只有在 compileSdkVersion
以上的 API 级别中才会提供的 API 功能,会显示 Messages 窗口,具体描述该问题。
6_源集
Android Studio 按逻辑关系将每个模块的源代码和资源分组为源集。模块的 main/ 源集包括其所有构建变体共用的代码和资源。其他源集目录为可选项,在您配置新的构建变体时,Android Studio 不会自动为您创建这些目录。不过,创建类似于 main/ 的源集有助于让 Gradle 只应在构建特定应用版本时使用的文件和资源井然有序:
- src/main/
此源集包括所有构建变体共用的代码和资源。 - src/<buildType>/
创建此源集可加入特定构建类型专用的代码和资源。 - src/<productFlavor>/
创建此源集可加入特定产品风味专用的代码和资源。 - src/<productFlavorBuildType>/
创建此源集可加入特定构建变体专用的代码和资源。
例如,要生成应用的“完整调试”版本,构建系统需要合并来自以下源集的代码、设置和资源:
- src/fullDebug/(构建变体源集)
- src/debug/(构建类型源集)
- src/full/(产品风味源集)
- src/main/(主源集)
如果不同源集包含同一文件的不同版本,Gradle 将按以下优先顺序决定使用哪一个文件(左侧源集替换右侧源集的文件和设置):
构建变体 > 构建类型 > 产品风味 > 主源集 > 库依赖项
这样一来,Gradle 便可使用专用于您试图构建的构建变体的文件,同时对与其他应用版本共用的 Activity、应用逻辑和资源加以重复利用。在合并多个清单时,Gradle 使用同一优先顺序,这样每个构建变体都能在最终清单中定义不同的组件或权限。
网友评论