Gralde for Android (二) —— Project and Task ,自定义构建

 每一次构建都是有至少一个project来完成,每个project有至少一个tasks。每一个build.grade文件代表着一个project,tasks在build.gradle中定义,所以Android studio中的project和Gradle中的project不是一个概念。当初始化构建进程,gradle会基于build文件,集合所有的project和tasks,一个tasks包含了一系列动作对象,这些动作将会按照顺序执行,一个单独的动作对象就是一段待执行的代码,很像Java中的方法。

构建声明周期

 执行一个gradle构建最简单的形式是,只执行任务中的动作,而这些任务又依赖于其他任务。为了简化构建过程,构建工具会新建一个动态模型流,叫做 Directed Acclic   Grapht(DAG)。这意味着 所有任务都会被一个一个执行,不可能循环执行,一旦一个tasks被执行,那么它不会再次执行了,不包含依赖的Tasks总是优先执行,在构建配置阶段会生成依赖关系图,一次构建将会经历下列三个阶段:

 1. 初始化阶段:project实例在这儿创建,如果有多个模块,即有多个build.gradle文件,多个project将会被创建。

 2. 配置阶段:在该阶段,build.gradle脚本将会执行,为每个project创建和配置所有的tasks。

 3. 执行阶段:这一阶段,gradle会决定哪一个tasks会被执行,哪一个tasks会被执行完全依赖开始构建时传入的参数和当前 所在的文件夹位置有关。

Task

 gradlew task 命令 可以打印出所有可用的任务,在新建的android项目中,会包括Android tasks,build tasks,build setup tasks,help tasks,install tasks,verification tasks等多个任务。

•  base任务:

 android插件依赖于Java插件,而Java插件依赖于base插件。

 base插件有基本的tasks生命周期和一些通用的属性。

 base插件定义了assemble和clean任务,Java插件定义了check和buildtasks, 在base插件中,这些任务既不被实现,也 不执行任何操作。他们被用来定义插件之间的约定,即添加实际工作的任务。

 这些任务约定如下:

 · assemble: 集合项目所有的output

 · clean: 清除所有的output

 · check: 执行所有的checks检查,通常是unit测试和instrumentation测试

 · build:同时运行assemble和check

 Java插件同时也添加了source sets的概念。android插件构建于这些约定。

•  android任务:

 android插件扩展了basetasks,并且实现了他们的行为,

 android环境下任务所做的事情:

 · assemble :为每个构建版本创建一个apk

 · clean: 删除所有的构建任务,如apk文件

 · check :执行Lint检查 并且能够在Lint检测到错误后停止构建

 · build :同时执行assemble和check

 assemble tasks默认依赖于assembleDebug和assembleRelease,若添加了更多构建版本,那么就会有更多的任务。


除了这些tasks,android 插件也提供了一些新的tasks:

 · connectedCheck :在测试机上执行所有测试任务

 · deviceCheck:一个占位任务,专为其他插件在远端设备上运行测试。

 · installDebug和installRelease 在设备上安装特定版本

 · 所有的install task对应有uninstall 任务

 build task依赖于check任务,而不是依赖于connectedCheck或者deviceCheck,执行check任会生成一份Lint报告,lint 报告会包含所有的警告和错误,以及一份详细的说明和一份相关文档的链接,这些报告可以在app/build/outputs目录下, 名为lint-results.html 中查看

  As中有一个包含了所有可用任务的工具窗,该工具窗称之为Gradle,如下图:

 

可以通过双击任务名称来运行摸个任务,然后在Gradle conslose工具窗中跟进正在运行的任务进度。

也可以在Terminal 工具窗下 通过输入相关命令来执行。 为了能使用Gradle Wrapper需要先导航到项目的根目录。

自定义构建

 当编写构建文件时,同步很重要。可通过 Tools -->android--> Sync Project with Gradle Files,同步实际上是运行了generateDebugSources 任务来生成所有必须的类。

as的project structure 对话框里可以修改基本的设置,以至于不必手动修改构建文件:


注意:在此界面所做的任何修改都会保存在gradle配置文件中。

BuildConfig 和资源

 SDK升级到17之后,构建工具会生成一个BuildConfig 的类,其包含一个按照构建类型设置值的DEBUG常量。如果有一部分代码指向在debugging时期运行,比如说logging,那么此时可以通过Gradle 来扩展该文件,这样在debug和release时,就会拥有不同的常量。这些常量可以用于切换URL和资源。 如:


 字符串必须用转译双引号括起来,这样才会生成实际意义的字符串。添加buildConfigFile 行之后,就可以在java 代码中使用BuildConfig.API_RL 和BuildConfig.LOG_HTTP_CALLS.

  或配置资源值:

android{
      buildTypes{
             debug{
                    resValue "String", "app_name","Example DEBUG"                                                 
              }
             releaase{
                     resValue "String", "app_name","Example"
              }
       }
}

在这里可以不用加转译双引号因为资源值默认会被包装成value = “”。

本文参考文献: Gradle for Android 中文版__(美)凯文·贝利格里姆斯著




猜你喜欢

转载自blog.csdn.net/sinat_33248260/article/details/79228686
今日推荐