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

如何强制ProGuard混淆指定包下所有类名及成员(除保留类)

ProGuard配置:默认混淆指定包下所有类及成员(仅排除指定类)

核心配置思路

要实现默认混淆目标包下所有类的类名和成员,关键是明确排除需要保留的类,同时关闭对目标包类及成员的默认保留规则,开启类名与成员混淆的必要选项。

具体配置步骤

  1. 排除需要保留的类
    通过-keep规则指定不需要混淆的类/子包,其余类默认进入混淆流程:
# 替换为你需要排除的类或子包,例如不需要混淆的工具类、对外接口类
-keep class com.package.excluded.** { *; }
  1. 关闭目标包的类名保留
    确保ProGuard不会保留目标包下类的原始名称:
# 不保留com.package包下所有类的原始类名
-dontkeepnames class com.package.**
  1. 确保成员被混淆
    不对目标包下的类成员设置任何保留规则,默认就会混淆所有成员:
# 不对com.package包下类的成员做保留,默认混淆所有字段、方法
-keepclassmembers class com.package.** {
}
  1. 开启类名混淆的必要选项
    添加这些选项确保混淆后的类名合法、唯一,且代码可正常执行:
# 可选:将混淆后的类合并到根包(空字符串)或指定包,不写则保留原包结构
-repackageclasses ''
# 允许修改类成员的访问修饰符,避免混淆后出现访问权限问题
-allowaccessmodification
# 确保每个类成员的混淆名称唯一
-useuniqueclassmembernames
# 可选:自定义混淆标识符文件,比如用a、b、c等短字符命名,需提前创建proguard-obfuscation.txt文件
-obfuscationdictionary proguard-obfuscation.txt

完整配置示例

# 通用优化配置
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

# 排除需保留的类
-keep class com.package.excluded.** { *; }

# 混淆目标包下所有类及成员
-dontkeepnames class com.package.**
-keepclassmembers class com.package.** {
}

# 类名混淆相关配置
-repackageclasses ''
-allowaccessmodification
-useuniqueclassmembernames
-obfuscationdictionary proguard-obfuscation.txt

验证方法

混淆完成后,查看生成的mapping.txt文件,确认com.package下非排除的类名已被替换(如AdvisorReport2变为AA),类成员也被替换为短标识符(如id变为a)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 11:16:11