文章摘要
1、创建一个新的Android Studio项目
2、查看生成的Gradle文件列表
3、查看顶级Gradle构建文件
4、查看应用程序模块中的构建文件
5、运行标准的Gradle任务
6、使用Gradle窗口
7、运行构建扫描
8、Gradle Jcenter下载库地址
一、创建一个新的Android Studio项目
下载并安装Android Studio后,启动应用程序。
在欢迎屏幕上,单击标题为“启动新的Android Studio项目”的链接,如图所示。
准备好后,单击下载并安装Android Studio后,启动应用程序。
在欢迎屏幕上,单击标题为“启动新的Android Studio项目”的链接,如图所示。
准备好后,单击下一步。
在“创建Android项目”屏幕上,将应用程序名称设置为“HelloWorldGradle”,将公司域设置为您自己的(在附图中使用了
gradle.org),并为项目位置选择任何方便的目录。
然后单击下一步。
在“目标Android设备”屏幕上,选择手机和平板电脑,并从最低SDK下拉列表中选择任何最近的API级别。
该图显示了API 19,这是常见的,但所选择的值不会影响本指南的其余部分。
在“添加Activity”屏幕上,选择“ Empty Activity”,然后单击“ 下一步 ”。
接受“配置活动”屏幕上的所有默认值,然后单击完成* 。
二、查看生成的Gradle文件列表
默认情况下,Android Studio将以“Android”模式启动“项目视图”,如图所示:
Android项目是Gradle多项目构建,具有顶级build.gradle文件和调用的子目录app以及其自己的build.gradle文件。
顶层构建文件(Project: HelloWorldGradle)
如图所示,app构建文件已(Module: app)附加到该文件。
可能会有两个文件gradle.properties。一个是项目加载。另一个文件可选,只有当您的主目录gradle.properties的.gradle子目录中有全局文件时,才会存在。
该文件settings.gradle由Gradle用于配置多项目构建。它应该由一行组成:
include ':app'
这告诉Gradle app子目录也是一个Gradle项目。
如果在稍后,您将通过向导向该项目添加一个Android库,将创建另一个项目子目录并将其添加到此文件。
最后一个文件被调用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-3.4.1-all.zip
前四行表示当包装器第一次运行时,它将下载Gradle分发并将其存储在主目录.gradle/wrapper/dists中的目录中。最后一行显示的是distributionUrl,它是Gradle将下载指定分布的位置。
具体版本号可能与此处显示的不同(3.4.1),URL可能指的是二进制版本(-bin),而不是-all本示例中显示
的complete()版本。
三、查看顶级Gradle构建文件
项目build.gradle文件的内容应该类似于:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.4.0-alpha7'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
- 1、下载插件块:repositories
- 2、标识Android插件:dependencies
- 3、顶级和模块项目的配置:allprojects
- 4、特设任务:task clean
Gradle定义了用于构建的域特定语言(DSL),用于构建文件中。
该buildscript标签是该DSL的一部分。
它告诉Gradle,构建需要一个可能不是基线Gradle分布的插件,并告诉Gradle在哪里找到它。
在这种情况下,所需的插件是使用坐标语法“group:name:version”指定的,其中组是com.android.tools.build 名称 gradle,版本是 2.4.0-alpha7。
Gradle插件的版本号经常更新。
请使用最新的插件,因为它将包含所有可用的错误修复和性能改进。
当Gradle首次构建该项目时,该插件将被下载并缓存,因此此任务仅执行一次。
该allprojects
标签保存适用于顶级项目及其包含的任何子项目的配置详细信息。
在这种情况下,该块指定从jcenter公共Bintray Artifactory存储库
https://jcenter.bintray.com下载任何所需的依赖关系。
最后,构建文件包含一个调用的自定义(或临时)任务clean。
它使用内置的任务类型Delete,并对其进行配置,该clean任务将删除
buildDir的rootProject。两者都是项目属性,其值默认build为此应用程序所在的项目中的目录。
四、查看应用程序模块中的构建文件
打开模块中的build.gradle文件app。第一行是:
apply plugin: 'com.android.application'
这将“应用”Android插件(buildscript在顶级构建文件的部分中引用)到当前项目。Gradle中的插件可以为Gradle项目添加自定义任务,新配置,依赖关系和其他功能。在这种情况下,应用Android插件会添加各种各样的任务,这些任务由android下一个块组态。
android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
applicationId "org.gradle.helloworldgradle"
minSdkVersion 19
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner
"android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'
}
}
}
这些属性与Gradle构建系统相比,与Android相关,对于这些属性将不会在这里进行轻描淡写。简而言之:
该compileSdkVersion和buildToolsVersion与Android SDK的关联,并且应该永远是每个最新版本
该defaultConfig部分保存由应用程序的所有变体(构建类型和变体的组合)共享的属性。
这applicationId是基于创建应用程序时指定的域名和项目名称,并且在Google Play商店中必须是唯一的。
该值minSdkVersion是您愿意为此应用程序支持的最小Android API,而targetSdkVersion应该是最新的Android版本。
该值versionCode应该是在将新版本的应用程序上传到Google Play商店之前递增的整数。与此同时,这个值applicationId告诉Google,这是一个现有应用程序的新版本,而不是一个新的应用程序。
该versionName值用于您自己的内部版本跟踪。
该testInstrumentationRunner属性配置为使用为Android应用程序配置的JUnit 4测试运行器。
在这一节下面是一个叫做“块”的块buildTypes。默认情况下,Android应用程序支持两种构建类型,debug和release。此部分允许您配置你喜欢的一个。该debug部分在此处未显示,这意味着debug正在使用的所有默认设置。
在android块之后,有一个块显示用于此应用程序的库。
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.3.1'
testCompile 'junit:junit:4.12'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
}
配置依赖关系是构建Gradle应用程序的基础。在这种情况下,dependencies部分显示的值compile,testCompile和androidTestCompile配置。
首先采取最简单的方法,testCompile依赖关系只包含最新稳定的JUnit 4分发。JUnit类和测试注释将在编译时在src/test/java层次结构中可用。
该androidTestCompile依赖性是指咖啡的测试库,用于Android应用程序的集成测试。在这种情况下,请求没有support-annotations通常包含的库的Espresso ,因为已经通过其他依赖关系包含了不同的版本。在稍后的步骤中,您将看到如何找出包含该库的版本以及为什么。
最后,有三行添加依赖关系的compile配置:
第一个,fileTree(dir: 'libs', include: ['*.jar'])是fileTree将文件libs夹中的任何jar文件添加到编译类路径的依赖项
第二个,com.android.support:appcompat-v7:25.3.1将Android兼容性库添加到项目中。这允许您在任何Android应用程序中使用与SDK版本7一样的材料设计主题和其他功能
最后一行,com.android.support.constraint:constraint-layout:1.0.2将新的约束布局添加到项目中。结合兼容性库,您可以创建具有最新布局功能的应用程序
五、运行标准Gradle任务
Android Studio可以轻松地通过IDE构建和部署应用程序的调试版本,但最终仍然涉及到Gradle。要查看此内容,请在Android Studio中打开终端窗口(或打开外部命令提示符并导航到应用程序的根目录)。从那里你可以运行build任务。
$ ./gradlew build
这将执行许多任务,最终返回“建立成功”。要查看所产生的APK(Android软件包,Android应用的可部署版本),请查看目录app/build/outputs/apk。在那里你会发现两个文件:
app-debug.apk
app-release-unsigned.apk
调试APK是将部署到仿真器或连接设备的版本。如果要部署APK,您需要首先创建一个签名配置,这超出了本指南的范围,但这是资源中描述的一个简单的过程。
从终端,您还可以找出support-annotations项目中正在使用的模块的版本。为此,首先dependencies在app项目中运行任务,compile仅查询配置的详细信息。
$ ./gradlew :app:dependencies --configuration compile
:app:dependencies
------------------------------------------------------------
Project :app
------------------------------------------------------------
compile - Classpath for compiling the main sources.
+--- com.android.support:appcompat-v7:25.3.1
| +--- com.android.support:support-annotations:25.3.1
| +--- com.android.support:support-v4:25.3.1
| | +--- com.android.support:support-compat:25.3.1
| | | \--- com.android.support:support-annotations:25.3.1
| | +--- com.android.support:support-media-compat:25.3.1
| | | +--- com.android.support:support-annotations:25.3.1
| | | \--- com.android.support:support-compat:25.3.1 (*)
| | +--- com.android.support:support-core-utils:25.3.1
| | | +--- com.android.support:support-annotations:25.3.1
| | | \--- com.android.support:support-compat:25.3.1 (*)
| | +--- com.android.support:support-core-ui:25.3.1
| | | +--- com.android.support:support-annotations:25.3.1
| | | \--- com.android.support:support-compat:25.3.1 (*)
| | \--- com.android.support:support-fragment:25.3.1
| | +--- com.android.support:support-compat:25.3.1 (*)
| | +--- com.android.support:support-media-compat:25.3.1 (*)
| | +--- com.android.support:support-core-ui:25.3.1 (*)
| | \--- com.android.support:support-core-utils:25.3.1 (*)
| +--- com.android.support:support-vector-drawable:25.3.1
| | +--- com.android.support:support-annotations:25.3.1
| | \--- com.android.support:support-compat:25.3.1 (*)
| \--- com.android.support:animated-vector-drawable:25.3.1
| \--- com.android.support:support-vector-drawable:25.3.1 (*)
\--- 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模块25.3.1是appcompat-v7库的依赖。
查看所需版本的另一种方法是使用dependencyInsight任务。运行以下命令(全部在一行)。
$ ./gradlew :app:dependencyInsight --dependency support-annotations \
--configuration compile
:app:dependencyInsight
com.android.support:support-annotations:25.3.1
+--- com.android.support:appcompat-v7:25.3.1
| \--- compile
+--- com.android.support:support-compat:25.3.1
| +--- com.android.support:support-v4:25.3.1
| | \--- com.android.support:appcompat-v7:25.3.1 (*)
| +--- com.android.support:support-vector-drawable:25.3.1
| | +--- com.android.support:appcompat-v7:25.3.1 (*)
| | \--- com.android.support:animated-vector-drawable:25.3.1
| | \--- com.android.support:appcompat-v7:25.3.1 (*)
| +--- com.android.support:support-media-compat:25.3.1
| | +--- com.android.support:support-v4:25.3.1 (*)
| | \--- com.android.support:support-fragment:25.3.1
| | \--- com.android.support:support-v4:25.3.1 (*)
| +--- com.android.support:support-core-utils:25.3.1
| | +--- com.android.support:support-v4:25.3.1 (*)
| | \--- com.android.support:support-fragment:25.3.1 (*)
| +--- com.android.support:support-core-ui:25.3.1
| | +--- com.android.support:support-v4:25.3.1 (*)
| | \--- com.android.support:support-fragment:25.3.1 (*)
| \--- com.android.support:support-fragment:25.3.1 (*)
+--- com.android.support:support-core-ui:25.3.1 (*)
+--- com.android.support:support-core-utils:25.3.1 (*)
+--- com.android.support:support-media-compat:25.3.1 (*)
\--- com.android.support:support-vector-drawable:25.3.1 (*)
(*) - dependencies omitted (listed previously)
BUILD SUCCESSFUL
无论是dependency和dependencyInsight任何Gradle项目任务是可用的。他们可以帮助您跟踪和解决库版本冲突的任何问题。
六、使用Gradle窗口
Android Studio包含一个用于执行Gradle任务的特殊窗口。Android项目提供超过80个不同的任务,此窗口尝试将其组织到类别中。
打开下面的Tasks文件夹:app,然后查看该android类别。下图显示了一个例子。
由于signingReport任务不需要任何参数,您可以直接双击它来执行。结果如下图所示。
该signingReport任务告诉您公钥在哪里存储(这里是debug.keystore用户根目录下的文件),其别名及其MD5和SHA1散列。
请注意,目前没有释放密钥。查看install类别中Gradle窗口中列出的任务,如下图所示。
你会看到有一个installDebug任务和一个uninstallDebug任务,一个uninstallRelease任务,甚至一个uninstallAllTask。然而,由于缺席而显而易见,这是一项installRelease任务。该任务仅在您创建发布密钥的签名配置时可用,Gradle可用于创建签名的发行版APK。
如果您现在要启动多个仿真器或附加多个设备,则可以通过执行installDebug任务将应用程序部署到所有这些设备中。
$ ./gradlew installDebug
这不同于通过IDE运行应用程序。在这种情况下,您将选择单个连接的设备或仿真器,并且将安装该应用程序并启动它。installDebugGradle 的任务将会在所有连接的设备上部署应用程序,尽管它不会启动任何应用程序。结果将与下图相似。
您可以像往常一样双击图标来启动应用程序。您也可以使用uninstallAll任务删除该应用程序。
$ ./gradlew uninstallAll
这将从所有连接的设备中删除该应用。
七、运行构建扫描
构建扫描会生成关于构建的所有依赖项,插件,测试输出和性能的完整报告。您可以通过--scan使用版本3.4及以上版本的任何Gradle命令附加标志,或使用-Dscan早期版本的Gradle上的标志来请求构建扫描。
为了使用构建扫描,您需要添加构建扫描插件并同意许可证。有关详细信息,请参阅...中的Build Scan入门指南,但总而言之,将以下部分添加到顶级build.gradle文件:
buildscript {
repositories {
jcenter()
maven { url 'https://plugins.gradle.org/m2' }
}
dependencies {
classpath 'com.android.tools.build:gradle:2.4.0-alpha7'
classpath 'com.gradle:build-scan-plugin:1.7.1'
}
}
apply plugin: com.gradle.build-scan
buildScan {
licenseAgreementUrl = 'https://gradle.com/terms-of-service'
licenseAgree = 'yes'
}
现在当你运行:
$ ./gradlew build --scan
您将收到一个链接到结果,托管在Gradle。结果页面将类似于:
随意探索所有细节。该报告包含许多功能的信息,包括依赖关系。如果您挖掘依赖关系部分并打开_debugCompile配置,appcompat-v7库内部是support-annotations前面描述的库。
构建扫描是分析您的构建的有效方式。