翻了很多文章发现没有人讲过有关gradle transforms的缓存问题,最近项目中遇到一个问题,使用AGP8+,在使用最新的AsmClassVisitorFactory去做代码插桩时发现,如果对一个依赖库进行插桩了,gradle会缓存在本地gradle home下的caches\transforms-x 目录下。如果后续不想对某个库进行插桩,那么是无法主动解决的。尝试过删除transforms-3\bd362b1009f85\transformed\..下面的库文件,但是编译时会报找不到jar包,说明gradle编译器仍然是在主动去找这个缓存而且能知道之前生成过必须要精准找到的,而不是像工程的build缓存一样,没有了会主动生成。
找过很多清除缓存,以及禁用gradle缓存的方式都不管用,跟源码也跟到了 BaseDexingTransform 类里,发现缓存的gradle文件应该是通过@get注解之类什么机制赋值给primaryInput的就跟不动了。没有找到怎么去清空gradle对这个缓存文件的持有。因为我重启等等方式都试过了,目前只能确定缓存持有应该是写入本地文件了。卡了好久了,头疼,求个大佬解惑。
```
package com.android.build.gradle.internal.dependency
@CacheableTransform
abstract class BaseDexingTransform<T : BaseDexingTransform.Parameters> : TransformAction<T> {
@get:Classpath
@get:InputArtifact
@get:Incremental
abstract val primaryInput: Provider<FileSystemLocation>
protected abstract fun computeClasspathFiles(): List<Path>
override fun transform(outputs: TransformOutputs) {
//TODO(b/162813654) record transform execution span
val input = primaryInput.get().asFile
val outputDir = outputs.dir(Files.getNameWithoutExtension(input.name))
doTransform(input, outputDir)
}
```