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

为何显式调用构造函数时R8仍移除MyDateRequest类?

R8移除显式调用类的原因分析

以下是几种可能导致该问题的原因:

  • MyUseCase的foo方法被判定为未使用:如果foo方法没有被任何代码路径实际调用(比如是private方法且未被本类其他方法引用,或者MyUseCase的实例从未被创建并调用foo),R8会将整个foo方法标记为无用代码移除,连带里面的MyDateRequest构造调用也会被删除。此时MyDateRequest没有其他被引用的地方,自然会被R8清理掉。

  • MyDateRequest的实例未被实际使用:如果在foo方法中只是单纯调用new MyDateRequest(),但没有将创建的实例赋值给变量、作为参数传递,或者调用实例的任何方法/属性,R8会认为这个实例的创建是无意义的冗余操作,会直接优化掉该构造调用。失去唯一引用的MyDateRequest类就会被移除。

  • 混淆规则存在冲突或遗漏:检查你的混淆配置文件,如果存在针对MyDateRequest所在包的全局移除规则,或者某些自定义规则覆盖了R8默认的“显式调用保留”逻辑,可能会导致R8强制移除该类。另外,如果配置了-allowaccessmodification等激进优化选项,也可能影响R8的保留判断。

  • R8的激进优化层级触发:在release构建中,R8默认会启用更高层级的优化,比如跨方法的无用代码分析。如果MyUseCase所在的调用链最终没有关联到应用的入口点(比如Activity、Service等组件),R8可能会将整个调用链判定为无用,进而移除相关类。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 06:34:52