Gradle系列(二) Gradle执行顺序和task,GitHub标星9K的Google官方MVP+Rxjava项目详解
维基百科: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,即可找到这个东西是解释.
首先我们来新建一个Android项目,什么都不要动.
-
最外层setting.gradle为根项目的配置,可以知道需要包含哪些模块,然后最外层的build.gralde也是根项目的配置.模块中的build.gradle是子项目的配置.
-
gradle文件夹下面是版本配置以及gradle所需要的脚本
-
最外层的gradlew为linux/mac下的脚本,gradlew.bat是windows下面用的脚本
简单在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.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移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
最后
说一千道一万,不如自己去行动。要想在移动互联网的下半场是自己占有一席之地,那就得从现在开始,从今天开始,马上严格要求自己,既重视业务实现能力,也重视基础和原理。基础夯实好了,高楼才能够平地而起,稳如泰山。
最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上相关的我搜集整理的24套腾讯、字节跳动、阿里、百度2020-2021面试真题解析,我把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包知识脉络 + 诸多细节。
还有 高级架构技术进阶脑图、Android开发面试专题资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算
36891213)]
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算
更多推荐
所有评论(0)