28
2013
05

解决混淆与反射冲突

JAVA的反射机制可以有效地用来依赖倒置。之前的项目中,我就用XML来定义游戏中的引导脚本,从而实现了在指定界面出现配置好的游戏引导。脚本信息如图:


proguard.png


图中的shower属性即说明该脚本在加载哪个类时触发,利用反射很简单地就能实现。

然而经过Android默认配置的proguard混淆以后,所有的包名、类名也被混淆了,造成反射无法识别脚本。这里用proguard的配置命令keepnames即可保留指定包名、类名。

比如:

-keepnames class com.songge.qhero.menu.**

-keepnames class com.songge.qhero.battle.ui.**

-keepnames class com.songge.qhero.map.LevelingMapUi

-keepnames class com.songge.qhero.map.MapLevelMenu

打包以后,再反编译,发现指定的类名得到了保留,脚本反射正常,如图:


proguard2.png


大家不用担心保留类名以后的代码安全问题,此配置仅仅保留名字而已,其内部以及其他未指定的类仍然是完全混淆的。


« 上一篇下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。