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_HOMEdistributionPath =包装/ dists中zipStoreBase = GRADLE_USER_HOMEzipStorePath =包装/ 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}
  1. 下载插件块
  2. 标识Android插件
  3. 顶级和模块项目的配置
  4. 特设任务

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:dependencyInsightcom.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 --scanBUILD SUCCESSFUL in 1s4 actionable tasks: 4 executedDo you accept the Gradle Cloud Services license agreement (https://gradle.com/terms-of-service)? [yes, no]yesGradle 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

更多相关文章

  1. 两分钟彻底让你明白Android(安卓)Activity生命周期(图文)!
  2. Android任务切换方法
  3. Android(安卓)数字签名学习笔记
  4. Android开发插件Eclipse ADT
  5. [CSDN]Android应用程序启动过程源代码分析
  6. Android(安卓)终端命令安装 apk 应用程序
  7. Android判断应用程序从后台回到前台
  8. Android重启应用程序代码
  9. 企业级Android(安卓)Application Activity管理

随机推荐

  1. Ansible 之 ansible的模块使用
  2. Python数据可视化:2018年电影分析
  3. 2.21 使用vSphere Client管理VMware ESXi
  4. 能把统计学的原理和应用说明白,这本书不简
  5. 教你做超惊艳的南丁格尔玫瑰图
  6. SQL今日一题(19):表复用
  7. 18个常见的数据分析面试题-概率统计类
  8. centos 7 通过源码安装apache
  9. 天猫双十一成交额是如何预测的
  10. 据说假设检验是个很难的题