我使用的是 compose-bom 2023.03.00 版本,当我尝试添加最新的带有共享元素更新的编译动画模块时,应用程序会在启动时崩溃并显示错误
java.lang.NoSuchMethodError:在类 Landroidx/compose/ui/unit/Constraints$Companion 或其超类中没有静态方法 restrictedConstraints-xF2OJ5Q$default(Landroidx/compose/ui/unit/Constraints$Companion;IIIIZILjava/lang/Object;)J (声明 'androidx.compose.ui.unit.Constraints$Companion' 出现在 /data/app/com.xx.xxxx-55o2y0IBA6N3Qr0mj4DgbQ==/base.apk 中。at androidx.compose.foundation.layout.RowColumnMeasurementHelper.measureWithoutPlacing-EkL-Y(RowColumnMeasurementHelper.kt:187) at androidx.compose.foundation.layout.RowColumnMeasurePolicy.measure-3p2s80s(RowColumnImpl.kt:69) at androidx.compose.ui.node.InnerNodeCoordinator.measure-BRTryo0(InnerNodeCoordinator.kt:135) at androidx.compose.foundation.layout.SizeNode.measure-3p2s80s(Size.kt:838)
仅添加依赖本身就会导致崩溃(未添加任何 ShareElementsLayout 等)。
在示例应用程序中,它工作正常。这是因为与其他编译库的兼容性问题吗?我怎样才能找到不兼容问题?
我尝试匹配示例应用程序的依赖版本,但在我们的主应用程序中也发现了其他库。
它也造成了同样的崩溃。
你遇到的错误是因为 Compose UI 库中的版本冲突造成的。具体来说,你的应用中某个地方在调用
androidx.compose.ui.unit.Constraints.Companion
类中不存在的restrictedConstraints-xF2OJ5Q$default
方法。这表明你使用的一个或多个依赖项依赖于 Compose UI 的旧版本,该版本不包含此方法。以下是一些解决该问题的步骤:
1. 确定冲突的依赖项:
- 检查你的
build.gradle
文件:仔细检查你的dependencies
部分,特别是与 Compose 相关的库。确保所有 Compose 库都使用相同的版本(来自你的compose-bom
)。- 使用 Android Studio 的 “Dependencies” 工具:打开你的
build.gradle
文件,右键单击dependencies
部分,然后选择 “Show Dependencies”。这将以图形方式显示你的项目依赖关系,并可能帮助你识别冲突。- 使用 Gradle 命令:运行
./gradlew app:dependencies
命令。这将在控制台中打印你的项目依赖关系树。查找androidx.compose.ui:ui
并查看哪些依赖项正在使用不同的版本。2. 解决冲突:
- 升级冲突的依赖项:一旦确定了哪些依赖项导致冲突,请尝试将它们升级到与你的
compose-bom
兼容的最新版本。- 排除传递依赖项:如果无法升级冲突的依赖项,则可以使用
exclude
关键字从其他依赖项中排除它。例如,如果libraryA
依赖于 Compose UI 的旧版本,则可以在依赖libraryA
时将其排除:dependencies { implementation("com.example:libraryA") { exclude(group = "androidx.compose.ui", module = "ui") } }
3. 清理和重建项目:
完成上述步骤后,请务必清理和重建你的项目:
- “Clean Project”: 在 Android Studio 中,转到 “Build” > “Clean Project”。
- “Rebuild Project”: 在 Android Studio 中,转到 “Build” > “Rebuild Project”。
通过仔细检查你的依赖关系并解决任何版本冲突,你应该能够解决
标签:android,android-jetpack-compose,android-jetpack-compose-animation From: 78553164NoSuchMethodError
错误并成功使用 Compose Animation 库中的共享元素更新功能。