mAppWidget是一个Android类库,使用它可以很方便的实现手绘地图,同时支持放大,缩小,气泡,图层等功能。但是这个类库分为试用版和正式版,正式版本的类库需要100多美刀,而试用版本虽然可以免费使用,但是地图上会有一个讨厌的logo 。
记得有个哥们项目需要,研究了一下。当时只是弄了个小demo,没有深入研究。有网友留言,才发现这个类库还是有很不少人在用的。大家都反映这个logo太影响美观了,如何才能干掉它。
有网友说可以使用反射暴力去掉水印,感觉是个靠谱的主意。只要找到控制水印显示的属性,改变它的属性为不可见即可。
使用jd-gui 看了一下mAppWidget的jar包,浏览了一下代码。在MapWidget中发现了一个静态Bitmap的属性,该属性声明为K,感觉很可疑。查找了一下K属性的赋值,发现如下代码:
if (com.ls.widgets.map.utils.Resources.LOGO != null) { K = BitmapFactory.decodeByteArray(com.ls.widgets.map.utils.Resources.LOGO, 0, com.ls.widgets.map.utils.Resources.LOGO.length); }哈哈,明眼人一看就知道LOGO是什么啦。判断条件是这个LOGO是否为空,只要将这个LOGO属性设置为空,那么水印就没有了。
下面我们使用反射来人为修改,代码如下:
Class<?> c = null; try { //反射找到Resources类 c = Class.forName( "com.ls.widgets.map.utils.Resources"); Object obj = c.newInstance(); //找到Logo 属性,是一个数组 Field field = c.getDeclaredField( "LOGO"); field.setAccessible( true); //将LOGO字段设置为null field.set(obj, null); } catch (Exception e) { e.printStackTrace(); }
将此段代码放到地图初始化之前,即可。效果如下:
=================================
欢迎加入 mAppWidget交流群:200742788
开源地址:https://github.com/lemberg/mappwidget
=================================