没有人能讲清gradle缓存中有关caches\transforms的机制

翻了很多文章发现没有人讲过有关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)

    }

```

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容