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

Jenkins构建的APK在真实Android TV设备启动崩溃问题求助

Jenkins构建APK在Android TV设备启动崩溃问题解决(Jacoco相关)

Jenkins构建任务执行成功,但将生成的APK安装到真实Android TV设备后启动即崩溃,错误日志核心内容为:

java.lang.NoClassDefFoundError: Failed resolution of: Lorg/jacoco/agent/rt/internal_773e439/Offline;

完整崩溃日志如下:

2023-08-17 16:29:16.608 29114-29114/tv.airtel.xstream.tvapp.debug E/AndroidRuntime: FATAL EXCEPTION: main
Process: tv.airtel.xstream.tvapp.debug, PID: 29114
java.lang.NoClassDefFoundError: Failed resolution of: Lorg/jacoco/agent/rt/internal_773e439/Offline;
at com.airtel.vision.AtvSdk.$jacocoInit(Unknown Source:13)
at com.airtel.vision.AtvSdk.(Unknown Source:0)
at tv.airtel.xstream.config.di.AppModuleKt$appModule$1$2.invoke(AppModule.kt:20)
at tv.airtel.xstream.config.di.AppModuleKt$appModule$1$2.invoke(Unknown Source:2)
at org.kodein.di.bindings.Singleton$getFactory$1$1$1.invoke(standardBindings.kt:134)
at org.kodein.di.bindings.SingletonReference.make(references.kt:34)
at org.kodein.di.bindings.Singleton$getFactory$1$1.invoke(standardBindings.kt:134)
at org.kodein.di.bindings.Singleton$getFactory$1$1.invoke(standardBindings.kt:99)
at org.kodein.di.bindings.MultiItemScopeRegistry.getOrCreate(scopes.kt:62)
at org.kodein.di.bindings.Singleton$getFactory$1.invoke(standardBindings.kt:134)
at org.kodein.di.bindings.Singleton$getFactory$1.invoke(standardBindings.kt:99)
at org.kodein.di.KodeinContainer$provider$$inlined$toProvider$1.invoke(curry.kt:14)
at org.kodein.di.KodeinAwareKt$Instance$1.invoke(KodeinAware.kt:152)
at org.kodein.di.KodeinProperty$provideDelegate$1.invoke(properties.kt:39)
at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
at tv.airtel.xstream.PlayApplication.getAtvSdk(Unknown Source:7)
at tv.airtel.xstream.PlayApplication.initAtv(PlayApplication.kt:56)
at tv.airtel.xstream.PlayApplication.onCreate(PlayApplication.kt:48)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5882)
at android.app.ActivityThread.access$1100(ActivityThread.java:200)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1651)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6680)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: java.lang.ClassNotFoundException: Didn't find class "org.jacoco.agent.rt.internal_773e439.Offline" on path: DexPathList[[zip file "/system/framework/android.test.mock.jar", zip file "/system/framework/android.test.runner.jar", zip file "/data/app/tv.airtel.xstream.tvapp.debug--k_aipq4ftZEc1641nrz7w==/base.apk"],nativeLibraryDirectories=[/data/app/tv.airtel.xstream.tvapp.debug--k_aipq4ftZEc1641nrz7w==/lib/arm, /system/lib, /product/lib]]

问题分析

这个错误源于Jacoco代码覆盖率工具的插桩代码在运行时找不到对应依赖类。Jacoco插桩会在类中注入$jacocoInit方法,但如果APK未包含Jacoco的agent运行时依赖,就会触发NoClassDefFoundError。

责任区分与解决方案

1. Jenkins构建配置问题(优先排查)

  • 检查Jenkins构建命令是否误触发Jacoco插桩任务:比如构建debug包时是否额外执行了jacocoTestReport,或启用了测试覆盖率收集参数,但对应构建变体未配置Jacoco依赖。
  • 确认Jenkins构建的是正确变体:避免将用于本地测试、带Jacoco插桩的debug包直接用于真机测试,应构建不含测试插桩的测试包或正式包。

2. Gradle配置调整(需开发者修改)

若需在真机测试的构建变体中保留Jacoco功能,需调整模块级build.gradle配置:

  • 限制Jacoco仅在测试阶段启用:
jacoco {
    toolVersion = "0.8.7" // 匹配项目使用的Jacoco版本
}

android {
    buildTypes {
        debug {
            testCoverageEnabled = true // 仅在单元/UI测试时启用覆盖率收集
        }
        release {
            testCoverageEnabled = false
        }
    }
}
  • 添加Jacoco运行时依赖(仅针对需要插桩的变体):
dependencies {
    debugImplementation 'org.jacoco:org.jacoco.agent:0.8.7:runtime'
}
  • 排除第三方SDK的Jacoco插桩:如果日志中的AtvSdk是第三方预编译库,避免对其插桩导致依赖缺失:
android {
    buildTypes {
        debug {
            jacoco {
                excludes = ['com.airtel.vision.**']
            }
        }
    }
}

总结

该问题属于构建配置问题,无需修改业务代码,只需调整Jenkins构建命令或项目Gradle中的Jacoco配置,确保插桩代码能找到对应的运行时依赖即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 05:10:58