Proguard是否支持指定混淆类名?可通过配置文件或映射文件实现吗?
Proguard指定混淆后类名称的配置方法
当然可以!Proguard完全支持手动指定类混淆后的名称,有两种常用的配置方式,我给你详细拆解下:
1. 直接在Proguard配置文件(比如proguard.flag)里配置
你可以直接在规则文件中使用-renameclass选项来指定单个类的混淆后名称,语法很简单:
-renameclass com.myclasses.MyClass -> com.priv.mc
如果需要批量把某个包下的类重命名到新的包路径,可以用-repackageclasses选项,比如把所有类都移到com.priv包下:
-repackageclasses com.priv
不过这个是批量操作,没法给每个类单独指定不同的目标名称,适合统一调整包结构的场景。
2. 通过自定义映射文件(比如mymap.map)配置
如果你有一堆类需要指定不同的混淆后名称,写在配置文件里太繁琐,就可以用自定义映射文件。首先你要按照Proguard的映射格式创建mymap.map,比如:
# 类的映射,注意结尾要加冒号 com.myclasses.MyClass -> com.priv.mc: # 如果还要指定类内方法的混淆名,也可以接着写 com.myclasses.MyOtherClass -> com.priv.moc: void calculate() -> calc
然后在proguard.flag里添加-applymapping选项来加载这个映射文件:
-applymapping mymap.map
这里要注意:映射文件的格式必须和Proguard自动生成的mapping.txt完全一致,否则会解析失败;而且你指定的混淆后名称不能和其他类的名称冲突,不然Proguard会抛出错误。
一些额外提醒
- 如果你同时使用了
-applymapping和自动混淆规则,自定义映射里的规则会优先生效。 - Android项目里通常用
proguard-rules.pro作为配置文件,但本质和proguard.flag是一样的,配置语法通用。
内容的提问来源于stack exchange,提问作者kunkers
相关产品推荐
相关产品推荐

