2015年3月3日 星期二

Java混淆工具ProGuard的最简明使用方法及Warning: can’t find referenced class xxx的解决方法

http://quyuxjtu.sinaapp.com/?p=361

ProGuard是一个广受欢迎的Java混淆工具,很多Android应用也会使用该工具进行混淆。下面简单总结一下其出现的Warning: can’t find referenced class xxx这类问题的解决方法。
ProGuard最好是通过命令行运行,但是对于只想用一下工具以完成任务的朋友,也许GUI也就够用了。我们将压缩包解压后,在lib目录下双击proguardgui.jar,就可以启动其GUI。然后一步步按照引导来做就行,这方面网上已经有很多教程。需要指出的是,如果是第一次使用的朋友,往往会在进行“Process”之后出现如下面所示的问题:
1
Warning: org.makagiga.commons.crypto.MasterKey: can't find referenced class javax.crypto.KeyGenerator
解决方法也很简单,网上很多日志也说到了,但是大部分是针对命令行方式的。这里介绍一种最简单的方法:在其他选项都设置好后,在Process这一步之前,可以选择“Save Configuration”,保存成ProGuard的配置文件(无所谓文件后缀)。然后针对上面的问题,我们打开刚才保存的配置文件,可以看到类似这样的内容:
1
2
3
4
5
-injars 'D:\Projects\makagiga-source-4.8\dist\images.jar'
-injars 'D:\Projects\makagiga-source-4.8\dist\makagiga.jar'
-outjars 'D:\Projects\makagiga-obsfucated-jar'
 
-libraryjars 'D:\Program Files\Java\jre7\lib\rt.jar'
要解决刚才这个问题,我们在后面加上:
1
2
-dontwarn javax.crypto.**
-keep class javax.crypto.**
按照类似的方法将所有的Warning处理掉,然后再用ProGuard将刚才保存的配置文件打开(重启ProGuard之后,选择“Load Configuration”),如果不出意外,就可以生成混淆以后的JAR包或者class文件了。其实,个人感觉ProGuard这个功能挺弱智的。另外,通过直接在配置文件上修改,也免去了大家学习GUI复杂选项的过程,适合需要在半天内完成任务的朋友借鉴。