JAVA的反射机制可以有效地用来依赖倒置。之前的项目中,我就用XML来定义游戏中的引导脚本,从而实现了在指定界面出现配置好的游戏引导。脚本信息如图:
图中的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
打包以后,再反编译,发现指定的类名得到了保留,脚本反射正常,如图:
大家不用担心保留类名以后的代码安全问题,此配置仅仅保留名字而已,其内部以及其他未指定的类仍然是完全混淆的。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。