ProGuard工具
:是一个免费的 Java类文件的压缩,优化,混肴器。它删除没有用的类,字段,方法与属性。使字节码最大程度地优化,使用简短且无意义的名字来重命名类、字段和方法 。
文件下载之后进行解压,目录如下:
进入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(...);
}