构建Android应用程序

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
}
  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: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

相关文章
相关标签/搜索