J2SE的应用程序,之前已设置好Ant打包和Proguard混淆的配置,且输出的文件能正常运行。后因需求增加了WebService的调用代码,其中用到了XFire的HttpClient,于是在Proguard混淆配置中将用到的jar包悉数加入,混淆后运行程序,居然增加的这部分功能不能正常使用。
后来通过Log4j错误定位到程序找不到WebService提供的方法,查找该方法调用入口,是XFire框架自动生成的代码,其方法前使用了Java的Annotation来表明其是WebService提供的Web方法。在proguard的UI设置界面中,恰好有“保留annotation属性”的选项,只不过默认都未设置该项。因此认定是因为proguard混淆了Annotation,造成程序无法识别Web方法以致无法调用。
在项目的proguard配置文件中添加以下代码:
此后重新使用proguard混淆后再运行程序,一切OK。
因此,今后在使用proguard时,遇到类似问题应想想是否跟某些属性被混淆后有关系,试试多研究下proguard的参数,相信会对解决问题有帮助。