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

Jetpack Compose截图测试调用captureToImage()后出现NoClassDefFoundError

Compose截图测试抛出NoClassDefFoundError异常

问题场景

运行针对Compose可组合项的截图测试时,出现NoClassDefFoundError异常。

测试代码

@RunWith(AndroidJUnit4::class)
class MyTest {
    @get:Rule
    val composeTestRule = createComposeRule()

    @Test
    fun exampleTest() {
        composeTestRule.setContent {
            MyComposable()
        }

        composeTestRule.onRoot().captureToImage()
    }
}

堆栈跟踪信息

java.lang.NoClassDefFoundError: androidx.compose.ui.test.android.WindowCapture_androidKt$$ExternalSyntheticLambda0
at androidx.compose.ui.test.android.WindowCapture_androidKt.generateBitmapFromPixelCopy(WindowCapture.android.kt:112)
at androidx.compose.ui.test.android.WindowCapture_androidKt.generateBitmap(WindowCapture.android.kt:104)
at androidx.compose.ui.test.android.WindowCapture_androidKt.access$generateBitmap(WindowCapture.android.kt:1)
at androidx.compose.ui.test.android.WindowCapture_androidKt$captureRegionToImage$1.invoke(WindowCapture.android.kt:46)
at androidx.compose.ui.test.android.WindowCapture_androidKt$captureRegionToImage$1.invoke(WindowCapture.android.kt:46)
at androidx.compose.ui.test.android.WindowCapture_androidKt.withDrawingEnabled(WindowCapture.android.kt:60)
at androidx.compose.ui.test.android.WindowCapture_androidKt.captureRegionToImage(WindowCapture.android.kt:46)
at androidx.compose.ui.test.AndroidImageHelpers_androidKt.processSingleWindowScreenshot(AndroidImageHelpers.android.kt:138)
at androidx.compose.ui.test.AndroidImageHelpers_androidKt.captureToImage(AndroidImageHelpers.android.kt:75)
at androidx.compose.ui.test.AndroidImageHelpers_androidKt.captureToImage(AndroidImageHelpers.android.kt:50)
at com.example.MyTest.exampleTest(MyTest.kt:47)

解决方案

这个异常通常由Compose测试依赖版本不匹配、缺失必要依赖或R8混淆误删类导致,可按以下步骤修复:

  • 统一Compose依赖版本
    在Module级build.gradle中定义统一的Compose版本变量,确保所有测试相关依赖使用同一版本:

    ext {
        compose_version = "1.5.4"
    }
    
    dependencies {
        androidTestImplementation "androidx.compose.ui:ui-test-junit4:$compose_version"
        debugImplementation "androidx.compose.ui:ui-test-manifest:$compose_version"
    }
    
  • 调整R8混淆规则
    若测试构建启用了R8,需在测试混淆文件(如proguard-test-rules.pro)中添加规则保留合成类:

    -keep class androidx.compose.ui.test.android.WindowCapture_androidKt$$ExternalSyntheticLambda* { *; }
    

    也可直接禁用测试构建的混淆:

    android {
        buildTypes {
            debug {
                minifyEnabled false
                shrinkResources false
            }
        }
    }
    
  • 清理重建项目
    执行Clean Project和Rebuild Project操作,清除旧构建缓存,确保依赖同步生效。

  • 更新Android Gradle Plugin(AGP)
    旧版AGP可能与Compose测试工具链存在兼容性问题,尝试将AGP升级至8.1.x及以上的稳定版本。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 20:57:17