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

Android中使用ProGuard如何保留特定内部类?

解决ProGuard混淆时保留特定内部类方法签名的问题

针对你遇到的问题,只需通过精准的ProGuard规则配置,就能在不全局保留所有内部类的前提下,实现保留类A的setXX方法参数为原内部接口B的需求,具体配置如下:

核心配置规则

# 保留内部接口A$B的完整名称与所有成员,避免被重命名
-keep interface com.yourpackage.A$B {
    *;
}

# 锁定类A中setXX方法的签名,确保参数类型为A$B(原内部接口B)
-keepclassmembers class com.yourpackage.A {
    public void setXX(com.yourpackage.A$B);
}

# 仅保留类A及其内部接口B的InnerClasses属性,而非全局生效
-keepattributes InnerClasses
-dontkeepattributes InnerClasses,!com.yourpackage.A,!com.yourpackage.A$B

规则说明

  1. 第一条规则直接指定保留内部接口A$B的所有信息,ProGuard不会对其进行重命名或裁剪成员。
  2. 第二条规则锁定类A的setXX方法签名,确保参数类型始终指向未混淆的A$B。
  3. 第三条规则通过-keepattributes InnerClasses开启内部类属性保留,再用-dontkeepattributes排除其他类的该属性,仅让A和A$B的InnerClasses属性被保留——这一步是让方法参数在混淆后仍显示为B而非A$B的关键,同时避免了全局保留所有内部类的问题。

注意:将配置中的com.yourpackage替换为你实际的包路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:12:45