如何在ProGuard中配置保留类及私有实例变量不被混淆?
ProGuard保留指定类成员变量配置方案
原有配置失效原因
- 类名规则不合法:
.Repository不符合ProGuard命名规范,必须填写类的全限定名(即包名+类名,例如com.example.demo.Repository),也可以用**/Repository匹配任意包下的同名类,但不推荐避免误匹配。 - 成员匹配规则范围错误:通配符
*默认不会匹配私有成员变量,Repository$*是匹配该类的内部类,和普通成员变量无关。
正确配置
方案1:精准保留指定变量(推荐,无冗余保留)
直接指定要保留的变量名和类型,仅保留目标变量不被混淆,其他内容正常混淆:
# 替换为你自己的Repository类全限定名 -keepclassmembers class com.example.demo.Repository { private java.util.Set mInstalledApps; }
如果需要同时保留类本身不被混淆,额外添加一条规则:
-keep class com.example.demo.Repository
方案2:保留该类所有成员变量
如果该类所有字段都不需要混淆,可以用<fields>通配所有成员变量:
-keepclassmembers class com.example.demo.Repository { <fields>; }
验证方式
在ProGuard配置中添加-printmapping mapping.txt,打包后在构建产物中找到mapping.txt文件,搜索mInstalledApps,如果没有对应的混淆映射条目,说明保留成功。
内容的提问来源于stack exchange,提问作者Harsh Shah
相关产品推荐
相关产品推荐

