翻了很多文章發(fā)現(xiàn)沒有人講過有關(guān)gradle transforms的緩存問題,最近項(xiàng)目中遇到一個(gè)問題,使用AGP8+,在使用最新的AsmClassVisitorFactory去做代碼插樁時(shí)發(fā)現(xiàn),如果對(duì)一個(gè)依賴庫進(jìn)行插樁了,gradle會(huì)緩存在本地gradle home下的caches\transforms-x 目錄下。如果后續(xù)不想對(duì)某個(gè)庫進(jìn)行插樁,那么是無法主動(dòng)解決的。嘗試過刪除transforms-3\bd362b1009f85\transformed\..下面的庫文件,但是編譯時(shí)會(huì)報(bào)找不到j(luò)ar包,說明gradle編譯器仍然是在主動(dòng)去找這個(gè)緩存而且能知道之前生成過必須要精準(zhǔn)找到的,而不是像工程的build緩存一樣,沒有了會(huì)主動(dòng)生成。
? ? 找過很多清除緩存,以及禁用gradle緩存的方式都不管用,跟源碼也跟到了 BaseDexingTransform 類里,發(fā)現(xiàn)緩存的gradle文件應(yīng)該是通過@get注解之類什么機(jī)制賦值給primaryInput的就跟不動(dòng)了。沒有找到怎么去清空gradle對(duì)這個(gè)緩存文件的持有。因?yàn)槲抑貑⒌鹊确绞蕉荚囘^了,目前只能確定緩存持有應(yīng)該是寫入本地文件了。卡了好久了,頭疼,求個(gè)大佬解惑。
```
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)
? ? }
```