在网络上很多Apk应用程序中,作者会对免费的版本加入广告,然后理所当然的网络上也出现了大量的去广告版。另外,也有一些软件,启动时会弹个窗口出来,要么是一些无用的提示,要么是建议你去注册。各大Android爱好者热衷于去下载这些无广告版无弹窗的Android软件,理由也很简单,看起来和用起来都舒服。
在这小节里,我们简单的研究下,这些广告和弹窗是如何被去掉的。
当然,这里所有的修改都建立在apktool反编译的基础上。前面的文章已经阐述过了,我们直接讲核心的部分。
实验的对象,也是一个简单的自己写的apk。图片如下:
去广告
最简单的去广告方法:修改layout中的ImageView的width和height属性为0dip。
这种方法原理是把显示广告的部分长度和宽度改为零。这样做优点是简单,缺点当然其实这个图片还是存在,还会占资源,如果是网络广告,那么还会从网络上下载,理所当然的,图片的下载会消耗你的一定得流量。
相对彻底的去广告方法:以ImageView显示图片为例, ImageView中加载图片(或动画)的方法有setImageBitmap、setAnimation、setBackgroundDrawable、draw等,在smali中找到这些函数,然后使用#号注释掉该部分。如下
然后,再把layout中ImageView相应的width和height设置为0dip,就可以了(为避免程序出错,不太建议删除掉)
如果是网络图片,那么则会存在一个网络下载的步骤,把相应的一系列的步骤全部注释掉就可以。简单的点的改法,可以把Url置为空。本例中,我把
const-string v6, "http://www.baidu.com/img/logo-yy.gif "
改为
const-string v6, ""
这样,apk就无法从指定地址下载到图片了。
去弹窗
以本例为背景,本例的弹窗是出自AlertDialog,可以把相应的整块Builder, AlertDialog相关的代码注释掉,简单点的改法,把show事件注释就可以。如下:
最后就是测试一下!