Gradle系列(四) Gradle插件

1. 什么是gradle


维基百科:Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。它使用一种基于Groovy的特定领域语言来声明项目设置,而不是传统的XML。当前其支持的语言限于Java、Groovy和Scala,计划未来将支持更多的语言。

按我的理解,通俗一点讲,就是拿来构建项目的,我们平时在Android Studio上开发Android项目就是用Gradle进行构建的,相比于传统的xml方式,我感觉更加灵活.毕竟,可以写代码,根据不同的环境搞些骚操作.

gradle里面其实需要学习的有3个

  • Groovy, 官方文档: http://docs.groovy-lang.org/latest/html/groovy-jdk/index-all.html

  • Gradle DSL, 官方文档: https://docs.gradle.org/current/javadoc/org/gradle/api/Project.html

  • Android Plugin DSL, 官方文档: http://google.github.io/android-gradle-dsl/current/index.html

刚哥说过,遇到不会的直接查官方文档,不要每次去搜索引擎东搜西搜,这样效率很低.

这里插播一个小知识点,如何查询官方文档.比如在gradle中经常用的buildscript到底是什么?来到官方文档首页,点开顶部INDEX,搜索buildscript,即可找到这个东西是解释.

2. gradle项目结构


首先我们来新建一个Android项目,什么都不要动.

QZLQBT.png

  • 最外层setting.gradle为根项目的配置,可以知道需要包含哪些模块,然后最外层的build.gralde也是根项目的配置.模块中的build.gradle是子项目的配置.

  • gradle文件夹下面是版本配置以及gradle所需要的脚本

  • 最外层的gradlew为linux/mac下的脚本,gradlew.bat是windows下面用的脚本

3. gradle配置顺序


简单在gradle中输出语句,看看配置顺序

//settings.gradle

println(“setting 开始配置”)

include ‘:app’

rootProject.name=‘Hello’

println(“setting 配置完成”)

//project build.gradle

println(“根build.gradle 开始配置”)

buildscript {

repositories {

}

dependencies {

}

}

println(“根build.gradle 配置完成”)

//app build.gradle

println(“app build.gradle 开始配置”)

project.afterEvaluate {

println “所有模块都已配置完成”

}

android {

defaultConfig {

}

buildTypes {

}

}

dependencies {

}

println(“app build.gradle 配置完成”)

打印语句写好后,clean Project,即可执行,输出如下:

setting 开始配置

setting 配置完成

Configure project :

根build.gradle 开始配置

根build.gradle 配置完成

Configure project :app

app build.gradle 开始配置

app build.gradle 配置完成

所有模块都已配置完成

可以看到首先是配置setting,知道有哪些模块.然后是配置根项目的build.gradle,然后才是子项目的build.gradle配置.

我在上面加了一个监听器project.afterEvaluate,可以通过查询官方文档了解它的详细内容,这是一个当所有的模块都配置完了的时候的回调.

其中,还可以在settings.gradle中添加一个监听器

gradle.addBuildListener(new BuildListener() {

@Override

void buildStarted(Gradle gradle) {

println(“buildStarted------------”)

}

@Override

void settingsEvaluated(Settings settings) {

println(“settingsEvaluated------------”)

}

@Override

void projectsLoaded(Gradle gradle) {

println(“projectsLoaded------------”)

}

@Override

void projectsEvaluated(Gradle gradle) {

println(“projectsEvaluated------------”)

}

@Override

void buildFinished(BuildResult result) {

println(“buildFinished------------”)

}

})

在执行构建的时候,这个监听器会监听到主要的生命周期事件,看名字大概就能大概猜出是什么意思,buildStarted已过时.也可以看看官方文档详细了解

加入之后打印如下:

setting 开始配置

setting 配置完成

settingsEvaluated------------

projectsLoaded------------

Configure project :

根build.gradle 开始配置

根build.gradle 配置完成

Configure project :app

app build.gradle 开始配置

app build.gradle 配置完成

所有模块都已配置完成

projectsEvaluated------------

buildFinished------------

4. gradle task


4.1 初识task

gradle中所有的构建工作都是由task完成的,它帮我们处理了很多工作,比如编译,打包,发布等都是task.我们可以在项目的根目录下,打开命令行(AS自带,底部有Terminal,打开就行)执行gradlew tasks查看当前项目所有的task.

在命令行如果执行失败,则将项目的JDK location设置成本地jdk的路径,而且jdk的版本还需要是java 8. 我用的jdk版本是1.8.0_231.

Task :tasks


Tasks runnable from root project


Android tasks


androidDependencies - Displays the Android dependencies of the project.

signingReport - Displays the signing info for the base and test modules

sourceSets - Prints out all the source sets defined in this project.

Build tasks


assemble - Assemble main outputs for all the variants.

assembleAndroidTest - Assembles all the Test applications.

build - Assembles and tests this project.

buildDependents - Assembles and tests this project and all projects that depend on it.

buildNeeded - Assembles and tests this project and all projects it depends on.

bundle - Assemble bundles for all the variants.

clean - Deletes the build directory.

cleanBuildCache - Deletes the build cache directory.

compileDebugAndroidTestSources

compileDebugSources

compileDebugUnitTestSources

compileReleaseSources

compileReleaseUnitTestSources

Build Setup tasks


init - Initializes a new Gradle build.

wrapper - Generates Gradle wrapper files.

Cleanup tasks


lintFix - Runs lint on all variants and applies any safe suggestions to the source code.

Help tasks


buildEnvironment - Displays all buildscript dependencies declared in root project ‘Hello’.

components - Displays the components produced by root project ‘Hello’. [incubating]

dependencies - Displays all dependencies declared in root project ‘Hello’.

dependencyInsight - Displays the insight into a specific dependency in root project ‘Hello’.

dependentComponents - Displays the dependent components of components in root project ‘Hello’. [incubating]

help - Displays a help message.

model - Displays the configuration model of root project ‘Hello’. [incubating]

projects - Displays the sub-projects of root project ‘Hello’.

properties - Displays the properties of root project ‘Hello’.

tasks - Displays the tasks runnable from root project ‘Hello’ (some of the displayed tasks may belong to subprojects).

Install tasks


installDebug - Installs the Debug build.

installDebugAndroidTest - Installs the android (on device) tests for the Debug build.

uninstallAll - Uninstall all applications.

uninstallDebug - Uninstalls the Debug build.

uninstallDebugAndroidTest - Uninstalls the android (on device) tests for the Debug build.

uninstallRelease - Uninstalls the Release build.

Verification tasks


check - Runs all checks.

connectedAndroidTest - Installs and runs instrumentation tests for all flavors on connected devices.

connectedCheck - Runs all device checks on currently connected devices.

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
img

最后

说一千道一万,不如自己去行动。要想在移动互联网的下半场是自己占有一席之地,那就得从现在开始,从今天开始,马上严格要求自己,既重视业务实现能力,也重视基础和原理。基础夯实好了,高楼才能够平地而起,稳如泰山。

最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上相关的我搜集整理的24套腾讯、字节跳动、阿里、百度2020-2021面试真题解析,我把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包知识脉络 + 诸多细节

还有 高级架构技术进阶脑图、Android开发面试专题资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。

一线互联网面试专题

379页的Android进阶知识大全

379页的Android进阶知识大全

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

36891213)]

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