Status Update
Comments
ka...@google.com <ka...@google.com>
ch...@google.com <ch...@google.com> #2
Retraced stack trace:
Caused by: com.android.tools.r8.CompilationFailedException: Compilation failed to complete
at Version.fakeStackEntry(Version_8.8.18.java)
at com.android.tools.r8.InternalCompilationFailedExceptionUtils.create(InternalCompilationFailedExceptionUtils.java:29)
at com.android.tools.r8.utils.ExceptionUtils.failWithFakeEntry(ExceptionUtils.java:145)
at com.android.tools.r8.utils.ExceptionUtils.failCompilation(ExceptionUtils.java:89)
at com.android.tools.r8.utils.ExceptionUtils.withCompilationHandler(ExceptionUtils.java:83)
at com.android.tools.r8.utils.ExceptionUtils.withR8CompilationHandler(ExceptionUtils.java:69)
at com.android.tools.r8.R8.runForTesting(R8.java:238)
at com.android.tools.r8.R8.run(R8.java:193)
at com.android.builder.dexing.R8Tool.runR8(r8Tool.kt:350)
at com.android.build.gradle.internal.tasks.R8Task$Companion.shrink(R8Task.kt:822)
at com.android.build.gradle.internal.tasks.R8Task$R8Runnable.execute(R8Task.kt:900)
at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:63)
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:66)
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:62)
at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:100)
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:62)
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:209)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:166)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:59)
at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:174)
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:194)
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:127)
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:169)
at org.gradle.internal.Factories$1.create(Factories.java:31)
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:263)
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:127)
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:132)
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164)
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:133)
... 2 more
Caused by: java.lang.NullPointerException: Cannot read field "b" because the return value of "com.android.tools.r8.internal.BS.a(com.android.tools.r8.internal.cR)" is null
at com.android.tools.r8.ir.regalloc.LinearScanRegisterAllocator.allocateSingleInterval(LinearScanRegisterAllocator.java:1881)
at com.android.tools.r8.ir.regalloc.LinearScanRegisterAllocator.performLinearScan(LinearScanRegisterAllocator.java:1041)
at com.android.tools.r8.ir.regalloc.LinearScanRegisterAllocator.performAllocation(LinearScanRegisterAllocator.java:813)
at com.android.tools.r8.ir.regalloc.LinearScanRegisterAllocator.retryAllocation(LinearScanRegisterAllocator.java:798)
at com.android.tools.r8.ir.regalloc.LinearScanRegisterAllocator.performAllocation(LinearScanRegisterAllocator.java:835)
at com.android.tools.r8.ir.regalloc.LinearScanRegisterAllocator.performAllocation(LinearScanRegisterAllocator.java:794)
at com.android.tools.r8.ir.regalloc.LinearScanRegisterAllocator.allocateRegisters(LinearScanRegisterAllocator.java:335)
at com.android.tools.r8.ir.conversion.IRToDexFinalizer.performRegisterAllocation(IRToDexFinalizer.java:76)
at com.android.tools.r8.ir.conversion.IRToDexFinalizer.finalizeCode(IRToDexFinalizer.java:49)
at com.android.tools.r8.ir.conversion.IRToDexFinalizer.finalizeCode(IRToDexFinalizer.java:23)
at com.android.tools.r8.ir.conversion.LirConverter.finalizeLirMethodToOutputFormat(LirConverter.java:215)
at com.android.tools.r8.ir.conversion.LirConverter.lambda$finalizeLirToOutputFormat$6(LirConverter.java:169)
at com.android.tools.r8.graph.DexProgramClass.lambda$forEachProgramMethodMatching$12(DexProgramClass.java:289)
at com.android.tools.r8.graph.MethodCollection.lambda$forEachMethodMatching$0(MethodCollection.java:136)
at com.android.tools.r8.graph.MethodCollectionBacking.lambda$forEachMethod$0(MethodCollectionBacking.java:61)
at com.android.tools.r8.graph.MethodArrayBacking.traverse(MethodArrayBacking.java:76)
at com.android.tools.r8.graph.MethodCollectionBacking.forEachMethod(MethodCollectionBacking.java:58)
at com.android.tools.r8.graph.MethodCollectionBacking.forEachMethod(MethodCollectionBacking.java:54)
at com.android.tools.r8.graph.MethodCollection.forEachMethodMatching(MethodCollection.java:133)
at com.android.tools.r8.graph.DexProgramClass.forEachProgramMethodMatching(DexProgramClass.java:288)
at com.android.tools.r8.graph.DexProgramClass.forEachProgramMethod(DexProgramClass.java:283)
at com.android.tools.r8.ir.conversion.LirConverter.lambda$finalizeLirToOutputFormat$7(LirConverter.java:167)
at com.android.tools.r8.utils.ThreadUtils.lambda$processItems$4(ThreadUtils.java:126)
at com.android.tools.r8.utils.ThreadUtils.lambda$processItems$6(ThreadUtils.java:167)
at com.android.tools.r8.utils.ThreadUtils.lambda$processItemsWithResultsThatMatches$2(ThreadUtils.java:111)
Suppressed: java.lang.RuntimeException: java.util.concurrent.ExecutionException: java.lang.NullPointerException
at com.android.tools.r8.utils.ExceptionUtils.unwrapExecutionException(ExceptionUtils.java:227)
at com.android.tools.r8.R8.runInternal(R8.java:897)
at com.android.tools.r8.R8.runInternal(R8.java:258)
at com.android.tools.r8.R8.lambda$runForTesting$1(R8.java:242)
at com.android.tools.r8.utils.ExceptionUtils.withCompilationHandler(ExceptionUtils.java:80)
at com.android.tools.r8.utils.ExceptionUtils.withR8CompilationHandler(ExceptionUtils.java:69)
at com.android.tools.r8.R8.runForTesting(R8.java:238)
at com.android.tools.r8.R8.run(R8.java:193)
at com.android.builder.dexing.R8Tool.runR8(r8Tool.kt:350)
at com.android.build.gradle.internal.tasks.R8Task$Companion.shrink(R8Task.kt:822)
at com.android.build.gradle.internal.tasks.R8Task$R8Runnable.execute(R8Task.kt:900)
at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:63)
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:66)
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:62)
at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:100)
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:62)
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:209)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:166)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:59)
at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:174)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:194)
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:127)
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:169)
at org.gradle.internal.Factories$1.create(Factories.java:31)
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:263)
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:127)
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:132)
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164)
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:133)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:48)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:840)
Caused by: java.util.concurrent.ExecutionException: java.lang.NullPointerException
at java.base/java.util.concurrent.ForkJoinTask.reportExecutionException(ForkJoinTask.java:605)
at java.base/java.util.concurrent.ForkJoinTask.get(ForkJoinTask.java:981)
at com.android.tools.r8.threading.providers.blocking.ThreadingModuleBlocking.awaitFutures(ThreadingModuleBlocking.java:40)
at com.android.tools.r8.threading.TaskCollection.await(TaskCollection.java:68)
at com.android.tools.r8.threading.TaskCollection.awaitWithResults(TaskCollection.java:139)
at com.android.tools.r8.threading.TaskCollection.awaitWithResults(TaskCollection.java:146)
at com.android.tools.r8.utils.ThreadUtils.processItemsWithResultsThatMatches(ThreadUtils.java:115)
at com.android.tools.r8.utils.ThreadUtils.processItemsWithResults(ThreadUtils.java:97)
at com.android.tools.r8.utils.ThreadUtils.processItems(ThreadUtils.java:164)
at com.android.tools.r8.utils.ThreadUtils.processItems(ThreadUtils.java:140)
at com.android.tools.r8.utils.ThreadUtils.processItems(ThreadUtils.java:124)
at com.android.tools.r8.ir.conversion.LirConverter.finalizeLirToOutputFormat(LirConverter.java:164)
at com.android.tools.r8.R8.runInternal(R8.java:879)
... 42 more
Caused by: java.lang.NullPointerException
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
at java.base/java.util.concurrent.ForkJoinTask.getThrowableException(ForkJoinTask.java:564)
at java.base/java.util.concurrent.ForkJoinTask.reportExecutionException(ForkJoinTask.java:604)
... 53 more
Caused by: [CIRCULAR REFERENCE: java.lang.NullPointerException: Cannot read field "b" because the return value of "com.android.tools.r8.internal.BS.a(com.android.tools.r8.internal.cR)" is null]
ch...@google.com <ch...@google.com> #3
Would it be possible for you to share a
If not, we would likely need your help to narrow down the culprit commit. Can you check if R8 8.8.12-dev works for you? If so, can you find the first version with the above error? The versions to try would be:
Version 8.8.17-dev
Version 8.8.16-dev
Version 8.8.15-dev
Version 8.8.14-dev
Version 8.8.13-dev
Version 8.8.12-dev
You can build with these versions as described in
eb...@netflix.com <eb...@netflix.com> #4
I tried the compiler output using gradle command bit I'm getting lot of errors like:
Failed to transform animal-sniffer-annotations-1.23.jar (org.codehaus.mojo:animal-sniffer-annotations:1.23) to match attributes {artifactType=android-dex, dexing-component-attributes=ComponentSpecificParameters(minSdkVersion=24, debuggable=false, enableCoreLibraryDesugaring=true, enableGlobalSynthetics=true, enableApiModeling=true, dependenciesClassesAreInstrumented=false, asmTransformComponent=null, useJacocoTransformInstrumentation=false, enableDesugaring=true, needsClasspath=false, useFullClasspath=false, componentIfUsingFullClasspath=null), org.gradle.category=library, org.gradle.libraryelements=jar, org.gradle.status=release, org.gradle.usage=java-runtime}.
I'll try the dev builds later...
ch...@google.com <ch...@google.com> #5
Can you try running:
./gradlew assembleRelease --no-daemon \
-Dcom.android.tools.r8.dumpinputtodirectory=/path/to/dumps \
-Dcom.android.tools.r8.dump.filter.buildproperty.tool=R8
eb...@netflix.com <eb...@netflix.com> #6
I was able to confirm it stared to break from 8.8.14-dev version. Do you still need more information?
ch...@google.com <ch...@google.com> #7
Without a reproduction we would need to narrow down the culprit CL. If this started breaking from 8.8.14-dev the culprit should be one of:
65d35766631b26e5e8d9a354669d9e4e7c50ed20 Start from 8 bit register allocation if number of args >=16 by Christoffer Adamsen · 3 months ago
df2d597437a37eca13e526f2d0ef76ac3ebe1573 Support for swapping local registers and move exception register by Christoffer Adamsen · 3 months ago
e29f00752dc27df636dffd19f8cf200c9391de44 Only include local registers in unused register computation by Christoffer Adamsen · 3 months ago
7ac4f94dfcc474ba41e27618b8ddec87a982e01f Refine 8 bit register allocation when some arguments are in 4 bits by Christoffer Adamsen · 3 months ago
089110dbf134ed813e71c025eb2729c12a8372df Remove calls to InlineMarker in Kotlin inline functions by Christoffer Adamsen · 3 months ago
27f95ae8a79024b93c9f472340993b0a55da8e7a Revert "Remove kotlin inline functions in D8" by Christoffer Adamsen · 3 months ago
You can build with a given hash using https://storage.googleapis.com/r8-releases/raw/main
rather than https://storage.googleapis.com/r8-releases/raw
.
eb...@netflix.com <eb...@netflix.com> #8
I'm not sure what's the chronological order but both 65d35766631b26e5e8d9a354669d9e4e7c50ed20 and 27f95ae8a79024b93c9f472340993b0a55da8e7a are broken. I'll try to send you the dump.
ch...@google.com <ch...@google.com> #9
Thanks I was able to reproduce the issue.
ch...@google.com <ch...@google.com> #10
Thanks again for reporting this and sharing a repro. This should be fixed in R8 8.8.27. I also tested your build against R8 8.9.21, which already has a fix for this bug.
ap...@google.com <ap...@google.com> #11
Project: r8
Branch: 8.8
Author: Christoffer Adamsen <
Link:
Version 8.8.27
Expand for full commit details
Version 8.8.27
Bug: b/389508413
Change-Id: If1355c62fdb1ac6712aa17c750d968bc041e15f7
Files:
- M
src/main/java/com/android/tools/r8/Version.java
Hash: 41d8b0614fdf5409ab38843931aad31fb2b459fc
Date: Tue Jan 14 10:50:10 2025
ap...@google.com <ap...@google.com> #12
Project: r8
Branch: 8.8
Author: Christoffer Adamsen <
Link:
Account for unconstrained live intervals in allocateSingleInterval
Expand for full commit details
Account for unconstrained live intervals in allocateSingleInterval
Bug: b/389508413
Change-Id: If8929733b90c03083cb8ef3475429dfcb1922b0c
Files:
- M
src/main/java/com/android/tools/r8/ir/regalloc/LinearScanRegisterAllocator.java
Hash: 024aca2927f8ca76a5f1cfeaf749c065e5e2cbcd
Date: Tue Jan 14 10:37:12 2025
eb...@netflix.com <eb...@netflix.com> #13
Thanks, I need to replace AGP 8.8 R8 by 8.8.27 and assume it'll ship in AGP 8.8.1?
ch...@google.com <ch...@google.com> #14
Yes, I expect this will land in AGP 8.8.1. After updating to this version of AGP you should make sure to remove the pinning of the R8 version, so that you don't accidentally downgrade R8.
hu...@google.com <hu...@google.com> #15
Adding a trivial detail:
After updating to this version of AGP you should make sure to remove the pinning of the R8 version, so that you don't accidentally downgrade R8.
AGP will probably warn in this case:
an...@google.com <an...@google.com> #16
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 Ladybug Feature Drop | 2024.2.2 Patch 1
- Android Gradle Plugin 8.8.1
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
DESCRIBE THE ISSUE IN DETAIL:
STEPS TO REPRODUCE:
assembleRelease
on our appERROR: R8: java.lang.NullPointerException: Cannot read field "b" because the return value of "com.android.tools.r8.internal.BS.a(com.android.tools.r8.internal.cR)" is null
Our R8 rules are (we're using a third party obfuscation tool):
Our project is complex, it would be a challenge to create a repro project. Here the full stack-trace: