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

Android Compose发布版交互崩溃:缺失hide_in_inspector_tag字段

发布版Compose控件交互崩溃(Debug正常):解决hide_in_inspector_tag字段缺失问题

问题症状

  • 发布版中交互任意Compose控件直接崩溃,Debug版本运行完全正常
  • 核心错误提示:java.lang.NoSuchFieldError: No static field hide_in_inspector_tag of type I in class Landroidx/compose/ui/R$id;

崩溃堆栈

E  java.lang.NoSuchFieldError: No static field hide_in_inspector_tag of type I in class Landroidx/compose/ui/R$id; or its superclasses (declaration of 'androidx.compose.ui.R$id' appears ....ExHFPZftc_jp0b694EN84A==/base.apk)
                         E      at androidx.compose.material.ripple.RippleContainer.<init>(SourceFile:49)
                         E      at androidx.compose.material.ripple.AndroidRippleIndicationInstance.getOrCreateRippleContainer(SourceFile:48)
                         E      at androidx.compose.material.ripple.AndroidRippleIndicationInstance.addRipple(SourceFile:1)
                         E      at androidx.compose.material.ripple.Ripple$rememberUpdatedInstance$1$1.emit(SourceFile:2)
                         E      at androidx.compose.material.ripple.Ripple$rememberUpdatedInstance$1$1.emit(SourceFile:1)
                         E      at z7.F.B(SourceFile:214)
                         E      at z7.F$c.invokeSuspend(SourceFile:13)
                         E      at kotlin.coroutines.jvm.internal.a.resumeWith(SourceFile:12)
                         E      at w7.W.run(SourceFile:129)
                         E      at androidx.compose.ui.platform.AndroidUiDispatcher.performTrampolineDispatch(SourceFile:7)
                         E      at androidx.compose.ui.platform.AndroidUiDispatcher.access$performTrampolineDispatch(SourceFile:1)
                         E      at androidx.compose.ui.platform.AndroidUiDispatcher$dispatchCallback$1.run(SourceFile:3)
                         E      at android.os.Handler.handleCallback(Handler.java:938)
                         E      at android.os.Handler.dispatchMessage(Handler.java:99)
                         E      at android.os.Looper.loopOnce(Looper.java:201)
                         E      at android.os.Looper.loop(Looper.java:288)
                         E      at android.app.ActivityThread.main(ActivityThread.java:7839)
                         E      at java.lang.reflect.Method.invoke(Native Method)
                         E      at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
                         E      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
                         E      Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [androidx.compose.ui.platform.MotionDurationScaleImpl@9784809, androidx.compose.runtime.h@e1f9a0e, N0{Cancelling}@9390c2f, Androi

已尝试的无效混淆规则

-keep class androidx.compose.ui.R$id { *; }
-keepclassmembers class androidx.compose.ui.R$id {
  <init>(...);
  <fields>;
}
-keep class androidx.compose.ui.R$id {
    public static <fields>;
}
-keep class androidx.compose.ui.R$id {
    static int hide_in_inspector_tag;
}

问题触发前的环境变更

一周前发布版本无异常,之后进行了以下升级操作:

  • Android Studio升级至Iguana | 2023.2.1 Patch 1
  • Gradle相关插件版本升级:
gradleplugin = "8.3.1"
gradleAndroidCommandPlugin = "1.6.2"

解决方案

1. 对齐Compose与Gradle插件版本

Gradle插件8.3.x对应的Compose BOM版本需为2023.10.01或更高,使用BOM统一管理Compose依赖,避免版本不匹配:

dependencies {
    // 引入Compose BOM统一版本
    implementation platform("androidx.compose:compose-bom:2023.10.01")
    implementation "androidx.compose.ui:ui"
    implementation "androidx.compose.material:material"
    // 其他Compose相关依赖...
}

2. 修正R8混淆规则

调整规则,确保字段被明确保留,同时禁用Compose资源类的混淆:

# 明确保留目标字段
-keep class androidx.compose.ui.R$id {
    public static final int hide_in_inspector_tag;
}
# 保留所有Compose UI相关的资源类字段
-keep class androidx.compose.ui.**$id { *; }
-keep class androidx.compose.ui.**$layout { *; }

3. 临时关闭资源缩减排查

若混淆规则无效,可临时关闭资源缩减确认问题根源:
在build.gradle中添加:

android {
    buildTypes {
        release {
            shrinkResources false
        }
    }
}

关闭后若问题消失,说明是资源缩减误删了目标字段,需进一步补充资源保留规则。

4. 清理构建缓存并重新编译

执行命令清除旧缓存,避免缓存导致的版本不一致:

./gradlew clean
./gradlew assembleRelease

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 03:17:03