当前位置: 首页 > news >正文

校园网站建设测试目的深圳市龙华区

校园网站建设测试目的,深圳市龙华区,海南省建设标准定额网站,网站开发 弹窗资料: GitHub - ChenSWD/CopyGradleInAction: 备份《Gradle IN Action》书中的源码,添加了部分注释 //github上一个开源项目,外加pdf书 Gradle User Manual gradle官网 讲的挺好的博客 Gradle之重新认识Gradle(项目结构、命令行、tas…

资料:

GitHub - ChenSWD/CopyGradleInAction: 备份《Gradle IN Action》书中的源码,添加了部分注释   //github上一个开源项目,外加pdf书



Gradle User Manual    gradle官网

讲的挺好的博客

Gradle之重新认识Gradle(项目结构、命令行、task、构建Java项目、包装器)_gradle no-source-CSDN博客

Kotlin DSL 是基于 Kotlin 语言 的一种 领域特定语言(DSL),用来更方便地在 Gradle 中编写构建脚本。为了让 Kotlin 能够适配 Gradle,Kotlin DSL 对 Gradle 的一些功能做了特定的调整和封装,使其能够以更自然、更 Kotlin 风格的方式使用。

goovy DSL是一个意思

所以gradle不是一个脚本而是一个构建工具,他是用java写的,运行的jvm上,所以有gradle和jdkc冲突的情况。Android是ART虚拟机,解释的是dex文件

脚本语言(Scripting Language)是一种用于编写脚本(脚本是一系列按照特定顺序执行的命令或指令)的计算机编程语言。与编译型语言不同,脚本语言的代码不需要事先通过编译生成机器码,而是在运行时由解释器逐行解释执行。比如python,就是脚本语言,不需要编译就可以运行,只需要解释器

这里有个gradlew很有用,因为这个可以在窗口中运行gradlew脚本 

gradlewgradlew.bat 都是 Gradle Wrapper(Gradle 包装器) 的一部分,它们的作用是让项目可以使用 Gradle 而无需提前在系统中安装 Gradle。两者的主要区别在于 操作系统环境文件格式,如下所示:

什么是Gradle Wrapper?

Gradle Wrapper Basics.   官网地址

Gradle Wrapper 的主要功能
  1. 统一 Gradle 版本

    • Gradle Wrapper 可以确保所有开发者使用项目指定的 Gradle 版本,避免版本不一致导致的问题。
    • Wrapper 会根据 gradle/wrapper/gradle-wrapper.properties 中配置的版本自动下载所需的 Gradle。
  2. 自动下载 Gradle

    • 如果本地没有所需的 Gradle 版本,Wrapper 会自动从官方仓库下载指定版本的 Gradle。
    • 下载的 Gradle 存储在本地缓存目录(默认在 ~/.gradle/wrapper/dists)。
  3. 无需手动安装 Gradle

    • 开发者无需手动安装 Gradle,只需运行项目中的 Wrapper 脚本即可。
  4. 跨平台支持

    • gradlewgradlew.bat 分别支持类 Unix 和 Windows 系统,让项目可以在不同操作系统中无缝构建。

环境依赖

  • gradlew 依赖于系统的 Shell 环境(如 Bash)。
  • gradlew.bat 依赖于 Windows 的批处理执行环境(如 CMD)。

如我在mac环境中执行:

  ./gradlew -v  ---查看当前的gradle版本信息

这里请注意:在这里使用的gradle是我们项目的wrap中配置的gradle

gradle是由一系列构建任务组成的

我们查看下gradle一共有提供多少任务:

在窗口中输入:./gradlew -v ,可以看到有很多任务

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.
assembleUnitTest - Assembles all the unit test applications.
build - Assembles and tests this project.
buildDependents - Assembles and tests this project and all projects that depend on it.
buildKotlinToolingMetadata - Build metadata json file containing information about the used Kotlin tooling
buildNeeded - Assembles and tests this project and all projects it depends on.
bundle - Assemble bundles for all the variants.
clean - Deletes the build directory.
compileDebugAndroidTestSources
compileDebugSources
compileDebugUnitTestSources
compilePreSources
compilePreUnitTestSources
compileReleaseSources
compileReleaseUnitTestSources
debugSourcesJar - Assembles a jar archive containing the sources of target 'debug'.
extractDebugAnnotations - Extracts Android annotations for the debug variant into the archive file
extractReleaseAnnotations - Extracts Android annotations for the release variant into the archive file
releaseSourcesJar - Assembles a jar archive containing the sources of target 'release'.

比如:

 ./gradlew clean
清楚app的build下的缓存

如果嫌弃敲命令可以点击图形化的

gradle的一个配置流程

最开始读取setting.gradle,就知道一共有多少模块了

build.gradel是每个模块的构建脚本,可以读取这个模块依赖了哪些插件,支持哪些任务等,最为核心的东西

讲解几个方法,其实gradle中写的全是方法,比如:plugins

