前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android Gradle Get Start

Android Gradle Get Start

作者头像
Oceanlong
发布2019-03-12 16:46:05
8680
发布2019-03-12 16:46:05
举报

简介

什么是gradle

Gradle其实是一套平台和规范,为打包提供的规范。而Android的打包,是Google写的一个Gradle插件。

gradle在做什么

编译好的代码,只是一堆散装的.jar 、.so 、.xml文件。要将它们以正确的目录结构,合并成一个apk。

所以,通常在gradle中,我们需要根据工程结构配置路径,然后配置工程信息,并干预合成apk的过程。

Gradle的生命周期

初始化

Gradle可以构建一个和多个项目。在初始化阶段,Gradle会确定哪些项目参与构建,并且为这些项目创建一个Project实例。

此时,settings.gradle会被执行。settings.gradle中会包含:

include ':app'
include ':xxx'
include ':xx2'
监听
gradle.buildStarted{
   println "【settings.gradle】 初始化执行开始"
}

gradle.settingsEvaluated {
    println "【settings.gradle】 初始化执行结束"
}

gradle.projectsLoaded {
    println '【settings.gradle】初始化结束'
}
gradle.addBuildListener(new BuildListener() {
    @Override
    void buildStarted(Gradle gradle) {
       println '【settings.gradle】 初始化执行开始'
    }

    @Override
    void settingsEvaluated(Settings settings) {
       println '【settings.gradle】 初始化执行结束'
    }

    @Override
    void projectsLoaded(Gradle gradle) {
        println '【settings.gradle】初始化结束'

    }
})

配置

执行build.gradle:

println 'build.gradle的配置阶段'

// 调用Project的dependencies(Closure c)声明项目依赖
dependencies {
    // 闭包中执行的代码
    println 'dependencies中执行的代码'
}

// 创建一个Task
task test() {
  println 'Task中的配置代码'
  // 定义一个闭包
  def a = {
    println 'Task中的配置代码2'
  }
  // 执行闭包
  a()
  doFirst {
    println '这段代码配置阶段不执行'
  }
}

输出结果:

build.gradle的配置阶段
dependencies中执行的代码
Task中的配置代码
Task中的配置代码2
我是顺序执行的
:buildEnvironment

我们可以看到配置阶段,会执行build.gradle中包括依赖,task配置等代码。但不会执行task中doFirst,doLast的内容。

最终,配置阶段结束后,会形成Task依赖拓朴图,这个图是一个有向无环图。

监听
gradle. beforeEvaluate{
   println 'build.gradle 配置执行开始'
}

gradle. afterEvaluate {
    println 'build.gradle 配置执行结束'
}
gradle.addBuildListener(new BuildListener() {
    @Override
    void beforeEvaluate(Gradle gradle) {
       println '配置执行开始'
    }

    @Override
    void afterEvaluate(Gradle gradle) {
       println '配置执行结束'
    }

})

除此之外,还有gradle.projectsEvaluated,gradle.taskGraph.whenReady两个回调,就不写代码了。

执行

Gradle为在配置阶段创建和配置的任务再次筛选需要执行的任务的子集,这个子集的筛选是由在命令行下传递给Gradle的任务名和目录决定的,子集中的每个任务都会被执行。

监听

每个任务在执行时,都会 gradle.taskGraph.beforeTask,gradle.taskGraph.afterTask当整个gradle构建完成时,会回调gradle.buildFinish。

apk打包流程

apk打包流程

小结

在Android开发中,很多情况下,我们的逻辑并不能写在代码中。因为无用的分支和资源,将产生额外的APK大小。我们应该将一部分不依赖网络的业务逻辑,放在编译期完成,根据需要打出不同的APK包。

所有编译期的工作,就是由Gradle来完成的。我们可以根据需要,通过Gradle配置不同的资源和逻辑。甚至可以通过Gradle Transform修改.class到.dex的逻辑。

未来的Android开发,会越来越倾向于,以SDK作为零件,项目则主要进行组装。Gradle就是这个组装过程的核心技术。所以学好Gradle对Android开发来说,还是非常重要的。

如有问题,欢迎指正。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.03.03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
    • 什么是gradle
      • gradle在做什么
      • Gradle的生命周期
        • 初始化
          • 监听
        • 配置
          • 监听
        • 执行
          • 监听
      • apk打包流程
      • 小结
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档