You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Compose切换Fragment至Compose视图时CoreTextField崩溃求助

Fragment切换Compose视图崩溃问题解决

问题情况

应用在从Fragment切换到Compose视图时发生崩溃,大量用户遭遇此问题,但内部测试无法复现。该崩溃是当前Top1崩溃,导致无崩溃率下降2-3%,注意:涉事页面及内部打开的所有页面均未使用TextField组件。

崩溃日志

Fatal Exception: java.lang.NoSuchMethodError: No static method performImeAction$default(Lf2/b0;Ljava/lang/String;Lku/a;ILjava/lang/Object;)V in class Lf2/y; or its super classes (declaration of 'f2.y' appears in base.apk)
   at androidx.compose.foundation.text.CoreTextFieldKt$CoreTextField$semanticsModifier$1.invoke(CoreTextField.kt:34)
   at androidx.compose.foundation.text.CoreTextFieldKt$CoreTextField$semanticsModifier$1.invoke(CoreTextField.kt:2)
   at androidx.compose.ui.semantics.CoreSemanticsModifierNode.applySemantics(CoreSemanticsModifierNode.java:2)
   at androidx.compose.ui.node.LayoutNode$collapsedSemantics$1.invoke(LayoutNode.java:12)
   at androidx.compose.ui.node.LayoutNode$collapsedSemantics$1.invoke(LayoutNode.java:12)

当前依赖配置

implementation platform('androidx.compose:compose-bom:2023.03.00')

问题原因

  1. Compose依赖版本对齐问题:2023.03.00的Compose BOM版本较旧,可能存在间接依赖版本不一致的情况——即使没直接用TextField,Compose的语义模块或基础组件可能隐式依赖了CoreTextField相关方法,部分依赖版本与BOM锁定版本不匹配,导致方法缺失。
  2. 代码压缩误删:生产环境ProGuard/R8压缩可能误删了performImeAction$default这类未被直接引用但实际需要的方法,测试环境因压缩规则宽松未触发。

解决步骤

1. 升级Compose BOM到最新稳定版

将BOM版本更新至较新的稳定版本,确保所有Compose依赖自动对齐,避免版本冲突:

implementation platform('androidx.compose:compose-bom:2024.04.00')

2. 强制锁定compose-foundation版本(可选,若暂不升级BOM)

如果暂时无法升级整个BOM,可单独指定compose-foundation的版本,确保与当前BOM兼容:

implementation platform('androidx.compose:compose-bom:2023.03.00')
// 对应2023.03.00 BOM的foundation稳定版本
implementation 'androidx.compose.foundation:foundation:1.4.3'

3. 调整ProGuard/R8规则

在proguard-rules.pro中添加规则,保留Compose文本及语义相关的核心类和方法:

-keep class androidx.compose.foundation.text.** { *; }
-keep class androidx.compose.ui.semantics.** { *; }
-keepclassmembers class ** {
    @androidx.compose.ui.semantics.SemanticsAction <methods>;
}

4. 检查多模块依赖一致性

若为多模块项目,确保所有模块都通过同一个Compose BOM引入依赖,避免不同模块使用不同版本的Compose库导致冲突。


内容的提问来源于stack exchange,提问作者Gorkem KARA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 13:35:24