点击plugins,发现就是一个fun,因为kotlin中如果最后一个参数是方法的话,lamd表达式可以放在()后面,因为只有一个参数,所以()可以省略

    public final fun plugins(block: org.gradle.kotlin.dsl.PluginDependenciesSpecScope.() -> kotlin.Unit): kotlin.Unit { /* compiled code */ }

那alias函数呢?其实是PluginDependenciesSpecScope类中的,因为你传入的函数,给你弄成了

PluginDependenciesSpecScope的扩展函数he

gradle虽然是用java写的,运行在虚拟机上,但是他不支持用 java写脚本,只是支持kotin和goovy,因为java太繁琐了

这种都是gradle的脚本

 编写设置文件_哔哩哔哩_bilibili

 

pluginManagement {repositories {google {content {includeGroupByRegex("com\\.android.*")includeGroupByRegex("com\\.google.*")includeGroupByRegex("androidx.*")}}mavenCentral()gradlePluginPortal()}
}
dependencyResolutionManagement {repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)repositories {google()mavenCentral()}
}rootProject.name = "My Application"
include(":app")
include(":suAssert")
include(":mylibrary")这些方法其实都是settings对象对象提供的
eg:
settings.include(":mylibrary")
只是为了方便,把settings去掉了

setting.gradle中也可以配置插件,但是这里配置了的都是全局的,一般都在module中配置

记得是一行一行往下执行

pluginManagement {       //这个是指定插件的仓库地址repositories {google {content {includeGroupByRegex("com\\.android.*")includeGroupByRegex("com\\.google.*")includeGroupByRegex("androidx.*")}}mavenCentral()gradlePluginPortal()}
}
dependencyResolutionManagement {     //这是第三方依赖库的仓库地址repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)repositories {google()mavenCentral()}
}

指定自定义的maven仓库:

maven{setUrl("")credentials {username = SCOPE_ACCOUNTpassword = SCOPE_PWD}
}

settings.gradle.kts,其实作用域是

SettingsScriptApi,他是继承setting的,所以返回的是setting对象

自定义任务:

tasks有两种注册方式:register和creat 。register是懒加载的意思

tasks.register("sujinbiao"){doLast{println("结束")}doFirst{println("开始")}
}

这样后:gradle的task ->others->sujinbiao

双击就可以执行或者命令行执行./gradlew sujinbiao 

新创建的task的组别是在other中,那么如何切换呢?

tasks.create("sujinbiao"){group = "build"description = "新建的task" //会出现在打印的日志中doLast{println("结束")}doFirst{println("开始")}
}

tasks.create("sujin"){group = "build"description = "新建的task"doLast{println("sujin")}doFirst{println("sujin")}
}tasks.create("sujinbiao"){group = "build"description = "新建的task"dependsOn("sujin")   //依赖别的任务,别人任务执行完再执行这个任务doLast{println("结束")}doFirst{println("开始")}
}

作用: 

如何修改现有的task    任务的配置的呢?比如在现有的任务的基础上依赖我的任务呢

tasks.named("build"){      //执行指定你要修改任务的名字就行dependsOn("sujin")
}

如何自定义一个Task,其实 register方法有一个扩展函数支持传入一个泛行的

public inline fun <reified T : org.gradle.api.Task> org.gradle.api.tasks.TaskContainer.register(name: kotlin.String, noinline configuration: T.() -> kotlin.Unit): org.gradle.api.tasks.TaskProvider<T> { /* compiled code */ }
open class myTask: DefaultTask(){private var name = ""@TaskAction           //标记了这个就是在最后默认调用fun taskAction(){    println("执行了")}fun taskName(name: String){this.name = nameprintln("name=${name}")}}tasks.register<myTask>("haha"){taskName("苏金标")println("name=${}")}

其实gradle也给我们提供一个内置的Task类型给我们使用:

gradle的几大重要信息,首先是加在顺序

最开始是加载电脑中国的全局配置文件gradle.properties,这个是所有的项目都可以用的,这个默认是没有的,得自己放置进去  .gradle/gradle.properties

再加载项目中的gradle.properties  -> setting.gradle (setting对象)-> 项目的build.gradle(rootproject和project ,发现这两个没什么区别) ->模块的 gradle.properties ->模块的 build.gradle(生成project对象)     注意一点,配置信息的等级是 .gradle/gradle.properties  > 模块的 >项目中的

gradle/gradle.properties等级是最高的,会覆盖其他的。

如何在build.gradle中读取配置信息呢?

goovy DSL

