如何修复 org/jacoco/agent/rt/internal_773e439/Offline 异常?
作者:Changing Lin
- 2021 年 11 月 24 日
本文字数:5666 字
阅读完需:约 19 分钟
1.异常现象
在实现 播放在线 TS 文件 的功能的时候,按照之前的思路是,集成 ExoPlayer 来实现播放功能。一开始是以源码的方式依赖到主工程,但考虑到项目的可维护性,决定编译 ExoPlayer 相关组件,得到对应的 aar 依赖包,拷贝到主工程中,避免对 ExoPlayer 的依赖。移植完毕后,启动播放器,发现报错了,异常如下:
-6694/com.mycompany.myproject D/AndroidRuntime: Shutting down VM
05-10 18:47:55.986 6694-6694/com.mycompany.myproject E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.mycompany.myproject, PID: 6694
java.lang.NoClassDefFoundError: Failed resolution of: Lorg/jacoco/agent/rt/internal_773e439/Offline;
at com.mycompany.ui.components.ListArrayAdapter.$jacocoInit(ListArrayAdapter.java)
at com.mycompany.ui.components.ListArrayAdapter.<init>(ListArrayAdapter.java)
at com.mycompany.myproject.NationalityFragment.onCreateView(NationalityFragment.java:47)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1974)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1252)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:742)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1617)
at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:339)
at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:602)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1220)
at android.app.Activity.performStart(Activity.java:5953)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2261)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
复制代码
2.分析
关键信息:
java.lang.NoClassDefFoundError: Failed resolution of: Lorg/jacoco/agent/rt/internal_773e439/Offline
at com.mycompany.ui.components.ListArrayAdapter.$jacocoInit(ListArrayAdapter.java)
复制代码
猜测与 org.jacoco.agent 包有关,并且很大可能由于 ExoPlayer 的资源包导致的;但搜索 ExoPlayer 源码,无找到对该包的引用信息
经过查询资料,发现 jacocoInit 与 Gradle 的代码覆盖率有关,怀疑 ExoPlayer 工程打开了 testCoverageEnabled,导致打包生成的 aar 包嵌入了 jacoco 埋点;而主工程中是未开启的,导致出现异常。因此,解决思路是关闭 ExoPlayer 工程的 testCoverageEnabled。
3.解决方法
修改 ExoPlayer 源码的 build.gradle 配置文件,全局关闭 android.buildTypes.debug.testCoverageEnabled
Index: demos/main/src/main/assets/media.exolist.json
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/demos/main/src/main/assets/media.exolist.json b/demos/main/src/main/assets/media.exolist.json
--- a/demos/main/src/main/assets/media.exolist.json (revision 0ba317b1337eaa789f05dd6c5241246478a3d1e5)
+++ b/demos/main/src/main/assets/media.exolist.json (date 1637652481861)
@@ -238,6 +238,10 @@
{
"name": "Apple media playlist (AAC)",
"uri": "https://devstreaming-cdn.apple.com/videos/streaming/examples/bipbop_4x3/gear0/prog_index.m3u8"
+ },
+ {
+ "name": "录像文件",
+ "uri": "https://devstreaming-cdn.apple.com/videos/streaming/examples/bipbop_4x3/gear0/prog_index.m3u8"
}
]
},
Index: library/hls/build.gradle
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/library/hls/build.gradle b/library/hls/build.gradle
--- a/library/hls/build.gradle (revision 0ba317b1337eaa789f05dd6c5241246478a3d1e5)
+++ b/library/hls/build.gradle (date 1637720366971)
@@ -16,7 +16,7 @@
android {
buildTypes {
debug {
- testCoverageEnabled = true
+ testCoverageEnabled = gradle.ext.testCoverageEnabled
}
}
Index: library/dash/build.gradle
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/library/dash/build.gradle b/library/dash/build.gradle
--- a/library/dash/build.gradle (revision 0ba317b1337eaa789f05dd6c5241246478a3d1e5)
+++ b/library/dash/build.gradle (date 1637720366723)
@@ -16,7 +16,7 @@
android {
buildTypes {
debug {
- testCoverageEnabled = true
+ testCoverageEnabled = gradle.ext.testCoverageEnabled
}
}
Index: library/transformer/build.gradle
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/library/transformer/build.gradle b/library/transformer/build.gradle
--- a/library/transformer/build.gradle (revision 0ba317b1337eaa789f05dd6c5241246478a3d1e5)
+++ b/library/transformer/build.gradle (date 1637720366743)
@@ -16,7 +16,7 @@
android {
buildTypes {
debug {
- testCoverageEnabled = true
+ testCoverageEnabled = gradle.ext.testCoverageEnabled
}
}
Index: library/extractor/build.gradle
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/library/extractor/build.gradle b/library/extractor/build.gradle
--- a/library/extractor/build.gradle (revision 0ba317b1337eaa789f05dd6c5241246478a3d1e5)
+++ b/library/extractor/build.gradle (date 1637720366930)
@@ -16,7 +16,7 @@
android {
buildTypes {
debug {
- testCoverageEnabled = true
+ testCoverageEnabled = gradle.ext.testCoverageEnabled
}
}
Index: library/core/build.gradle
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/library/core/build.gradle b/library/core/build.gradle
--- a/library/core/build.gradle (revision 0ba317b1337eaa789f05dd6c5241246478a3d1e5)
+++ b/library/core/build.gradle (date 1637720366923)
@@ -23,7 +23,7 @@
buildTypes {
debug {
- testCoverageEnabled = true
+ testCoverageEnabled = gradle.ext.testCoverageEnabled
}
}
Index: settings.gradle
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/settings.gradle b/settings.gradle
--- a/settings.gradle (revision 0ba317b1337eaa789f05dd6c5241246478a3d1e5)
+++ b/settings.gradle (date 1637720366937)
@@ -29,4 +29,5 @@
project(modulePrefix + 'demo-surface').projectDir = new File(rootDir, 'demos/surface')
project(modulePrefix + 'playbacktests').projectDir = new File(rootDir, 'playbacktests')
+gradle.ext.testCoverageEnabled = false
apply from: 'core_settings.gradle'
Index: library/common/build.gradle
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/library/common/build.gradle b/library/common/build.gradle
--- a/library/common/build.gradle (revision 0ba317b1337eaa789f05dd6c5241246478a3d1e5)
+++ b/library/common/build.gradle (date 1637720366777)
@@ -13,7 +13,7 @@
// limitations under the License.
apply from: "$gradle.ext.exoplayerSettingsDir/common_library_config.gradle"
-android.buildTypes.debug.testCoverageEnabled true
+android.buildTypes.debug.testCoverageEnabled gradle.ext.testCoverageEnabled
dependencies {
api ('com.google.guava:guava:' + guavaVersion) {
Index: library/smoothstreaming/build.gradle
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/library/smoothstreaming/build.gradle b/library/smoothstreaming/build.gradle
--- a/library/smoothstreaming/build.gradle (revision 0ba317b1337eaa789f05dd6c5241246478a3d1e5)
+++ b/library/smoothstreaming/build.gradle (date 1637720366730)
@@ -16,7 +16,7 @@
android {
buildTypes {
debug {
- testCoverageEnabled = true
+ testCoverageEnabled = gradle.ext.testCoverageEnabled
}
}
Index: library/ui/build.gradle
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/library/ui/build.gradle b/library/ui/build.gradle
--- a/library/ui/build.gradle (revision 0ba317b1337eaa789f05dd6c5241246478a3d1e5)
+++ b/library/ui/build.gradle (date 1637720366736)
@@ -13,7 +13,7 @@
// limitations under the License.
apply from: "$gradle.ext.exoplayerSettingsDir/common_library_config.gradle"
-android.buildTypes.debug.testCoverageEnabled true
+android.buildTypes.debug.testCoverageEnabled gradle.ext.testCoverageEnabled
dependencies {
implementation project(modulePrefix + 'library-core')
复制代码
划线
评论
复制
发布于: 3 小时前阅读数: 9
版权声明: 本文为 InfoQ 作者【Changing Lin】的原创文章。
原文链接:【http://xie.infoq.cn/article/ec5cc3cb52ef7756257203f8e】。文章转载请联系作者。
Changing Lin
关注
获得机遇的手段远超于固有常规之上~ 2020.04.29 加入
我能做的,就是调整好自己的精神状态,以最佳的面貌去面对那些未曾经历过得事情,对生活充满热情和希望。
评论