
Gradle
文章平均质量分 70
锐湃
这个作者很懒,什么都没留下…
展开
-
Android Studio 安装ASM插件
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。原文链接:https://blog.youkuaiyun.com/wangzhongshun/article/details/96274140。转载 2024-12-26 01:09:23 · 109 阅读 · 0 评论 -
Android Studio调试Gradle插件
使用ASM在编译期修改字节码来完成各种功能(统计方法耗时、全埋点统计...),就需要开发Gradle插件。开发插件中遇到问题排查使用日志输出效率太低了,能断点调试的话就更好了。其实已经有很多文章写了调试插件的方法,但是自己照着他们的步骤下来还是遇到一些问题,把这些问题记录下来方便大家少走弯路。Android Studio版本是3.5.2,Gradle版本是3.5.1转载 2024-12-26 01:03:56 · 155 阅读 · 0 评论 -
compileDebugJavaWithJavac task (current target it 1.8) and kaptGenerateStubsDebugKotlin task...
这个错误提示 “compileDebugJavaWithJavac task (current target is 1.8) and kaptGenerateStubsDebugKotlin task (current target is 17)” 表示在执行 compileDebugJavaWithJavac 任务时,Java 的编译目标版本为 1.8,而在执行 kaptGenerateStubsDebugKotlin 任务时,Kotlin 的编译目标版本为 17,它们应该设置为相同的版本。转载 2024-12-26 00:56:31 · 412 阅读 · 0 评论 -
ASM字节码插桩之Transform的替代方案
最近在学习asm字节码插桩相关的知识,发现在高版本的gradle上以前的Transform已经废弃,于是研究了一下新版本字节码插桩的实现,本文将简单地介绍下新版本gradle上字节码插桩的实现。GitHub - SmilingTeresa/AsmDemo: ASM插桩Demo。转载 2024-12-26 00:53:20 · 206 阅读 · 0 评论 -
Android Studio添加aar依赖的两种方式
Android Studio添加aar依赖的两种方式转载 2024-12-26 00:44:06 · 297 阅读 · 0 评论 -
Gradle第8课:Gradle 中自定义插件的实现
Gradle 插件功能可以很好的组织我们的编译逻辑代码,使它能在不同的项目和工程中重复使用。我们可以自定义实现自己的 Gradle 插件,然后分享给其他人使用。我们可以使用不同的语言来实现,不过本章中作者选择使用 Groovy 来实现的,大家也可以使用像 java、scala等喜欢的别的语言来实现。Gradle自定义插件的实现和自定义任务类型非常的相似,而它两一般都是结合使用的。所以如果还不了解如何自定义任务类的可以先看上一节的内容。首先有三种方式来编写我们的插件。转载 2024-12-26 00:39:50 · 66 阅读 · 0 评论 -
Gradle 自定义插件
maven 发布插件 https://docs.gradle.org/current/userguide/publishing_maven.html。开发辅助插件 https://docs.gradle.org/current/userguide/java_gradle_plugin.html。使用插件 https://docs.gradle.org/current/userguide/plugins.html。Gradle 教程 https://gradle.org/guides/?转载 2024-12-26 00:38:02 · 187 阅读 · 0 评论 -
Android-gradle plugin
都是可以直接使用gradle.properties中的key-value配置,例如在gradle.properties中配置了DEV_MODE=true,则可在gradle文件中直接使用if ("true" == DEV_MODE) {xxx},但这里有个限制,gradle.properties中配置的value,在使用的时候,都会被当作字符串类型的,就算写的是数字或者true/false这样的。这里的if是判断是否使用新的dsl和api,一般来说新的gradle这是都是返回false从而走到if分支。转载 2024-12-26 00:15:44 · 277 阅读 · 0 评论 -
Android plugin如何兼容App插件和library插件
最近由于工作需要,开发了一个jacoco与记录用例执行顺序的插件,整体功能开发没有问题,但是在应用到项目的时候,就出错了。被测试的项目是个多模块的项目,原则上需要对app和libraries都添加插件,不然library中的代码没有插入jacoco的桩,也没有记录用例执行顺序的桩,无法达到目的。通过这两个地方的兼容处理,就可以保证插件在app插件和library插件中同时使用,经过Demo测试没有问题。2,对apply函数中添加注册transform的兼容。转载 2024-12-26 00:14:27 · 49 阅读 · 0 评论 -
其实 Gradle Transform 就是个纸老虎 —— Gradle 系列(4)
而 Task 的依赖关系是通过 TransformTask 的输入输出关系隐式确定的,TransformManager 通过 TransformStream 链接各个 TransformTask 的输入输出,进而控制 Transform 的依赖关系顺序。是的,就是卷,而且这次直接是降维打击。Task 增量模式与 Transform 增量模式的区别在于,Task 增量执行时会跳过整个 Task 的动作列表,而 Transform 增量执行依然会执行 TransformTask,但输入内容会增加变更内容信息。转载 2024-12-26 00:13:31 · 194 阅读 · 0 评论 -
【Groovy】Groovy 扩展方法 ( 静态扩展方法配置 | 扩展方法示例 | 编译静态扩展类 | 打包静态扩展类字节码到 jar 包中 | 测试使用 Thread 静态扩展类 )
在 工程根目录\src\main\groovy\ 目录下创建 manifest\META-INF\services 目录 ,命令 , 将 classes 中的字节码文件按照 manifest/ 规则 , 打包到 thread.jar 文件中;在 Terminal 面临中 , 使用命令行执行该 Groovy 脚本 ,命令 , 进入到 src/main/groovy 目录中 ,参数 , 在该方法中 , 执行传入的闭包参数;代码语言:javascript。代码语言:javascript。转载 2024-12-25 00:55:16 · 74 阅读 · 0 评论 -
Android Gradle 自定义Plugin实现
Id 就是插件唯一标识,后续在其他项目中引用的时候,也是引用这个 id。这里有很多不需要的文件目录,包括用来测试和 Gradle 的一些相关内容,都可以删除(当然你也可以不处理),因为当我们把这个项目引入到一个 Android 项目中时,Android 项目提供了 Gradle 相关文件。如图所示,ExamplePlugin 目录下 gradle 相关的文件,在 Android 的根目录中都存在。实际上 Gradle 后续就是执行这个 Task ,来执行代码块中的代码的。转载 2024-12-25 00:52:18 · 341 阅读 · 0 评论 -
android 代码读取annotationProcessorOptions;gradle注解传参
通过JavaCompiler的getProcessorOptions()方法,我们可以在Android代码中读取annotationProcessorOptions的值。在Android代码中,我们可以通过JavaCompiler提供的getProcessorOptions()方法来读取annotationProcessorOptions。annotationProcessorOptions是在build.gradle文件中配置的参数,用于指定注解处理器的选项。classNames:用于指定要处理的类名。转载 2024-12-25 00:42:48 · 73 阅读 · 0 评论 -
gradle 7.x 如何开发一个自定义 Plugin
这里我还是使用 buildscript 的方式引入(因为对 gradle 不熟悉),起码能 work 起来,有什么好的建议可以提给我,感激不尽。执行成功后,我们会看到,在我们的项目目录下,会创建 repo 目录,里面有我们的包名的路径和里面的 jar 文件。在 settings.gradle 中,添加本地仓库,注意,是往 PluginManagement 中添加仓库。再 sync 一下,我们会看到控制台输出了我们的那句话,说明我们的插件引入成功了。商业转载请联系作者获得授权,非商业转载请注明出处。转载 2024-12-24 01:50:21 · 80 阅读 · 0 评论 -
Android Gradle(九)自定义Transform,使用Javassist工具插入和删除代码
在安卓中,难免会碰到需要动态插入代码,或者删除代码。这时候就需要用到自定义Transform任务,来对Class文件进行扫描和获取。可以插入的代码场景有哪些?例如:打印方法的执行时间等。可以删除的代码场景有哪些?例如:把代码中Log.e日志打印的代码去掉等先看下代码前后效果,原始代码如下:经过修改后(通过反编译apk得到源码):接下来,让我们看看如何对以上两个场景进行代码的插入和删除。转载 2024-12-24 01:44:17 · 112 阅读 · 0 评论 -
Android Gradle(七)三种自定义插件方式
我们知道,在Android中每一次的编译和打包其实都是一个个task任务顺序执行或者并发执行最终生成一个Apk。也就是说所有的任务可以想象成一条线,上个任务的产出就是下一个任务的输入(流水线作业😄)。例如下图:一个简单的APK构建流程例如下图:实际构建中的task任务可以简单的理解为:前缀带有compile的task:一般是做编译转换的任务,例如:Java文件转换成Class前缀带有merge的task:一般是合并各种资源文件任务,例如:所有的Assets文件合成一个。转载 2024-12-24 01:40:13 · 369 阅读 · 0 评论 -
ASM字节码插桩点击防抖以及统计方法耗时
Transform API 是 AGP1.5 就引入的特性,Android在构建过程中回将Class转成Dex,此API就是提供了在此过程中插入自定逻辑字节码的功能,我们可以使用此API做一些功能,比如无痕埋点,耗时统计等功能。不过此API在AGP7.0已经被废弃,8.0会被移除,取而代之的是Transform Action。转载 2024-12-19 00:20:45 · 96 阅读 · 0 评论 -
手把手教你通过 AGP + ASM 实现 Android 应用插桩
{// ...getName(): 当前transform的名字,能够在打包过程中看到它对应生成的。: 指定要处理的输入类型,上面的设置就表示只处理字节码,不处理资源。getScope(): 表示处理输入的范围,上面的设置表示整个项目的所有module和所有的依赖。: 表示是否支持增量更新,最好选择是。如果是否的话,每次打包都相当于清除缓存后重新打包;如果是是的话,只会处理修改后的文件。: 方法为处理插桩的入口函数。转载 2024-12-06 17:51:29 · 134 阅读 · 0 评论 -
保障密钥的安全
如果您选择自行管理和保护自己的应用签名密钥和密钥库(而不是选择加入),那么保障应用签名密钥的安全对于您和用户而言都非常重要。如果您允许某人使用您的密钥,或者将您的密钥库和密码放在了不安全的地方,以致于第三方可以找到和使用相应信息,就会损害您的作者身份和用户对您的信任。:如果您使用 Play 应用签名,Google 的基础架构会保障您的应用签名密钥的安全。您还应按下述方式保障上传密钥的安全。如果您的上传密钥被盗,您可以在 Play 管理中心内。转载 2024-11-27 21:14:27 · 118 阅读 · 0 评论 -
Gradle开发手册-进阶篇
在基础篇中了解了Gradle相关的知识同时通过一个例子实战了一下如何构建一个简单的Gradle-java应用。本章会详细讲解下gradle配置相关的详细内容。转载 2024-11-27 21:08:49 · 362 阅读 · 0 评论 -
Cannot access ‘androidx.activity.FullyDrawnReporterOwner‘ which is a supertype of
【代码】Cannot access 'androidx.activity.FullyDrawnReporterOwner' which is a supertype of。转载 2024-11-01 14:25:38 · 261 阅读 · 0 评论 -
Kotlin @Parcelize 配置方法
这个注解告诉Kotlin 编译器要自动生成android.os.Parcelable的writeToParcel(), describeContents() 等方法,还有生成一个构建器CREATOR。一定要注意的是,这个注解仅仅在直接或间接实现了android.os.Parcelable的类才能使用,并且原始的构造属性才会被序列化。原文链接:https://blog.youkuaiyun.com/qq_36113746/article/details/127651311。Kotlin 1.4.20 及以后。转载 2024-10-25 20:11:06 · 364 阅读 · 0 评论 -
Android 34 Arouter适配Gradle7.4.2和8.0
然后我就还是找了Arouter的github文档想看看更新说明,好家伙,几年没更新了,但是好人还是多的,这个好哥们就给咱更新了Arouter的插件。使用34sdk必须是gradle7.0以上的版本,因为种种问题省略了必须要7.4.2以上才能正常适配,但是从gradle 7.2开始。换成 : classpath "io.github.JailedBird:arouter-gradle-plugin:1.0.2"绿色部分是加的,红色是删除的,跟git一样的,一目了然了吧。转载 2024-10-22 17:34:12 · 679 阅读 · 0 评论 -
gradle国内镜像下载地址
gradle国内镜像下载地址原创 2024-10-21 20:42:07 · 1955 阅读 · 0 评论 -
Gradle基础学习(五) 认识依赖管理
内置了对依赖管理的支持。是一种自动化的技术,用于声明和解决项目所需的外部资源。在Gradle构建脚本中,我们定义了构建项目的过程,而这个过程可能需要外部依赖,可以是JAR文件、插件、库或源代码。转载 2024-10-17 17:06:30 · 200 阅读 · 0 评论 -
gradle ‘flavorDimensions‘ is deprecated
'flavorDimensions' is deprecated 解决办法原创 2024-09-18 16:39:59 · 628 阅读 · 0 评论 -
Using dependency catalogs requires the activation of the matching feature preview. gradle 统一依赖管理
Using dependency catalogs requires the activation of the matching feature preview.原创 2024-08-16 10:30:29 · 3874 阅读 · 0 评论 -
哔哩哔哩APP的 AGP8 升级之旅
以上就是本次升级的全部过程,虽然过程比较曲折,但是最终还是完成了。路漫漫其修远兮,吾将上下而求索。转载 2024-08-12 15:45:27 · 633 阅读 · 0 评论 -
AGP 8.0 路由框架新思路 Arouter gradle
说到路由又是老生长谈了,阿里的ARouter、美团的WMRouter这些老牌知名度很高的路由框架。由于 AGP 8.0 以后不能支持,Github 上也有很多人提了PR,Issues 里边也有很多个开发了支持8.0 的插件。去年我为了支持 AGP 8.0 以及 KSP, 也写了一个路由框架LRouter。新框架难免会有很多问题,刚好公司有一个新项目要做,我自己在公司的项目中第一个接入的,踩了半年的坑,也基本上稳定了下来。在这里把遇到的一个很致命的编译问题分享一下解决的思路。转载 2024-07-17 16:55:35 · 496 阅读 · 0 评论 -
AGP8.0 ASM 更简单灵活了
在之前《Gradle Transform + ASM 探索》一文中讨论了使用 AGP 提供的 Transform 接口自定义Gradle插件,通过 ASM 进行代码插桩。实现一些类似方法耗时统计,批量添加点击事件做埋点的功能。但是随着 AGP8.0 的到来,Transform 接口已经被废弃了,至于废弃的原因官方解释也是很官方了。说白了,就是不好用,传统的 Transform API 增加编译耗时。同时提供了更好用的 API 来规避一些编译时的问题。转载 2024-07-17 17:11:07 · 211 阅读 · 0 评论 -
Gradle 依赖管理:告别 buildSrc 拥抱 Catalogs
本文介绍了三种比较推荐的做法,BuildSrc + Kotlin DSL ,Catalogs + Groovy DSL,Catalogs + Kotlin DSL并且这三种方式各有利弊。BuildSrc + Kotlin DSL 的方案的主要特点是编译会稍慢,可能需要处理依赖版本冲突问题,好处是熟悉的Kotlin语法,与良好的代码导航支持。转载 2024-07-03 10:27:07 · 197 阅读 · 0 评论 -
BuildConfig类找不到,BuildConfig.java类不在编译加载路径问题解决
原因是buildConfigField脚本写在了testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"脚本之后;原创 2024-06-21 17:53:42 · 946 阅读 · 0 评论 -
gradlew打包Android环境搭建
gradlew命令其实运行的是proj.android-studio目录下的gradlew.bat脚本。转载 2024-06-04 21:29:52 · 313 阅读 · 0 评论 -
啊 ?用BuildSrc管理Android 依赖版本已经过时了?Catalogs才是版本答案?我不信!gradle统一依赖
本文介绍了三种比较推荐的做法,BuildSrc + Kotlin DSL ,Catalogs + Groovy DSL,Catalogs + Kotlin DSL并且这三种方式各有利弊。BuildSrc + Kotlin DSL 的方案的主要特点是编译会稍慢,可能需要处理依赖版本冲突问题,好处是熟悉的Kotlin语法,与良好的代码导航支持。转载 2024-04-25 09:52:21 · 429 阅读 · 0 评论 -
AndroidStudio使用localMaven
有时候开发一个三方库,开发阶段并不希望提交到服务器maven,只想提供给本地的其他项目使用的时候,可以使用localMaven,将三方库提交到本地计算机仓库,然后其他项目将localMaven配置到仓库查找列表,这样,可以避免不断的往服务器提交三方库而需要不断的提升版本号的问题。转载 2024-04-24 17:50:59 · 350 阅读 · 0 评论 -
编译优化之Gradle最佳配置实践
本文先是介绍了为什么要做编译优化,然后分析了影响编译速度的因素有哪些,从最少、复用的构建原则入手,详细的为大家介绍了一些低成本且实用的最佳实践指南。如果你还没有优化过,可以实操起来了~转载 2024-04-17 20:13:57 · 664 阅读 · 0 评论 -
Cause: defaultConfig contains custom BuildConfig fields, but the feature is disabled.
解决Cause: defaultConfig contains custom BuildConfig fields, but the feature is disabled.原创 2024-04-16 19:26:31 · 1122 阅读 · 0 评论 -
gradle maven-publish发布aar避免出现版本号unspecified情况
maven-publish发布aar避免出现版本号unspecified情况原创 2024-04-11 16:45:04 · 368 阅读 · 0 评论 -
Gradle 缓存目录结构 缓存策略
Gradle 的缓存策略中,对于,也就是从我上次更新之后,24小时内都会使用上次的缓存Gradle 对于动态版本和变化模块的缓存时间默认是 24 小时。动态版本 是什么你见过的像3.+这种就是动态版本,它会取检查到的最高的版本号。又比如,它也是动态版本而变化模块就是像这种后面带 SNAPSHOT 的快照版本,不是动态版本,不会更新这两者的区别就是xxx+转载 2024-04-02 20:07:46 · 336 阅读 · 0 评论 -
Android Studio处理SNAPSHOT依赖项
通过在Studio 3.0.1上使用SNAPSHOT依赖项,我遇到了一些麻烦.我也试过Android Studio 3.1,同样的问题依然存在.发布新版本的库时,如果单击“刷新所有Gradle项目”图标,则应用程序构建正常.但是,Android Studio在快照中看不到任何更改.我已经尝试重新启动Android Studio并使其缓存无效,没有任何区别.如何让Android Studio了解这些变化?转载 2024-04-02 20:03:44 · 178 阅读 · 0 评论