Android应用程序(俗称为应用程序)使用Gradle作为构建工具,通常通过唯一受支持的IDE,Android Studio。 许多资源可用于学习如何构建Android应用程序。 然而,本指南着重于创建新的Android应用程序时生成的Gradle构建文件的细节,以及如何使用Gradle为其调用相关的构建任务。
内容
- 你会建立什么
- 你需要什么
- 创建一个新的Android Studio项目
- 查看生成的Gradle文件列表
- 查看顶级Gradle构建文件
- 查看应用程序模块中的构建文件
- 运行标准的Gradle任务
- 使用Gradle窗口
- 发布构建扫描
- 概要
- 帮助改进本指南
你会建立什么
你会创建一个“Hello,World!” 类型的Android应用程序,探索其生成的Gradle构建文件,并使用它们执行常见任务。
你需要什么
Android Studio,版本2.4或更高版本。 您可以从https://developer.android.com/studio/index.html下载Android Studio以及最新的Android SDK。 IDE的系统要求也可以在该链接找到。
Java开发工具包(JDK)1.7或更高版本
创建一个新的Android Studio项目
下载并安装Android Studio后,启动应用程序。 在欢迎界面上,点击标题为“”Start a new Android Studio project”,”的链接,如图所示。 准备就绪后,单击下一步。
在“Create Android Project”屏幕上,将应用程序名称设置为“HelloWorldGradle”,将公司域设置为您自己的域(在附图中使用域gradle.org),然后为项目位置选择任何方便的目录。 然后点击下一步。
在“Target Android Devices”屏幕上,选择Phone and Tablet并从Minimum SDK下拉列表中选择任何最新的API级别。该图显示了API 19,这很常见,但所选的值不会影响本指南的其余部分
在“Add an Activity”屏幕上,选择空白活动并单击下一步。
接受“Configure Activity”屏幕上的所有默认设置,然后单击完成。
查看生成的Gradle文件列表
默认情况下,Android Studio将以“Android”模式下的“项目视图”开始,如图所示
Android项目是Gradle多项目构建,包含顶级build.gradle文件和名为app的子目录,并带有自己的build.gradle文件。顶层构建文件在图中标记为(Project:HelloWorldGradle),并且应用程序构建文件具有(Module:app)附加到它。
可能有两个名为gradle.properties的文件。一个是本地项目。另一个只有在主目录的.gradle子目录中具有全局gradle.properties文件的同名文件才存在。
Gradle使用文件settings.gradle来配置多项目构建。它应该由一行代码组成:
include ':app'
这告诉Gradle该app子目录也是一个Gradle项目。如果在稍后的时间,您要通过可用的向导将Android库添加到此项目中,则会创建另一个项目子目录并将其添加到此文件中。
最后一个文件叫做gradle-wrapper.properties,它配置了所谓的Gradle Wrapper。这使您可以构建Android项目,而无需首先安装Gradle。该文件的内容应该类似于:
distributionBase = GRADLE_USER_HOME
distributionPath =包装/ dists中
zipStoreBase = GRADLE_USER_HOME
zipStorePath =包装/ dists中
distributionUrl = HTTPS \://services.gradle.org/distributions/gradle-4.1-all.zip
前四行表明当包装首次运行时,它将下载Gradle发行版并将其存储在您的主目录中的.gradle / wrapper / dists目录中。
最后一行显示了distributionUrl的值,这是Gradle将下载指定分布的位置。
特定版本号可能与此处显示的版本号不同(4.1),并且URL可能引用二进制版本(-bin),而不是此示例中显示的完整版本(-all)版本。
查看顶级Gradle构建文件
项目build.gradle文件应具有类似于以下内容的内容:
//顶级构建文件,您可以在其中添加所有子项目/模块共有的配置选项。
// 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.1'
// 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
}
- 下载插件块
- 标识Android插件
- 顶级和模块项目的配置
- 特设任务
Gradle为构建文件定义了用于构建的特定于域的语言(DSL)。 buildscript标签是DSL的一部分。它告诉Gradle,构建需要一个插件,它可能不是基线Gradle发行版的一部分,并告诉Gradle在哪里找到它。在这种情况下,使用坐标语法“group:name:version”指定所需的插件,其中组为com.android.tools.build,名称为gradle,版本为3.0.1。
Gradle插件的版本号经常更新。请使用最新的插件,因为它将包含所有可用的错误修复和性能改进。
当Gradle第一次构建这个项目时,插件将被下载并缓存,所以这个任务只执行一次。
allprojects标签保存适用于顶层项目及其包含的任何子项目的配置细节。在这种情况下,该块指定应从https://jcenter.bintray.com上的公共Bintray Artifactory存储库的谷歌或jcenter下载任何所需的依赖关系。
最后,构建文件包含一个名为clean的自定义(或临时)任务。它使用内置的任务类型Delete并对其进行配置,以便干净的任务将删除rootProject中的buildDir。两者都是项目属性,其值默认为此应用程序所在项目中的构建目录。
查看应用程序模块中的构建文件
在app模块中打开build.gradle文件。
第一行是:
apply:'com.android.application'
这个“应用”Android插件(在顶层构建文件的buildscript部分中提到)到当前项目。 Gradle中的插件可以将自定义任务,新配置,依赖关系和其他功能添加到Gradle项目中。在这种情况下,应用Android插件会添加各种各样的任务,这些任务由接下来显示的android块配置。
android {
compileSdkVersion 26
defaultConfig {
applicationId“org.gradle.helloworldgradle”
minSdkVersion 19
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'
}
}
}
这些属性与Gradle构建系统相比,与Android更为相关,因为它们只会在这里轻松审查。简而言之:
- compileSdkVersion与Android SDK相关联,应始终是最新的可用版本。
- defaultConfig部分包含应用程序的所有变体(构建类型和产品风格的组合)共享的属性。
- applicationId基于创建应用程序时指定的域名和项目名称,并且在Google Play商店中必须是唯一的。
- minSdkVersion的价值是您愿意使用此应用程序支持的最低Android API,而targetSdkVersion应该是最新的Android版本。
- versionCode的值应该是在将新版本的应用上传到Google Play商店之前递增的整数。此值与applicationId一起告诉Google,这是现有应用的新版本,而不是新应用。
- 版本名称值用于您自己的内部版本跟踪。
- testInstrumentationRunner属性配置为使用为Android应用程序配置的JUnit 4测试运行器。
本节下面是一个名为buildTypes的块。默认情况下,Android应用程序支持两种构建类型,即调试和发布。本部分允许您配置每个你喜欢的地方。这里没有显示调试部分,这意味着正在使用所有调试的默认设置。
在android块之后,有一个块显示用于这个应用程序的库。
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应用程序的基础部分。在这种情况下,依赖项部分显示了实现,testImplementation和androidTestImplementation配置的值。
首先考虑最简单的一个,testImplementation依赖项仅包含最新的稳定JUnit 4分发版。 JUnit类和测试注释将在编译时在src / test / java层次结构中可用。
androidTestImplementation依赖关系是指Espresso测试库,用于Android应用程序的集成测试。在这种情况下,Espresso在没有通常包含的support-annotations库的情况下被请求,因为已经通过其他依赖项包含了不同的版本。在后面的步骤中,您将看到如何找出该库的版本以及原因。
最后,有三行向实现配置添加依赖关系:
- 第一个 fileTree(dir:’libs’,包括:[‘* .jar’])是一个fileTree依赖项,它将libs文件夹中的所有jar文件添加到编译类路径
- 第二个,com.android.support:appcompat-v7:26.1.0将Android兼容性库添加到项目中。这使您可以在SDK版本7以前的任何Android应用程序中使用Material设计主题和其他功能。
- 第三个,com.android.support.constraint:constraint-layout:1.0.2将Android约束布局添加到项目中。这使您可以在SDK版本9以前的任何Android应用程序中使用ConstraintLayout布局类。
运行标准的Gradle任务
Android Studio可以通过IDE轻松构建和部署应用程序的调试版本,但最终Gradle仍然参与其中。要查看此信息,请在Android Studio中打开终端窗口(或打开外部命令提示符并导航至您的应用的根目录)。从那里你可以运行构建任务。
$ ./gradlew build
这将运行许多任务,并最终返回“构建成功”。要查看生成的APK(Android包,Android应用的可部署版本),请查看目录app / build / outputs / apk。在那里你会找到一个调试和发布目录。调试目录包含app-debug.apk,这是将部署到模拟器或连接设备的APK版本。如果您想部署发行版APK,则需要首先创建签名配置,这超出了本指南的范围,但是这是一个在资源中描述的简单流程。
在终端中,您还可以找到项目中使用的support-annotations模块的版本。为此,首先在应用程序项目中运行依赖关系任务,仅询问releaseCompileClasspath配置的详细信息。
$ ./gradlew :app:dependencies --configuration releaseCompileClasspath
:app:dependencies
------------------------------------------------------------
Project :app
------------------------------------------------------------
releaseCompileClasspath - 已解决的针对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模块(版本26.1.0)是appcompat-v7库的依赖项。
查看所需版本的另一种方法是使用dependencyInsight任务。运行以下命令(全部在一行上)。
$ ./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
任何Gradle项目都可以使用dependency和dependencyInsight任务。它们可以帮助您追踪并解决与库版本冲突有关的任何问题
使用Gradle窗口
Android Studio包含一个执行Gradle任务的特殊窗口。 Android项目提供超过80种不同的任务,并且此窗口尝试将它们组织到不同的类别中。
打开“:app,“任务”文件夹,然后查看Android类别。 下图显示了一个例子。
由于signedReport任务不需要任何参数,因此只需双击它即可执行它。结果显示在下图中。
signingReport任务告诉你公钥的存储位置(这里是用户根目录下的debug.keystore文件),它的别名,以及MD5和SHA1散列
请注意,目前没有释放键。查看安装类别中Gradle窗口中列出的任务,如下图所示。
您会看到有一个installDebug任务和一个uninstallDebug任务,一个uninstallRelease任务,甚至还有一个uninstallAllTask。 但是,由于缺乏显着性,它是一个安装释放任务。 该任务仅在创建释放密钥的签名配置时可用,Gradle可以使用该配置来创建签名版本APK。
如果您现在要启动多个模拟器或连接多个设备,则可以通过执行installDebug任务将应用程序部署到其中。
$ ./gradlew installDebug
这与通过IDE运行应用程序不同。 在这种情况下,您可以选择一个连接的设备或模拟器,并安装应用程序并启动它。 来自Gradle的installDebug任务将一步完成所有连接设备中的应用程序部署,尽管它不会启动任何应用程序。 结果将与下图相似。
像往常一样,您可以通过双击图标启动应用程序。您也可以使用uninstallAll任务删除应用程序。
$ ./gradlew uninstallAll
这将从所有连接的设备中删除应用程序。
./gradlew build --scan
BUILD SUCCESSFUL in 1s
4 actionable tasks: 4 executed
Do you accept the Gradle Cloud Services license agreement (https://gradle.com/terms-of-service)? [yes, no]
yes
Gradle Cloud Services license agreement accepted.
Publishing build scan...
https://gradle.com/s/carzirlfjwjlo
结果页面将类似于:
随意探索所有的细节。 该报告包含许多功能的信息,包括依赖关系。 如果您深入依赖部分并打开:app子项目的releaseCompileClasspath配置,则appcompat-v7库内部是前面描述的支持注释库。
构建扫描是分析构建的强大方法。 有关更多详细信息,请参阅“创建构建扫描”和“构建扫描插件用户手册”入门指南。
概要
在本指南中,您创建了一个Android应用程序,并检查了随附的许多Gradle功能。 具体来说,你学会了如何:
- 使用Android Studio创建一个Android应用程序
- 将生成的项目视为Gradle多项目构建
- 将Android插件添加到顶层Gradle构建文件
- 查看生成的包装器中使用哪个版本的Gradle
- 解释应用程序的android部分添加的设置
- 使用添加到应用程序的默认依赖项
- 构建应用程序并查看输出APK
- 确定正在使用哪个版本的依赖项
- 使用Gradle窗口执行任务
- 在多个设备上部署和卸载应用程序
- 在Android项目上运行构建扫描
引用
gradle office https://guides.gradle.org/building-android-apps/?_ga=2.10068917.1847376704.1530150743-236759538.1505208055#run_standard_gradle_tasks
google 翻译 https://translate.google.cn