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

添加ProGuard规则后APK体积异常增大的原因排查求助

问题原因分析
  • 依赖递归保留的量级差异:你的Demo几乎没有业务代码,当通过-keep class com.pax.neptunelite.api.Nepcore{*;}强制保留该类所有成员时,ProGuard会递归追踪并保留这个类直接、间接依赖的所有类、方法甚至关联资源——这些内容原本在空规则下都会被判定为无用代码/资源而移除。而其他大项目本身已经因为业务功能包含了这些依赖类的大部分,新增的被保留内容极少,所以体积增长幅度很小。

  • Dex分包与代码复用的差异:小项目代码量少,D8/R8在处理dex分包时,会把Nepcore及其所有依赖打包进新的dex文件,这些新增dex的体积就是Jar包中未被移除的核心内容总和。而大项目已有大量代码,Nepcore的依赖类很多已经被合并到现有dex中,不会额外新增大体积的独立dex块,同时大项目的代码复用率更高,避免了重复打包相同类。

  • 资源收缩的连锁效应差异:你开启了isShrinkResources,空规则下Demo的冗余资源会被彻底清理。但保留Nepcore后,它关联的所有资源(如内部用到的布局、字符串、原生库等)都会被强制保留,这些资源对小项目来说都是全新的,直接推高了APK体积;而大项目可能已经在其他模块用到了部分关联资源,新增的资源量微乎其微。

  • 无用代码移除的效率差异:小项目本身没有多少业务代码,空规则下D8/R8会移除Jar包中几乎所有未被引用的代码。但-keep规则强制保留Nepcore的所有成员后,Jar包中原本被判定为无用的大量代码(包括Nepcore依赖的底层类、工具类等)都被保留下来,相当于把Jar包的大部分有效内容都塞进了APK;而大项目中这些依赖类很多已经是业务必需的,不会因为这条规则额外新增太多无用代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 20:33:18