Proguard-混淆

ProGuard工具

  :是一个免费的 Java类文件的压缩,优化,混肴器。它删除没有用的类,字段,方法与属性。使字节码最大程度地优化,使用简短且无意义的名字来重命名类、字段和方法 。

 下载地址:https://sourceforge.net/projects/proguard/files/

 

文件下载之后进行解压,目录如下:

 

 进入bin目录

 

 执行proguardgui.bat

 

 

 

 

 

 看到错误,找不到依赖的类,并且需要进行处理,导致混淆失败

 

 保存配置文件

 

 查看配置文件内容如下:

在配置文件中添加参数:-dontwarn com.jinfu.lock.**

  :此行用于忽略-当前类找不到依赖的警告,当前表示包 com.jinfu.lock下找不到依赖的警告全都忽略

 

此时需要注意:

  给用户调用的相关api不需要进行混淆;

  返回给用户的数据信息相关不需要进行混淆;

 

添加参数:-keep class com.jinfu.lock.core.LockTemplate{*;}

  :此行表示保留当前类不做混淆处理,因为此类将作为api进行调用;

 

添加参数:-keep class com.jinfu.lock.pojo.LockMessage{*;}

  :此行表示保留当前类不做混淆处理,因为此类将作为返回对象

 

添加后的文件如下所示:

 

 

编写好相关配置文件后,再次打开proguardgui.bat;

  但本次我们引入已经编写好的配置文件

 

 

 

 点击next

 

 

 

 

 

 找到我们之前配置的jar输出路径,找到混淆后的jar,并将其导入项目中查看

 

可以看到我们配置不进行混淆的类保留了原有的文件名。

进行混淆的类,被混淆成了a、b、c等极短且无意义的字符表示。

若混淆后的sdk运行正常,则已经混淆成功!

若运行异常,您可能需要额外添加其它相关配置;

 

配置文件语法举例:

//需要进行混淆的jar
-injars 'C:\control.jar'
//混淆后的jar存储位置以及jar名称
-outjars 'C:\control-proguard.jar'
//忽略包 com.jinfu.lock下所有的警告
-dontwarn com.jinfu.lock.**

//保留 com.jinfu.lock.core下LockTemplate类中所有成员,当前类不会被混淆
-keep class com.jinfu.lock.core.LockTemplate{*;}
//保留 com.jinfu.lock.mina下MinaServer类中所有成员,当前类不会被混淆
-keep class com.jinfu.lock.mina.MinaServer{*;}
-keep class com.jinfu.lock.pojo.LockMessage{*;}
-keep class com.jinfu.lock.pojo.LockResult{*;}

//保留 com.jinfu.lock.mina下CustomProtocolCodecFactory类中的方法 getEncoder、getDecoder,当前类会被混淆,但方法会被保留
-keepclassmembers class com.jinfu.lock.mina.CustomProtocolCodecFactory{
        *** getEncoder(...);
        *** getDecoder(...);
}
-keepclassmembers class com.jinfu.lock.mina.CustomProtocolEncoder{
        *** encode(...);
}
-keepclassmembers class com.jinfu.lock.mina.CustomProtocolDecoder{
        *** doDecode(...);
}
-keepclassmembers class com.jinfu.lock.mina.MinaServerHandler {
        *** messageReceived(...);
}

 

参考:

官网:https://www.guardsquare.com/proguard

proguard工具用法

proguard混淆规则说明

posted @ 2021-11-17 17:42  DHaiLin  阅读(145)  评论(0编辑  收藏  举报