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

Android中ExoPlayer库同步及添加控件后崩溃问题求助

解决ExoPlayer引入SimpleExoPlayerView后Native崩溃(SIGSEGV)的问题

根据你描述的情况,升级Android Studio到4.0后依赖同步正常,但添加SimpleExoPlayerView布局后触发Native层的段错误(SIGSEGV),这通常是ExoPlayer Native组件的内存访问异常问题,下面是针对性的排查和解决方案:

可能的原因分析

  • ExoPlayer 2.11.4版本在部分Android设备/系统版本上存在Native层兼容性bug
  • 布局或Player初始化代码不规范导致的绑定异常
  • ProGuard/R8混淆规则缺失,误优化了ExoPlayer的Native相关代码
  • Gradle插件与ExoPlayer版本不兼容

分步解决方案

1. 升级ExoPlayer到稳定版本

2.11.4是相对较旧的版本,存在一些已知的Native兼容性问题,建议升级到后续的稳定版本(比如2.12.8或更高),修改依赖如下:

implementation 'com.google.android.exoplayer:exoplayer-core:2.12.8'
implementation 'com.google.android.exoplayer:exoplayer-dash:2.12.8'
implementation 'com.google.android.exoplayer:exoplayer-ui:2.12.8'

升级后同步项目,重新测试。

2. 确保Player初始化代码规范

错误的初始化逻辑可能导致View与Player绑定异常,触发Native崩溃,以下是标准的初始化示例(Kotlin):

private var player: SimpleExoPlayer? = null

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    // 绑定布局中的SimpleExoPlayerView
    val videoView = findViewById<SimpleExoPlayerView>(R.id.video_view)
    
    // 创建Player实例
    player = SimpleExoPlayer.Builder(this).build()
    // 将Player绑定到View
    videoView.player = player

    // 准备媒体源(根据你的需求替换为实际的媒体地址)
    val mediaItem = MediaItem.fromUri("https://example.com/your-video.mp4")
    player?.setMediaItem(mediaItem)
    player?.prepare()
    player?.play()
}

// 务必在销毁时释放Player,避免内存泄漏
override fun onDestroy() {
    super.onDestroy()
    player?.release()
    player = null
}

3. 添加正确的ProGuard/R8混淆规则

如果你的项目启用了混淆,需要保留ExoPlayer的相关类,避免Native层代码被误优化,在proguard-rules.pro中添加:

# ExoPlayer 混淆规则
-keep class com.google.android.exoplayer2.** { *; }
-dontwarn com.google.android.exoplayer2.**
-keep interface com.google.android.exoplayer2.** { *; }

4. 检查Gradle环境兼容性

Android Studio 4.0对应的Gradle插件版本是4.0.0,建议确保项目的build.gradle(Project级)中Gradle版本匹配:

dependencies {
    classpath "com.android.tools.build:gradle:4.0.0"
}

同时,gradle-wrapper.properties中的Gradle版本建议使用6.1.1或更高:

distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip

额外排查点

  • 尝试在不同Android版本的设备上测试,确认是否是特定系统版本的兼容性问题
  • 检查项目中是否存在其他与媒体播放相关的依赖,可能与ExoPlayer产生冲突

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 19:42:32