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

如何解决Paparazzi初始化Bridge失败导致测试无法运行的问题?

解决Paparazzi Compose测试「Failed to init Bridge」错误

问题背景

运行基础Paparazzi Compose测试时触发「Failed to init Bridge」错误,相关信息如下:

测试代码

package ........

import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.wrapContentSize
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextDecoration
import app.cash.paparazzi.Paparazzi
import org.junit.Rule
import org.junit.Test

class HelloComposeTest {
    @get:Rule
    val paparazzi = Paparazzi()

    @Test
    fun compose() {
        paparazzi.snapshot { HelloPaparazzi() }
    }
}

@Suppress("TestFunctionName")
@Composable
fun HelloPaparazzi() {
    Column(
        Modifier
            .background(Color.White)
            .fillMaxSize()
            .wrapContentSize()
    ) {
        Text("Hello, Paparazzi")
    }
}

错误栈

Failed to init Bridge.
java.lang.IllegalStateException: Failed to init Bridge.
    at app.cash.paparazzi.internal.Renderer.prepare(Renderer.kt:94)
    at app.cash.paparazzi.PaparazziSdk.prepare(PaparazziSdk.kt:129)
    at app.cash.paparazzi.Paparazzi.prepare(Paparazzi.kt:89)
    at app.cash.paparazzi.Paparazzi$apply$1.evaluate(Paparazzi.kt:77)
    at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
    at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
    at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
    at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
    at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
    at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:112)
    at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58)
    at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:40)
    at org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:54)
    at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:53)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.base/java.lang.reflect.Method.invoke(Unknown Source)
    at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
    at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
    at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
    at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92)
    at jdk.proxy1/jdk.proxy1.$Proxy4.processTestClass(Unknown Source)
    at org.gradle.api.internal.tasks.testing.worker.TestWorker$2.run(TestWorker.java:183)
    at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132)
    at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103)
    at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63)
    at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)
    at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121)
    at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71)
    at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
    at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)

环境与配置

  • Paparazzi版本:1.3.4
  • 操作系统:14.4.1 (23E224) - Apple M3 Pro
  • 编译SDK:34
  • Gradle版本:8.10.0
  • Android Gradle插件版本:8.4.2
  • Kotlin版本:1.9.25

当前build.gradle.kts配置片段:

compileOptions {
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = "1.8"
    }
    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.15"
    }

解决方案

该错误源于Java版本、Compose依赖兼容性及Apple Silicon架构适配问题,按以下步骤逐一修复:

1. 升级Java版本至17

Paparazzi 1.x及以上版本在Apple Silicon平台上需要Java 17支持,修改build.gradle.kts中的编译配置:

compileOptions {
    sourceCompatibility = JavaVersion.VERSION_17
    targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
    jvmTarget = "17"
}

同时确保本地JDK切换为17,可通过java -version命令验证版本。

2. 对齐Compose Compiler与Kotlin版本

Kotlin 1.9.25对应的Compose Compiler版本应为1.5.11(当前使用的1.5.15对应Kotlin 1.9.24,版本不匹配会导致桥接初始化失败),更新配置:

composeOptions {
    kotlinCompilerExtensionVersion = "1.5.11"
}

3. 添加Apple Silicon兼容配置

在项目根目录的gradle.properties文件中添加以下配置,确保Paparazzi在ARM架构上正常运行:

org.gradle.jvmargs=-Xmx2048m -Djava.awt.headless=true -Dapple.awt.UIElement=true
paparazzi.testInstrumentationRunnerArguments.androidx.benchmark.suppressErrors=DEBUGGABLE

4. 升级Paparazzi至最新稳定版

将Paparazzi从1.3.4升级到最新稳定版(如2.1.0),新版本对Apple Silicon和高版本Gradle/AGP兼容性更好:

dependencies {
    testImplementation("app.cash.paparazzi:paparazzi:2.1.0")
}

完成以上配置后,重新运行测试即可解决「Failed to init Bridge」错误。


内容的提问来源于stack exchange,提问作者dr.s

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 05:10:56