ExoPlayer视图膨胀错误:模拟器正常但未签名APK崩溃求助
解决方案:未签名APK崩溃但模拟器正常,InflateException加载SimpleExoPlayerView
先还原你遇到的错误日志:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.tv2z.demo/com.tv2z.demo.DemoActivity}: android.view.InflateException: Binary XML文件第32行:Binary XML文件第32行:Error inflating class com.google.android.exoplayer2.ui.SimpleExoPlayerView at android.app.ActivityThread.performLaunchActivit...
这种场景我帮不少开发者排查过——模拟器跑debug包一切正常,但打未签名的release包就崩溃,核心原因几乎都是ProGuard混淆误删了ExoPlayer的关键类/资源,或者release打包时资源未正确嵌入。下面是针对性的解决步骤:
1. 优先排查ProGuard混淆配置
Debug构建默认不会开启严格的混淆和代码压缩,所以模拟器里没问题,但release包如果开了minifyEnabled true,就会把ExoPlayer未被显式引用的类(包括UI组件)删掉,导致XML加载SimpleExoPlayerView时找不到类。
解决方法:
- 打开Module级
build.gradle,确认release构建的混淆开关:buildTypes { release { minifyEnabled true // 若此处为true,必须添加ExoPlayer混淆规则 shrinkResources true // 若开了资源压缩,也要确保ExoPlayer资源不被删除 proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } - 在
proguard-rules.pro文件中添加ExoPlayer专属混淆规则:# 保留ExoPlayer核心类与接口 -keep class com.google.android.exoplayer2.** { *; } -keep interface com.google.android.exoplayer2.** { *; } -dontwarn com.google.android.exoplayer2.** # 保留ExoPlayer UI组件类(关键!因为你用到了SimpleExoPlayerView) -keep class com.google.android.exoplayer2.ui.** { *; } -keep interface com.google.android.exoplayer2.ui.** { *; } # 若开启资源压缩,添加以下规则保留ExoPlayer资源 -keepresources string/exo_** -keepresources drawable/exo_** -keepresources layout/exo_**
2. 检查ExoPlayer依赖是否完整
如果没开混淆还是崩溃,可能是release打包时未正确引入ExoPlayer的UI依赖:
- 确认Module级
build.gradle中已添加ExoPlayer UI组件的依赖:// 替换为你实际使用的ExoPlayer版本号,比如2.19.1 implementation "com.google.android.exoplayer:exoplayer-ui:2.X.X" - 执行
Build->Clean Project,再点击Rebuild Project,清理缓存后重新打包。
3. 其他排查点
- 检查XML布局文件中
SimpleExoPlayerView的包名是否拼写正确,确保是com.google.android.exoplayer2.ui.SimpleExoPlayerView - 确认未签名APK的目标SDK版本与模拟器一致,避免版本兼容性问题
内容的提问来源于stack exchange,提问作者Ayush Badraj
相关产品推荐
相关产品推荐

