Android Gradle入门
本文内容来自官方文档整理
一、查看生成的Gradle文件列表
默认情况下,Android Studio将以“Android”模式下的“项目视图”开始,如下图所示:
Android项目是Gradle多项目构建,具有顶级build.gradle文件和名为app的子目录,并具有自己的build.gradle文件。 顶层构建文件在图中标记为(Project:HelloWorldGradle),并且应用程序构建文件(Module:app)附加到其中。
在项目中,可能有两个名为gradle.properties的文件。 一个是本地项目。 另一个只有在主目录的.gradle子目录中具有全局gradle.properties文件的同名文件才存在。
- settings.gradle
Gradle使用文件settings.gradle来配置多项目构建。 它应该由一行代码组成:
include ':app'
这就是告诉Gradle,app也是一个Gradle project,当项目中还会依赖别的library,那么还需要在后面添加相应的信息。
- gradle-wrapper.properties
gradle-wrapper.properties,它配置了所谓的Gradle Wrapper。 这使您可以构建Android项目,而无需首先安装Gradle。 该文件的内容应该类似于:
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip
前四行表示当包装首次运行时,它将下载Gradle发行版并将其存储在您的主目录中的.gradle / wrapper / dists目录中。
最后一行显示了distributionUrl的值,这是Gradle将下载指定分配的地址。(具体版本号可能与此处(4.1)中显示的版本号不同,并且URL可能引用二进制版本(-bin),而不是此示例中显示的完整版本(-all)。)
二、查看整个项目的build.gradle
project的build.geadle文件:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
各个代码块具体作用:
- buildscript - 下载插件
- dependencies - 标识Android插件
- allproject - top-level and module projects的配置
- task clean - 特设任务
Gradle定义了一种基于Groovy的DSL语言来构建,buildscript标签是DSL的一部分。 它告诉Gradle构建需要一个可能不是基线Gradle分布的一部分的插件,并告诉Gradle在哪里找到它。 在这种情况下,使用坐标语法“group:name:version”指定所需的插件,其中组为com.android.tools.build,名称为gradle,版本为3.0.1。
当Gradle第一次构建这个项目时,插件将被下载并缓存,所以这个任务只执行一次。
allprojects标签保存适用于顶层项目及其包含的任何子项目的配置细节。 在这种情况下,该块指定任何所需的依赖项应该从https://jcenter.bintray.com上的公共Bintray Artifactory存储库的google或jcenter下载。
最后,构建文件包含一个名为clean的自定义(或临时)任务。 它使用内置的任务类型Delete并对其进行配置,以便干净的任务将删除rootProject中的buildDir。 两者都是项目属性,其值默认为该应用程序驻留的项目中的构建目录。
三、查看app module的build.gradle
看一下 build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 26
defaultConfig {
applicationId "com.example.liushihan.gradletest"
minSdkVersion 21
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
}
第一行:
apply plugin: 'com.android.application'
应用Android插件(在项目构建文件的构建脚本部分中引用)到当前项目。Gradle中的插件可以将自定义任务,新配置,依赖关系和其他功能添加到Gradle项目中。 在这种情况下,应用Android插件会添加各种各样的任务,这些任务由接下来显示的android块配置。
android {
compileSdkVersion 26
defaultConfig {
applicationId "com.example.liushihan.gradletest"
minSdkVersion 21
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
对这些属性进行简单的介绍:
- compileSdkVersion:Android SDK版本
- defaultConfig:defaultConfig部分包含应用程序的所有变体(构建类型和产品风格的组合)共享的属性。
- applicationId:applicationId基于创建应用程序时指定的域名和项目名称,并且在Google Play商店中必须是唯一的。
* minSdkVersion:minSdkVersion是你愿意支持这个应用程序的最低Android API,targetSdkVersion应该是最新的Android版本。
* versionCode:versionCode的值应该是在将新版本的应用上传到Google Play商店之前递增的整数。 这个值和applicationId一起告诉Google,这是一个现有应用程序的新版本,而不是一个新的应用程序。
* versionName:版本名称值用于自己的内部版本跟踪。
* testInstrumentationRunner:testInstrumentationRunner属性配置为使用为Android应用程序配置的JUnit 4测试运行器。
在这个代码块下面,就是buildTypes.默认情况下,Android应用程序支持两种构建类型,debug和release.这里没有显示debug配置部分,即使用所有调试的默认设置。
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
继续往下面看,就是这个应用程序所依赖的库
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
}
配置依赖关系是构建Gradle应用程序的基础部分。 在这种情况下,依赖项部分显示了Implementation,testImplementation和androidTestImplementation配置的值。
testImplementation依赖只包含最新的稳定的JUnit 4发行版。 JUnit类和测试注释将在编译时在src / test / java层次结构中可用。
androidTestImplementation依赖项是指Espresso测试库,用于Android应用程序的集成测试。 在这种情况下,Espresso在没有通常包含的support-annotations库的情况下被请求,因为已经通过其他依赖项包含了不同的版本。 在后面的步骤中,您将看到如何找出该库的版本以及原因。
fileTree(dir: 'libs', include: ['*.jar'])
是一个fileTree依赖项,它将libs文件夹中的所有jar文件添加到编译类路径中
com.android.support:appcompat-v7:26.1.0
将Android兼容性库添加到项目中。 这使您可以在SDK版本7以前的任何Android应用程序中使用材质设计主题和其他功能。
com.android.support.constraint:constraint-layout:1.0.2
将Android约束布局添加到项目中。 这允许您在任何像SDK版本9一样早的Android应用程序中使用ConstraintLayout布局类。
四、运行标准的Gradle任务
Android Studio通过IDE可以轻松构建和部署应用程序的调试版本,但最终Gradle还是参与其中。可以在Android Studio中命令行使用gradle命令构建
$ ./gradlew build
构建完成,Build Successful,可以在app/build/outputs/apk目录查看生成的apk,包括debug和release版本的apk.
- 可以在命令行中显示在项目中使用的support-annotations模块的版本。
执行命令,可以看到结果:
$ ./gradlew :app:dependencies --configuration releaseCompileClasspath
:app:dependencies
------------------------------------------------------------
Project :app
------------------------------------------------------------
releaseCompileClasspath - Resolved configuration for compilation for variant: release
+--- com.android.support:appcompat-v7:26.1.0
| +--- com.android.support:support-annotations:26.1.0
| +--- com.android.support:support-v4:26.1.0
| | +--- com.android.support:support-compat:26.1.0
| | | +--- com.android.support:support-annotations:26.1.0
| | | \--- android.arch.lifecycle:runtime:1.0.0
| | | +--- android.arch.lifecycle:common:1.0.0
| | | \--- android.arch.core:common:1.0.0
| | +--- com.android.support:support-media-compat:26.1.0
| | | +--- com.android.support:support-annotations:26.1.0
| | | \--- com.android.support:support-compat:26.1.0 (*)
| | +--- com.android.support:support-core-utils:26.1.0
| | | +--- com.android.support:support-annotations:26.1.0
| | | \--- com.android.support:support-compat:26.1.0 (*)
| | +--- com.android.support:support-core-ui:26.1.0
| | | +--- com.android.support:support-annotations:26.1.0
| | | \--- com.android.support:support-compat:26.1.0 (*)
| | \--- com.android.support:support-fragment:26.1.0
| | +--- com.android.support:support-compat:26.1.0 (*)
| | +--- com.android.support:support-core-ui:26.1.0 (*)
| | \--- com.android.support:support-core-utils:26.1.0 (*)
| +--- com.android.support:support-vector-drawable:26.1.0
| | +--- com.android.support:support-annotations:26.1.0
| | \--- com.android.support:support-compat:26.1.0 (*)
| \--- com.android.support:animated-vector-drawable:26.1.0
| +--- com.android.support:support-vector-drawable:26.1.0 (*)
| \--- com.android.support:support-core-ui:26.1.0 (*)
\--- com.android.support.constraint:constraint-layout:1.0.2
\--- com.android.support.constraint:constraint-layout-solver:1.0.2
(*) - dependencies omitted (listed previously)
BUILD SUCCESSFUL
从命令行打印的信息可以看到support-annotations module,version 26.1.0,是appcompat-v7所依赖的一个库
- 另一种方式查看所需的版本
执行命令及结果:
$ ./gradlew :app:dependencyInsight --dependency support-annotations --configuration releaseCompileClasspath
:app:dependencyInsight
com.android.support:support-annotations:26.1.0
+--- com.android.support:appcompat-v7:26.1.0
| \--- releaseCompileClasspath
+--- com.android.support:support-compat:26.1.0
| +--- com.android.support:support-vector-drawable:26.1.0
| | +--- com.android.support:appcompat-v7:26.1.0 (*)
| | \--- com.android.support:animated-vector-drawable:26.1.0
| | \--- com.android.support:appcompat-v7:26.1.0 (*)
| +--- com.android.support:support-v4:26.1.0
| | \--- com.android.support:appcompat-v7:26.1.0 (*)
| +--- com.android.support:support-media-compat:26.1.0
| | \--- com.android.support:support-v4:26.1.0 (*)
| +--- com.android.support:support-fragment:26.1.0
| | \--- com.android.support:support-v4:26.1.0 (*)
| +--- com.android.support:support-core-utils:26.1.0
| | +--- com.android.support:support-v4:26.1.0 (*)
| | \--- com.android.support:support-fragment:26.1.0 (*)
| \--- com.android.support:support-core-ui:26.1.0
| +--- com.android.support:animated-vector-drawable:26.1.0 (*)
| +--- com.android.support:support-v4:26.1.0 (*)
| \--- com.android.support:support-fragment:26.1.0 (*)
+--- com.android.support:support-core-ui:26.1.0 (*)
+--- com.android.support:support-core-utils:26.1.0 (*)
+--- com.android.support:support-media-compat:26.1.0 (*)
\--- com.android.support:support-vector-drawable:26.1.0 (*)
(*) - dependencies omitted (listed previously)
BUILD SUCCESSFUL
这两种方式都可以帮助追踪和解决与library版本冲突的任何问题。
五、查看Gradle窗口可执行的命令
可以看一下,android-signingReport查看签名报告任务,签名报告任务不需要任何参数,可以双击执行,结果如下:
Executing tasks: [signingReport]
Configuration on demand is an incubating feature.
:app:signingReport
Variant: release
Config: none
----------
Variant: releaseUnitTest
Config: none
----------
Variant: debug
Config: debug
Store: /Users/liushihan/.android/debug.keystore
Alias: AndroidDebugKey
MD5: 8C:43:C9:2D:61:38:E1:AC:18:7B:93:4B:43:4B:CE:3B
SHA1: 2A:29:82:41:7F:BA:AE:50:00:B8:DA:94:35:86:10:32:30:9C:A8:87
Valid until: 2047年5月1日 星期三
----------
Variant: debugAndroidTest
Config: debug
Store: /Users/liushihan/.android/debug.keystore
Alias: AndroidDebugKey
MD5: 8C:43:C9:2D:61:38:E1:AC:18:7B:93:4B:43:4B:CE:3B
SHA1: 2A:29:82:41:7F:BA:AE:50:00:B8:DA:94:35:86:10:32:30:9C:A8:87
Valid until: 2047年5月1日 星期三
----------
Variant: debugUnitTest
Config: debug
Store: /Users/liushihan/.android/debug.keystore
Alias: AndroidDebugKey
MD5: 8C:43:C9:2D:61:38:E1:AC:18:7B:93:4B:43:4B:CE:3B
SHA1: 2A:29:82:41:7F:BA:AE:50:00:B8:DA:94:35:86:10:32:30:9C:A8:87
Valid until: 2047年5月1日 星期三
----------
BUILD SUCCESSFUL in 14s
1 actionable task: 1 executed
从打印的结果可以看到,公钥存储路径(这里是用户根目录下的debug.keystore文件)
下面的install,可以通过installDebug来安装应用
也可用命令行来执行:
$ ./gradlew installDebug