Status Update
Comments
sh...@gmail.com <sh...@gmail.com> #2
sh...@pinterest.com <sh...@pinterest.com> #3
(reposting under work account)
We have been hitting this issue constantly. Is it possible to configure those tasks to be non cacheable as a workaround or is that only possible inside of AGP?
hu...@google.com <hu...@google.com> #4
Currently the only way to disable caching for dexing transforms is to patch AGP manually by providing a patched DexTransform.kt
file in buildSrc
. Please see
sh...@pinterest.com <sh...@pinterest.com> #5
Thanks. Ignoring potential build perf impacts, if we essentially commented out the processIncrementally
block in DexingTransform.kt
and always ran non-incrementally, would that workaround this issue?
hu...@google.com <hu...@google.com> #6
Yes, always run the dex transform non-incrementally is another workaround.
as...@gmail.com <as...@gmail.com> #7
hu...@google.com <hu...@google.com> #8
I guess so, could you give it a try?
as...@gmail.com <as...@gmail.com> #9
Anyway, what about issue, I've tried a lot of attempts to fix and helped only turn off jacoco transformation `useJacocoTransformInstrumentation = false`.
What was changed in agp 7.4.x from 7.3.1 that break this?
hu...@google.com <hu...@google.com> #10
Are you referring to
(Regarding What was changed in agp 7.4.x from 7.3.1 that break this?
: I don't know, my theory is that some of your code has changed too when updating AGP, which exposed the Jacoco bug. Please post your comments in that issue if you'd like to continue discussing this.)
sh...@pinterest.com <sh...@pinterest.com> #11
Edit: we were actually not applying the patch correctly, so this was user error.
We've been running with a patched version of DexingTransformer.kt for about a week but are still seeing the issue. First I tried commenting out @CacheableTransform
on DexingNoClasspathTransform
, but after devs were still experiencing the error, I tried reverting that change and instead applying what I'd suggested in
Is there any other workaround or additional information I can provide to help debug? At first I thought it's perhaps the patched version of DexingTransformer.kt
wasn't being picked up, but I confirmed that it was by throwing an exception inside of doTransform
.
hu...@google.com <hu...@google.com> #12
Regarding the non-cacheable fix: Can you check if it actually takes effect (i.e., the transform outputs are not cached)? Maybe comment out @CacheableTransform
in the BaseDexingTransform
class too?
Regarding the non-incremental fix: Note that the stacktrace in
at com.android.build.gradle.internal.dependency.BaseDexingTransform.processIncrementally(DexingTransform.kt:227)
at com.android.build.gradle.internal.dependency.BaseDexingTransform.doTransform(DexingTransform.kt:137)
Please check your stacktrace after applying the non-incremental fix:
- If it still shows
processIncrementally
, that means the fix was not applied successfully. - If it shows
processNonIncrementally
, that is probably a different bug.
sh...@pinterest.com <sh...@pinterest.com> #13
Thanks! I did confirm we were not applying the patch correctly (as you pointed out, processIncrementally
was in the callstack) but we are now. I will report back if we're still having issues. Appreciate the support.
as...@gmail.com <as...@gmail.com> #15
Is it possible to cherry-pick changes to AGP 8.0?
hu...@google.com <hu...@google.com> #16
Thanks, but I'm afraid that it's a bit late for AGP 8.0.
(Btw, as mentioned at
as...@gmail.com <as...@gmail.com> #17
an...@google.com <an...@google.com> #18
Thank you for your patience while our engineering team worked to resolve this issue. A fix for this issue is now available in:
- Android Studio Koala | 2024.1.1 Canary 6
- Android Gradle Plugin 8.5.0-alpha06
We encourage you to try the latest update.
If you notice further issues or have questions, please file a new bug report.
Thank you for taking the time to submit feedback — we really appreciate it!
Description
(I'm creating this bug based on Internal Issue 234414461 .)
Steps to reproduce
app
, setminSdk >= 24
(whenminSdk < 24
, dexing transforms are not incremental)lib
, setcompileOption.targetCompatibility = "11"
(in lower Java versions, nest members do not exist)lib
, write a Java class with nested classes./gradlew :app:mergeLibDexDebug --build-cache
at that location../gradlew :app:mergeLibDexDebug --build-cache
. Many tasks/transforms should have cache hits../gradlew :app:mergeLibDexDebug --build-cache
again. It will fail with:Root cause
Dexing transforms use a desugaring graph to store dependencies among class files for incremental dexing/desugaring.
The desugaring graph's nodes are currently absolute paths, which means after a remote cache hit, it will not be usable and will result in subsequent failed incremental builds.
We were aware of this issue when designing the graph and used a workaround , but (I think) at some point Gradle changed the behavior and it no longer worked.
Potential fix
Make the desugaring graph relocatable. It is a bit difficult because there isn't one single root path to normalize the absolute file paths (instead, there are multiple root paths).
(If we can't work out a solution soon, the temporary measure is to ensure in the first build after a remote cache hit, affected transforms will be non-incremental.)