Status Update
Comments
km...@google.com <km...@google.com>
ga...@google.com <ga...@google.com>
ak...@google.com <ak...@google.com> #2
Maybe a dup of
ga...@google.com <ga...@google.com> #3
Android Gradle Plugin: 8.7.1
Could you try the latest canary, AGP 8.8.0-alpha09
?
jf...@block.xyz <jf...@block.xyz> #4
I just updated to Android Gradle Plugin: 8.7.2 and the bug is fixed.
bi...@google.com <bi...@google.com> #5
I spoke too soon. The bug appears gone when I use a different computer, but that is only because the lint check is disabled on it. The computer with the false positive is a new cloning of my github project which apparently has the lint check enabled. The AGP 8.8.0-alpha09 plugin will not work on ladybug, and I'm too busy to switch to a canary build of android studio just to fix a false positive lint check, sorry.
jf...@block.xyz <jf...@block.xyz> #6
I just tried running lint on two more of my computers, one which also has a fresh clone of the github project, and one which has an "ancient" (but up to date) clone of the project -- the two computers have very different Settings -> Editor -> Inspections choices. The old clones do not have this lint check anywhere in their choices, whereas new clones do. Very odd indeed. (I have .idea/ in my .gitignore BTW).
je...@google.com <je...@google.com>
je...@google.com <je...@google.com> #7
I understand that it's not trivial to change AGP version; sorry for suggesting that first.
Actually, there is a better way to test: android.experimental.lint.version=8.8.0-alpha09
which will just change the Lint version.
je...@google.com <je...@google.com> #8
I decided it was easier to download Android Studio Ladybug Feature Drop | 2024.2.2 Canary 9 than to figure out how to use a different version of lint (a search of stackoverflow suggests this is impossible for what that is worth). Using AGP 8.8.0-alpha09 and gradle-8.10.2-bin.zip on Canary the same error occurs. It looks like it is caused by the K2 compiler mode, because the Inspections options for this lint check does not appear until you enble K2 mode (nor does the false positive error).
hu...@google.com <hu...@google.com> #9
Thank you for trying the latest canary version of Studio and AGP, I really appreciate that.
I rather confirmed that, with that canary (AGP 8.8.0-alpha09),
I also tried altering problematic produceState
call with conditional assignment to value
, which also works fine. I tried a similar code pattern on compose runtime ProduceStateDetector
and its tests, but no luck.
Then... my next guess is whether it is from an old compose runtime, assuming this might be a dup of
je...@google.com <je...@google.com> #10
The compose runtime is from the androidx-compose-bom = "2024.10.01", which is 1.7.5, which is the latest stable version according to its webpage. The project uses libs.versions.toml and gradle assures me that all the versions are up to date (for what that is worth - sometimes I have to manually update versions). I enclose the libs.versions.toml the project uses. The project is my copy of the "Crane" sample app which I have verbosely commented and try to keep up to date with the latest libraries and APIs. The source code involved is in my github repo in the Crane project:
The file the false positive is in is:
Crane/app/src/main/java/androidx/compose/samples/crane/details/DetailsActivity.kt
an...@google.com <an...@google.com> #11
Thank you again for sharing all the details!
With the repo, I can reproduce the issue:
$ ./gradlew lint
> Task :app:lintDebug FAILED
Lint found 1 errors, 8 warnings. First failure:
.../Composables/Crane/app/src/main/java/androidx/compose/samples/crane/details/DetailsActivity.kt:243: Error: produceState calls should assign value inside the producer lambda [ProduceStateDoesNotAssignValue from androidx.compose.runtime]
val uiState: DetailsScreenUiState by produceState(
~~~~~~~~~~~~
Explanation for issues of type "ProduceStateDoesNotAssignValue":
produceState returns an observable State using values assigned inside the
producer lambda. If the lambda never assigns (i.e value = foo), then the
State will never change. Make sure to assign a value when the source you
are producing values from changes / emits a new value. For sample usage see
the produceState documentation.
Vendor: Jetpack Compose
Identifier: androidx.compose.runtime
Feedback: https://issuetracker.google.com/issues/new?component=612128
...
FAILURE: Build failed with an exception.
...
which is a build error in CLI. That is indeed a dup of
$ git diff
diff --git a/Crane/gradle/libs.versions.toml b/Crane/gradle/libs.versions.toml
index c3b2e3ca..c488d929 100644
--- a/Crane/gradle/libs.versions.toml
+++ b/Crane/gradle/libs.versions.toml
@@ -4,7 +4,7 @@
#####
[versions]
accompanist = "0.34.0"
-androidGradlePlugin = "8.7.2"
+androidGradlePlugin = "8.8.0-alpha09"
androidx-activity-compose = "1.9.3"
androidx-appcompat = "1.7.0"
androidx-benchmark = "1.3.3"
diff --git a/Crane/gradle/wrapper/gradle-wrapper.properties b/Crane/gradle/wrapper/gradle-wrapper.properties
index 1918a64e..9c74e424 100644
--- a/Crane/gradle/wrapper/gradle-wrapper.properties
+++ b/Crane/gradle/wrapper/gradle-wrapper.properties
@@ -14,6 +14,6 @@
#Sat Nov 2 07:49:36 AM EDT 2024
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
$ ./gradlew lint
...
BUILD SUCCESSFUL in 1m 51s
31 actionable tasks: 30 executed, 1 from cache
build went well.
However, K2 UAST's IDE path still has an issue on binary resolution for @Composable
. :( That part is a dup of
Description
We use a gradle conventions plugin to apply other plugins such as AGP, KGP, etc. which enforces the same version for all projects, so the version check doesn't provide much benefit to our build. It does however use a significant amount of memory to run due to its multiple uses of , so we disable it by setting
allprojects { }
ext["AGP_INTERNAL__MIN_PLUGIN_VERSION_CHECK_STARTED"] = true
in our rootbuild.gradle
.We currently use AGP 7.3.1, but this behavior is unchanged in all successive versions of AGP.
Cross-project configuration is a gradle anti-pattern and we have lint checks in our builds to explicitly forbid this due to the relatively severe performance consequences it has for our build.
The
AGP_INTERNAL__MIN_PLUGIN_VERSION_CHECK_STARTED
"hack" works but is a potentially fragile workaround as it is clearly not a "public" configuration option. Could AGP provide a formal property we could set to disable the minimum version checks? (e.g.android.disableMinimumPluginVersionCheck=true
)