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

升级Gradle 8.4与AGP 8.3.0后Media3应用崩溃问题求助

Media3 1.2.1 升级AGP 8.3.0/Gradle 8.4后发布版出现IllegalAccessError崩溃问题

问题概述

使用Media3 1.2.1开发Android应用近一年,将Gradle升级至8.4、Android Gradle Plugin(AGP)升级至8.3.0后,本地完成混淆QA构建等多轮测试均正常,但发布后应用连接服务时出现大规模崩溃(仅5%用户无崩溃),本地无法复现该问题。回退构建工具版本后应用恢复正常,推测为R8/ProGuard优化导致。

崩溃日志如下:

Fatal Exception: java.lang.IllegalAccessError: Illegal class access: 'G2.c2' attempting to access 'com.google.common.util.concurrent.ImmediateFuture' (declaration of 'G2.c2' appears in base.apk)
   at androidx.media3.session.MediaSessionStub.lambda$queueSessionTaskWithPlayerCommandForControllerInfo$13(MediaSessionStub.java:338)
   at androidx.media3.session.ConnectedControllersManager.lambda$flushCommandQueue$2(ConnectedControllersManager.java:277)
   at androidx.media3.session.MediaSessionImpl.lambda$callWithControllerForCurrentRequestSet$3(MediaSessionImpl.java:318)
   at androidx.media3.common.util.Util.postOrRun(Util.java:761)
   at androidx.media3.session.ConnectedControllersManager.flushCommandQueue(ConnectedControllersManager.java:271)
   at androidx.media3.session.ConnectedControllersManager.flushCommandQueue(ConnectedControllersManager.java:252)
   at androidx.media3.session.MediaSessionStub.lambda$flushCommandQueue$64(MediaSessionStub.java:1653)
   at androidx.media3.common.util.Util.postOrRun(Util.java:761)
   at androidx.media3.session.MediaSessionStub.flushCommandQueue(MediaSessionStub.java:1651)
   at androidx.media3.session.MediaControllerImplBase$FlushCommandQueueHandler.flushCommandQueue(MediaControllerImplBase.java:3290)
   at androidx.media3.session.MediaControllerImplBase$FlushCommandQueueHandler.handleMessage(MediaControllerImplBase.java:3283)
   at android.os.Handler.dispatchMessage(Handler.java:102)
   at android.os.Looper.loopOnce(Looper.java:211)
   at android.os.Looper.loop(Looper.java:300)
   at android.app.ActivityThread.main(ActivityThread.java:8294)
   at java.lang.reflect.Method.invoke(Method.java)
   at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:559)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:954)

崩溃原因

  1. AGP 8.3.0配套R8版本的优化变化:AGP 8.3.x搭配的R8 8.3.x版本引入了更激进的代码优化规则,Media3 1.2.1未适配这些新规则,导致其内部类(混淆后为G2.c2)尝试访问的Guava类com.google.common.util.concurrent.ImmediateFuture被错误地限制了访问权限,触发IllegalAccessError。
  2. 本地与发布构建的差异:本地构建可能未启用与发布完全一致的R8优化参数(如release模式下的全量优化、shrinkResources等),导致无法复现发布时的问题。

解决办法

临时修复(无需回退构建工具)

在项目的proguard-rules.pro文件中添加以下R8规则,确保相关类的访问权限不受限制:

# 保留Guava的ImmediateFuture类不被优化混淆
-keep class com.google.common.util.concurrent.ImmediateFuture { *; }
# 保留Media3会话相关类,避免内部结构被破坏
-keep class androidx.media3.session.** { *; }
# 允许修改类访问权限,解决内部类访问限制问题
-allowaccessmodification

长期解决方案

  1. 升级Media3至适配版本:将Media3升级到1.4.0及以上的稳定版本,后续版本已修复与AGP 8.x系列的R8兼容性问题,从根源避免此类崩溃。
  2. 统一构建配置:确保本地release构建的配置(minifyEnabled、shrinkResources、R8参数等)与发布构建完全一致,便于在本地复现问题并调试。
  3. 调试R8优化过程:在gradle.properties中添加以下参数,开启R8详细日志,定位具体的优化冲突点:
    android.enableR8.fullMode=true
    android.r8.logLevel=info
    
    构建后查看R8日志,针对性调整混淆规则。

应对Android Studio升级提示的建议

  • 升级AGP/Gradle前,先确认第三方依赖(如Media3)是否已适配目标版本,优先升级依赖库到兼容版本。
  • 升级前在测试环境模拟发布构建流程,验证核心功能的兼容性,避免直接发布引发大规模崩溃。
  • 若必须升级构建工具,先小范围灰度发布验证,确认无问题后再全量推送。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 16:15:38