![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
gradle
文章平均质量分 94
一叶飘舟
目标赋予我们生命的意义和目的。有了目标,我们才会把注意力集中在追求喜悦,而不是在避免痛苦上。(急需找我,加微信:jdsjlzx)
展开
-
Gradle自定义task打包AAR和APK
上图图示为打包AAR过程中,所经历的一系列task任务,以及执行顺序。如果我们想要修改其中的某一步,只需要定义我们自己的task对build目录下的文件做修改,将task插入到目标动作task中间,即可完成功能。以下列举多个例子来演示一下。转载 2024-07-09 19:41:46 · 59 阅读 · 0 评论 -
从Gradle生命周期到自定义Task挂接到Build构建流程全解
如果对一个构建流程的任务依赖关系不熟悉的话,可以使用第三方插件来查看,在根项目的build.gradle中添加如下代码:maven {// 应用插件然后执行./gradlew taskTree --no-repeat我们知道,Gradle 的构建流程是通过执行一系列的 Task 任务来完成的,每一个Task完成自己独特的工作之后,就根据Task的依赖关系,执行下一个 Task 任务。preBuild(开始构建之前执行的Task任务)->(合并资源文件的Task任务)->转载 2024-07-09 19:37:48 · 37 阅读 · 0 评论 -
Gradle8.0中Transform的替代方案
插件中对HuiRouterApi进行插桩,添加插入路由信息的字节码指令,在程序运行时,插桩的字节码指令执行,路由信息被注册到HuiRouterApi内部的路由表中,然后外部就可以通过HuiRouterApi进行跳转操作了。先定义一个注解,用来标记页面的路由信息,在定义一个路由管理类,用来存储路由信息并对外提供跳转功能。5、在taskAction方法中,扫描遍历所有的jar和class文件,收集路由信息,查找到HuiRouterApi类,并将收集到的路由信息通过插桩的方式添加到HuiRouterApi中。转载 2024-07-09 19:26:35 · 35 阅读 · 0 评论 -
Gradle自定义task打包AAR和APK
上图图示为打包AAR过程中,所经历的一系列task任务,以及执行顺序。如果我们想要修改其中的某一步,只需要定义我们自己的task对build目录下的文件做修改,将task插入到目标动作task中间,即可完成功能。以下列举多个例子来演示一下。转载 2024-07-03 11:34:08 · 94 阅读 · 0 评论 -
Gradle 进阶学习 之 Task
Gradle的任务依赖系统提供了灵活性和效率,允许开发者定义复杂的构建流程。了解任务依赖的执行顺序和重复依赖的处理方式,可以帮助开发者更好地控制构建过程,提高构建的可预测性和性能。在Gradle中,定义任务是构建自动化流程的基础。你可以通过几种不同的方式定义任务,每种方式都适用于不同的场景。通过Project的task()方法基本用法:使用Project对象的task()方法可以定义一个新任务。你可以传递一个字符串作为任务名称,以及一个闭包来定义任务的行为。闭包作为参数:闭包可以作为task()转载 2024-07-03 11:25:01 · 21 阅读 · 0 评论 -
从Gradle生命周期到自定义Task挂接到Build构建流程全解
如果对一个构建流程的任务依赖关系不熟悉的话,可以使用第三方插件来查看,在根项目的build.gradle中添加如下代码:maven {// 应用插件然后执行./gradlew taskTree --no-repeat我们知道,Gradle 的构建流程是通过执行一系列的 Task 任务来完成的,每一个Task完成自己独特的工作之后,就根据Task的依赖关系,执行下一个 Task 任务。preBuild(开始构建之前执行的Task任务)->(合并资源文件的Task任务)->转载 2024-07-03 10:31:05 · 43 阅读 · 0 评论 -
Gradle 动态修改VersionName和VersionCode
本文通过BuildType、Property、Variants三种方式介绍了动态修改VersionCode和VersionName的方法,但是他们的时机却有不同。BuildType:有局限性,仅能修改VersionName,无法修改VersionCode;Property:使用比较方便,在云编译场景比较常见,本地的话可以写在打包脚本里面;Variants:比较彻底,能完全覆盖,而且也可以抽成Plugin,但是如果有云编译的话,会导致云编译的更改失效;转载 2024-07-02 20:22:39 · 26 阅读 · 0 评论 -
Gradle不可忽视的构建分析
本文依次介绍了ProfileBuild Scan,通过这些构建分析工具,我们可以更好的去分析项目的构建过程,从而提升构建性能。Build Analyzer:开发工具提供,不割裂,但是分析能力相对基础,不过一般也够用了,推荐;Profile:本地分析报告,分析能力相对基础;Build Scan:在线分析报告,分析能力较强,可以进行深入的分析,推荐;其实Gradle还提供了Enterprice,比Build Scan的分析能力还要强,但是属于付费的,不是很符合现在降本增效的主题。转载 2024-07-02 20:18:01 · 21 阅读 · 0 评论 -
Gradle构建核心之Task指南
Internal自定义一个类,继承自;Action的方法需要添加注解;对外暴露的参数需要使用@Internal注解;使用自定义Task:taskName = "我是传入的Task Name "类型传入自定义Task类。执行结果:我是传入的Task Name -- MyAction2我是传入的Task Name -- MyAction1至此关于Gradle Task的部分就介绍完了。转载 2024-07-02 20:02:35 · 26 阅读 · 0 评论 -
Gradle常用命令与参数
ok,现在我们就可以针对获取的参数去做一些自定义的操作了,比如修改我们的依赖。} else {} else {这里举例,在的时候依赖了devtools 1.1.1版本,时依赖了devtools 2.2.2版本。除了dependencies里面的依赖之外,Plugin、Task之类的也可以通过动态传参的方式去做自定义操作。转载 2024-07-02 18:11:27 · 45 阅读 · 0 评论 -
一文搞懂Gradle配置
Gradle第一点其实很好理解,比如Gradle需要java11的运行环境,再比如我们为了加快编译而给Gradle设置更大的运行空间等,这类配置往往相对固定的,因为它是跟随项目走的,即使是多团队协作,大家基本也都是用的同一个环境。转载 2024-07-02 18:00:17 · 75 阅读 · 0 评论 -
Gradle 核心之 Task
只有 Task 才可以在Gradle的执行阶段去执行(其实质是执行的 Task 中的一系列 Action),所以 Task 的重要性不言而喻。Task 的定义方式有如下两种:Task 的配置方式也有如下两种:配置了 group 后可以在 Android Studio 的 Gradle 面板看到对应的 Task Group 及其分组下的 Tasks,如下图所示:一般来说都推荐为我们的 task 配置 group,便于我们查找 task。原创 2024-06-24 19:37:16 · 994 阅读 · 0 评论 -
Gradle 自动化项目构建-Gradle 核心之 Project
从明面上看,Gradle是一款强大的构建工具,但 Gradle 不仅仅是一款强大的构建工具,它更像是一个编程框架。groovy 核心语法:包括 groovy 基本语法、闭包、数据结构、面向对象等等。Android DSL(build scrpit block):Android 插件在 Gradle 所特有的东西,我们可以在不同的 build scrpit block 中去做不同的事情。Gradle API:包含 Project、Task、Setting 等等。原创 2024-06-18 20:52:50 · 1231 阅读 · 0 评论 -
ASM字节码插桩之Transform的替代方案
最近在学习asm字节码插桩相关的知识,发现在高版本的gradle上以前的Transform已经废弃,于是研究了一下新版本字节码插桩的实现,本文将简单地介绍下新版本gradle上字节码插桩的实现。转载 2024-06-17 15:37:05 · 36 阅读 · 0 评论 -
Android gradle编译时字节码处理
android app的构建是使用工具,它提供给了开发者自定义编译期行为的能力。一般情况下,我们在transform阶段进行字节码的修改,插入,删除等操作。通过字节码处理,我们可以完成很多cool的事情,比如根据编译时注解,完成一些特定的操作等。实现修改字节码的工具有:javassist (如库 ‘org.javassist:javassist:3.27.0-GA’)( 如库’com.android.tools.build:gradle:3.6.4’)原创 2024-06-15 01:02:16 · 238 阅读 · 0 评论 -
Gradle插件 扫描class文件,使用Asm完成字节码插桩功能
1.其实主要看 transform 方法 ,在该方法中我们可以扫描所有javac编译后生成的class文件。2.主要分为两个循环,一个是当前模块下的内容,一个是它所依赖的所有模块文件,或jar包等 3.根据匹配规则,找寻我们需要被插桩使用的class文件。转载 2024-06-13 19:18:10 · 49 阅读 · 0 评论 -
Android 基于Gradle 7.2+,自定义插件示例(实测7.4.2也可以运行)
结果,并不能运行那段命令代码,搜索了一堆资料,也没搞定,放弃了。看了官方的示例,把那段也注释掉了,真有意思,哈哈。* 在 manifest 文件中替换文本,得到了 app/build/intermediates/merged_manifest/staging/[build variant]ManifestUpdater/AndroidManifest.xml。创建变体还有一些简单的方式,我的示例中,试了 “构建变体,方式1、2、3” ,就定义在 app/build.gradle.kts 中。转载 2024-06-13 10:57:26 · 117 阅读 · 0 评论 -
写个代码扫描插件,再也不怕 log4j 等问题
Java ASM(Java Bytecode Assembler)是一个用于生成和修改Java字节码的库。ASM提供了一种灵活而强大的方式来分析、转换和生成Java类文件。使用ASM,我们可以在不改变源代码的情况下,通过操纵字节码来实现对代码的定制化需求。这种能力在许多领域中都有应用,包括编译器代码优化字节码工具AOP(面向切面编程)框架等。本篇到这里就结束了,严格而言,本篇其实算不上什么ASM高深技巧,只能算的上是基础操作。更多是希望,通过本篇,能使得新手同学对于ASM基础使用有一个了解,特别是在。原创 2024-06-13 10:52:43 · 907 阅读 · 0 评论 -
从开发一个插件看,安卓gradle插件适配AGP8.0
相信很多小伙伴项目还没有升级AGP7.0,可是最新的AGP已经到8.2了,适配AGP8.0也要提上日程了,尤其是一些插件项目,因为8.0删除了transform API,所以需要提前做好适配工作。如果你是一个插件小白,本篇可以教你从0开始在AGP7.0以上如何开发插件。如果你是一个插件开发者,相信本篇也可以给你适配AGP8.0带来一些帮助。以上就是如何开发兼容AGP8.0插件的全部内容了。转载 2024-06-13 10:50:12 · 163 阅读 · 0 评论 -
Android Gradle——自定义Transform,使用Javassist工具插入和删除代码
在安卓中,难免会碰到需要动态插入代码,或者删除代码。这时候就需要用到自定义Transform任务,来对Class文件进行扫描和获取。可以插入的代码场景有哪些?例如:打印方法的执行时间等。可以删除的代码场景有哪些?例如:把代码中Log.e日志打印的代码去掉等先看下代码前后效果,原始代码如下:经过修改后(通过反编译apk得到源码):接下来,让我们看看如何对以上两个场景进行代码的插入和删除。转载 2024-06-05 23:16:25 · 36 阅读 · 0 评论 -
Android Gradle——Task基础和自定义Task
在Gradle中,学习和使用Task是我们必不可少的内容。什么是Task?Task就是一个操作,你可以用来移动复制文件、自定义输出打包apk文件名或者上传一些文件或者jar到Maven仓库等。再简单地说,可以理解成一个Java方法。Android中最常见的Task,如下:可以看到,他的任务就是删除根目录下的buildDir文件夹。接下来,让我们看看如何创建一个任务不知道你会不会有疑惑,task有doFirst,doLast方法,那任务执行中的方法在哪里?如果想知道答案的话,继续往下看。转载 2024-06-05 14:54:00 · 122 阅读 · 0 评论 -
Gradle基础 构建生命周期和Hook技术
理解Gradle构建的生命周期是学习Gradle构建系统的基础,对于梳理构建系统执行流程以及编写自己的构建流程都是非常有帮助的,希望这篇文章能够帮助到迷茫的初学者。转载 2024-06-05 00:01:25 · 29 阅读 · 0 评论 -
Android Apk 编译打包流程,了解一下
作为一个Android开发,每天都会有相当一部分的时间花在编译打包上,如果项目比较大的话编译一次可能就要十几分钟。那么在编译打包的过程中AGP到底做了什么?为什么编译那么耗时,又该怎么优化?要解决这些问题,首先就需要我们对编译打包的流程有个总体的了解本文主要包括以下内容编译打包总体流程编译打包主要步骤编译打包过程中的Task本文主要详细介绍了打包编译的总体流程,主要步骤,以及AGP中相关的Task。转载 2024-06-04 23:01:03 · 30 阅读 · 0 评论 -
Android APK反编译&重签名&aab&apks转换
④、-Xss128k:设置每个线程的堆栈大小.JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K.更具应用的线程所需内存大小进行 调整.在相同物理内存下,减小这个值能生成更多的线程.但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右.这段命令是一系列在Windows环境下使用的批处理命令,旨在重命名一个.apks文件为.zip文件,然后使用WinRAR解压这个.zip文件,并最后删除原.zip文件和一个名为toc.pb的文件。转载 2024-06-04 20:31:26 · 111 阅读 · 0 评论 -
Kotlin版Gradle插件开发
Gradle 是一个开源的构建自动化系统,可以帮助我们操作构建的过程及其逻辑。例如,当我们构建一个Android 应用时,Gradle 会编译所有代码并为我们创建一个 APK。Gradle 分三个阶段评估和运行构建,分别是 Initialization (初始化)、Configuration (配置) 和 Execution (执行)在 Initialization (初始化) 阶段,Gradle 会决定构建中包含哪些项目,并会为每个项目创建 Project 实例。转载 2024-06-03 15:02:15 · 52 阅读 · 0 评论 -
一步一步跟我ASM实战
在 Android 开发中,要想使用 ASM 库来开发自己的字节码插桩库,需要 Hook Android 的编译流程,基于 Gradle(Gradle 是基于 Groovy 语言来开发的) 的API 来实现 class / lib 文件的遍历与操作。Hook Android 的 Transform 阶段:transformClassesWithDexBuilderForXXX(XXX 即是 buildTypes 对应的环境)(不用翻墙) 查阅 Google 官方的。转载 2024-05-29 18:08:14 · 42 阅读 · 0 评论 -
字节码插桩 -- 入门篇
Android Studio --> File --> New --> New Module --> Java or Kotlin Library --> plugin(名字自取)/***/api: Int,/*** 方法开始执行*//*** 方法执行结束*/"append",",false"append",",false",false"d",)I",false。转载 2024-05-29 11:25:18 · 43 阅读 · 0 评论 -
Gradle统一管理依赖
那我们可以把 Version Catalog 发布到远端,其他项目需要时直接依赖然后使用即可,这样就很方便的实现了版本的统一以及快速依赖了。缺点: 在 module 的 build.gradle 中使用时,不支持代码提醒,不支持点击跳转,多 moudle 开发时,不同 module 的依赖需要 ctrl+c/v 导致开发的效率降低。Android 发展至今,各种新技术层出不穷,版本管理也出现了很多方案,这些方案并没有绝对的优劣,还是需要结合实际项目需求来选择的,但是新的方案还是需要学习了解的。转载 2024-05-29 10:43:33 · 68 阅读 · 0 评论 -
Gradle筑基——AGP插件详解
配置清单中信息会覆盖原Manifest文件中的信息,当有多个清单配置时会合并 合并工具会根据每个清单文件的优先级按顺序合并,将所有清单文件组合到一个文件中。这意味着,您可以在 defaultConfig 代码块中提供所有变种的基本配置,每个变种均可更改其中任何默认值,如 applicationId。可以看到打包apk的任务基本和前面图片里面描述的流程一致,整个过程都是编译然后合并,打包的过程。商业转载请联系作者获得授权,非商业转载请注明出处。在配置清单中可以设置Manifest清单中给的配置信息,如。转载 2024-05-26 17:50:19 · 159 阅读 · 0 评论 -
Gradle筑基——Gradle Maven仓库管理
maven私服其实就是在部门·局域网·中设置一个maven仓库,所有在局域网中的开发人员都可以使用该仓库:PS:私服中可以添加自己本地的仓库,也可以代理中央仓库中的包。毕竟对于一些网络比较差的环境,去中央仓库里面获取数据是一个很耗时的操作。原创 2024-05-26 17:05:40 · 1569 阅读 · 0 评论 -
Gradle筑基——Gradle自定义插件实战
首先来讲下Gradle和Gradle插件有啥区别?Gradle是一套构建工具,其内部构建过程主要是以Project组成一个树形的生态系统,整个构建流程有自己的生命周期。每个Project又是由若干个Task组成。Gradle插件你可以理解为是运行在Gradle这套构建系统上的单个task, 如执行脚本的编写字节码插庄等,都可以依靠Gradle插件实现。我们常用的应用插件的ID:‘com.android.application’ 或者lib库:‘com.android.library’实战。转载 2024-05-26 10:05:13 · 34 阅读 · 0 评论 -
Gradle筑基——Gradle三种自定义插件方式
我们知道,在Android中每一次的编译和打包其实都是一个个task任务顺序执行或者并发执行最终生成一个Apk。也就是说所有的任务可以想象成一条线,上个任务的产出就是下一个任务的输入(流水线作业😄)。例如下图:一个简单的APK构建流程例如下图:实际构建中的task任务前缀带有compile的task:一般是做编译转换的任务,例如:Java文件转换成Class前缀带有merge的task:一般是合并各种资源文件任务,例如:所有的Assets文件合成一个。转载 2024-05-26 00:55:02 · 178 阅读 · 0 评论 -
Android Gradle开发、应用、插件发布(六)—实现打包自动复制文件插件
项目中遇到了一个问题 :其中一个模块MyLibrary的assets文件夹中,需要存放很多文件(每个文件对应一个功能)。这样导致的问题是MyLibrary打出的这个aar包体积特别大。如果把MyLibrary严谨地拆解成若干个Module又比较费时,对于现在业务现状来说也显得没那么必要。那么能不能在上传MyLibrary这个aar的时候,自动复制相应的文件到assets目录下,打出不同功能的aar呢?这就需要自己开发一个Gradle插件来完成这个功能了。本文环境。转载 2024-05-25 18:22:02 · 632 阅读 · 0 评论 -
Gradle筑基——Gradle APi详解
这篇文章主要是对Gradle中我们比较常用给的一些api进行了讲解。主要包括Project相关apiTask相关api文件相关api和属性相关api等,其实还有一些其他的比如外部命令的api,这些很少会用到,就不再讲解了.可以结合这篇文章,自己再去看源码和相关官网文档,会让自己对api的认识更加深刻。后面会持续推出Gradle的一些高级语法,如自定义插件优秀开源框架插件的解读以及AGP的解析;转载 2024-05-24 18:28:36 · 154 阅读 · 0 评论 -
Gradle筑基——Gradle语法
很多开发喜欢把Gradle简单定义为一种构建工具,和ant,maven等作用类似, 诚然Gradle确实是用来做构建,但是如果简单得把Gradle拿来做构建,就太小看Gradle了.笔者更愿意将Gradle看做一种编程框架。在这个框架中,你可以做很多ant,maven等常用构建工具做不了的事情, 如将自己的任务task集成到构建生命周期中,完成文件拷贝,脚本编写等操作。转载 2024-05-23 20:56:47 · 47 阅读 · 0 评论 -
Android Gradle开发、应用、插件发布(五)—Kotlin DSL
虽然 Kotlin 也支持可变属性(var),但在 Gradle Kotlin DSL 的上下文中,使用 set 方法可能是为了遵循 Gradle API 的约定,或者是为了强调这是一个设置操作。像Kotlin它不仅可以做一些Android开发,还可以做后端,它不属于DSL,但是我们可以通过Kotlin的一些语法规则,来开发一些特定领域的DSL语言。我们去创建Kotlin的Gradle的时候,可以发现,它里面的内容和以前的Gradle没什么区别,但是语言上是用的Kotlin。转载 2024-05-19 16:02:28 · 93 阅读 · 0 评论 -
Android Gradle开发、应用、插件发布(四)—创建buildSrc插件和使用命令行创建Gradle插件
前文中,我们介绍了在Android中,如何基于Gradle 8.2,创建Gradle插件。这篇文章,我们以buildSrc的方式来创建Gradle插件。此外,还介绍一种用Cmd命令行的方式,来创建独立的Gradle插件的方式。转载 2024-05-19 13:51:19 · 70 阅读 · 0 评论 -
Android Gradle开发、应用、插件发布(三)—基于Gradle 8.2,创建Gradle插件
本文介绍在Android中,如何基于Gradle 8.2,创建Gradle插件。转载 2024-05-19 13:25:48 · 272 阅读 · 0 评论 -
Android Gradle开发、应用、插件发布(二)—Gradle构建与生命周期
上篇文章,我们对Gradle中的基本知识,包括Gradle项目结构、Gradle Wrapper、GradleUserHome、Groovy基础语法、Groovy语法概念、Groovy闭包等知识点,这篇文章我们接着来介绍Gradle构建过程中的知识点。转载 2024-05-19 13:15:29 · 21 阅读 · 0 评论 -
Android Gradle开发、应用、插件发布(一)
当你使用 def 声明一个变量时,Groovy 不需要知道变量的具体类型,它可以在运行时动态地决定变量的类型。def a = 10 // a 将被推断为整数类型 Integerdef b = "Hello" // b 将被推断为字符串类型 String。转载 2024-05-19 12:44:15 · 98 阅读 · 0 评论