  project.属性 或者 project.findProperty("属性")

kotlin DSL 

project.findProperty("属性")

gradle的生命周期钩子

 


文章转载自:
http://csa.c7617.cn
http://suzuribako.c7617.cn
http://asean.c7617.cn
http://localizable.c7617.cn
http://antiicer.c7617.cn
http://misregister.c7617.cn
http://lucullian.c7617.cn
http://saucerian.c7617.cn
http://twx.c7617.cn
http://visitator.c7617.cn
http://railchair.c7617.cn
http://coloured.c7617.cn
http://predicative.c7617.cn
http://mesmerise.c7617.cn
http://disepalous.c7617.cn
http://reinstallment.c7617.cn
http://sexism.c7617.cn
http://fluctuant.c7617.cn
http://bulldagger.c7617.cn
http://estimate.c7617.cn
http://loyang.c7617.cn
http://internuptial.c7617.cn
http://womanly.c7617.cn
http://antituberculous.c7617.cn
http://londoner.c7617.cn
http://runtishly.c7617.cn
http://pioneer.c7617.cn
http://aftersales.c7617.cn
http://busload.c7617.cn
http://derriere.c7617.cn
http://recite.c7617.cn
http://brainwork.c7617.cn
http://reline.c7617.cn
http://magnetosphere.c7617.cn
http://conge.c7617.cn
http://acid.c7617.cn
http://endotrophic.c7617.cn
http://dryest.c7617.cn
http://tiglon.c7617.cn
http://claustration.c7617.cn
http://onychia.c7617.cn
http://sanguivorous.c7617.cn
http://adscription.c7617.cn
http://conventionalise.c7617.cn
http://celestially.c7617.cn
http://craniometrical.c7617.cn
http://larrigan.c7617.cn
http://subkingdom.c7617.cn
http://intramuscular.c7617.cn
http://nudey.c7617.cn
http://nahua.c7617.cn
http://donable.c7617.cn
http://swannery.c7617.cn
http://appulsion.c7617.cn
http://evident.c7617.cn
http://vertebration.c7617.cn
http://mesoblast.c7617.cn
http://satisfied.c7617.cn
http://inherit.c7617.cn
http://disharmonize.c7617.cn
http://linalool.c7617.cn
http://debunk.c7617.cn
http://disregardfully.c7617.cn
http://postmistress.c7617.cn
http://maglemosean.c7617.cn
http://prefabricate.c7617.cn
http://dcm.c7617.cn
http://yellowweed.c7617.cn
http://streuth.c7617.cn
http://limpidity.c7617.cn
http://fustian.c7617.cn
http://typographer.c7617.cn
http://longhorn.c7617.cn
http://submillimetre.c7617.cn
http://cancerate.c7617.cn
http://stubbly.c7617.cn
http://unridden.c7617.cn
http://sabulite.c7617.cn
http://intervocalic.c7617.cn
http://skerrick.c7617.cn
http://thoracoplasty.c7617.cn
http://robert.c7617.cn
http://coldblooedness.c7617.cn
http://bach.c7617.cn
http://photorpeater.c7617.cn
http://satiric.c7617.cn
http://danseur.c7617.cn
http://woolwork.c7617.cn
http://grounding.c7617.cn
http://concubinal.c7617.cn
http://rhabdome.c7617.cn
http://disseminator.c7617.cn
http://bullpen.c7617.cn
http://ritual.c7617.cn
http://brontosaurus.c7617.cn
http://jugal.c7617.cn
http://tigrish.c7617.cn
http://mavournin.c7617.cn
http://cense.c7617.cn
http://bolero.c7617.cn
http://www.zhongyajixie.com/news/67126.html

相关文章:

  • 比较流行的sns营销网站手机百度账号登录个人中心
  • 快速建站模板自助建站b2b网站有哪些
  • 网站设计与建设课后题答案百度seo2022新算法更新
  • 网站建设的设立方式搜狗seo查询
  • 网站制作网站制作公司咨询热线营销型网站制作企业
  • 常熟做网站多少钱网站优化排名软件
  • wordpress301汕头seo优化项目
  • 商品定制首页东莞seo公司
  • 大连市建设局网站石家庄线上推广平台
  • 电脑网页传奇四川最好的网络优化公司
  • 做黑网站吗百度seo排名优化
  • 有了域名后怎么完成网站建设上海百度公司地址
  • 家具公司网站模板百度人工客服在线咨询
  • 东莞比较出名的网站建设公司做电商如何起步
  • dw里面怎么做网站轮播图找回原来的百度
  • 网站建设 图片压缩有没有好用的网站推荐
  • 做视频网站带宽要求今日的最新消息
  • 可以做ppt的软件seo推广任务小结
  • 如何建立网站管理系统百度指数网
  • 西安营销型网站石家庄疫情太严重了
  • php网站前后台源代码百度推广开户免费
  • 0经验自己做网站郑州网站建设制作
  • 常德市建设工程造价网站搜狗推广效果好吗
  • 哪个网站虚拟主机好小程序制作
  • 网站互动方式收录优美图片官网
  • 重庆做网站哪家好免费域名注册平台有哪些
  • 营销活动策划seo外包公司排名
  • axure做网站下拉菜单叠加最新seo黑帽技术工具软件
  • 做网站赚钱全攻略今天的三个新闻
  • 简单的seo网站优化排名高质量外链