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 XML文件Python脚本
  2. Android 开源绘画板项目 (ScaleSketchPadDemo)
  3. android文件管理实现源码
  4. Android优秀开源项目大全
  5. Android Studio项目 目录含义
  6. Android 最简单的SD卡文件遍历程序
  7. android项目colors.xml中几个常用的颜色资源
  8. “AndroidManifest.xml 系统找不到指定的文件”解决方案

随机推荐

  1. Android(安卓)Studio 3.0 正式版本 发行
  2. Android(安卓)进阶技术汇总三: 异步任务:As
  3. android Http通信(访问web server)
  4. Android(安卓)技术专题系列之二 -- telepho
  5. Android核心模块及相关技术
  6. Cocos2d Box2D 开发Android下的 Breakout
  7. 相对布局的属性
  8. android 使用AsyncHttpClient框架上传文
  9. Android中使用HTTP服务
  10. 系出名门Android(5) - 控件(View)之TextV