Android软件去广告方法总结[2012.3.6更新工具]

来源:互联网 发布:淘宝改标题会降权吗 编辑:程序博客网 时间:2024/04/29 18:36
标 题: 【原创】Android软件去广告方法总结[2012.3.6更新工具]
作 者: 我是土匪
时 间: 2012-03-04,10:02:13
链 接: http://bbs.pediy.com/showthread.php?t=147339

目前很多免费的android程序都带有小广告,这些广告对于开发者而言,是维持开发运营的收益的一种体现,不过对于用户来说,一些过分的广告,却适得其反,增大了用户的反感,减少了用户体验,这种应用其实也不在少数,废话不多说了,开始进入正题,怎么样才能快速的去除那些顽固的广告呢?接下来看看就知道。注意:此文仅作为技术交流讨论所用,请勿用于其他用途!

用到的工具:ApkTool_GUI_1.3.5内测.exe  下载地址:http://115.com/file/be6ll6tm#ApkTool_GUI_1.3.5内测.rar
名称:  QQ截图20120304085244.png查看次数: 924文件大小:  30.1 KB
开始正式的例子之前,先普及一些知识。目前较为常见的是Admob和Google Ads,虽然前者已被后者收购,但是目前其SDK仍旧独立。

  Admob广告需要导入AdMob Android SDK,并在AndroidManifest.xml内注册,在相应layout内创建元素。
Google AdMob Ads SDK:相关介绍和使用发现
https://developers.google.com/mobile-ads-sdk/docs/android/advanced
https://developers.google.com/mobile-ads-sdk/docs/android/fundamentals
https://developers.google.com/mobile-ads-sdk/docs/android/intermediate
 
通过阅读上面3个链接的文章,我们知道,只要loadAd这个方法失败,那么就不会加载广告了,所以我们修改这个方法为
----------------原始的----------------------
.method public loadAd()V
    .locals 2

    .prologue
    .line 50
    iget v0, p0, Lcom/devuni/compass/ads/AdsManager;->currentProviderId:I

    const/4 v1, -0x1

    if-ne v0, v1, :cond_1

    .line 52
    invoke-direct {p0}, Lcom/devuni/compass/ads/AdsManager;->nextProvider()V

    .line 58
    :cond_0
    :goto_0
    return-void

    .line 54
    :cond_1
    iget-object v0, p0, Lcom/devuni/compass/ads/AdsManager;->currentProvider:Lcom/devuni/compass/ads/providers/BaseProvider;

    if-eqz v0, :cond_0

    .line 56
    iget-object v0, p0, Lcom/devuni/compass/ads/AdsManager;->currentProvider:Lcom/devuni/compass/ads/providers/BaseProvider;

    invoke-virtual {v0}, Lcom/devuni/compass/ads/providers/BaseProvider;->reload()V

    goto :goto_0
.end method

----------------修改后的----------------------
.method public loadAd()V
    .line 58
    return-void
----------------修改后的----------------------
为什么修改这里呢,因为这个文件还是比较好定位的,有专门的文件夹,一般都叫 “ads”,如果你可以在主程序中找到时那里调用了这个方法,把那句话删掉即可。但是如果是2M以上的大程序,那么要找到在哪里调用了它还是 比较困难的。


一般都是在这个文件  “Main.smali” 里面的 onCreate 方法,实现过程大致如下:

--------------------------------------------------
# virtual methods
.method public onCreate(Landroid/os/Bundle;)V
    # 省略了部分代码  
    new-instance v1, Lcom/devuni/compass/ads/AdsManager; #创建一个对象
    
    # ………………………………… 
    invoke-direct {v1, p0}, Lcom/devuni/compass/ads/AdsManager;-><init>(Landroid/content/Context;)V  # 初始化
 
    # …………………………………
    invoke-virtual {v1, v0}, Lcom/devuni/compass/ads/AdsManager;->setLayoutParams(Landroid/view/ViewGroup$LayoutParams;)V # 设置输出
    
    # ………………………………… 
    invoke-virtual {v1}, Lcom/devuni/compass/ads/AdsManager;->loadAd()V # 加载广告
--------------------------------------------------


样本1下载:样本1.rar.

[样本1使用样本2的方法不能去广告]

  Google Ads的SDK已经包含在Android SDK内,也同样需要在AndroidManifest.xml内注册,在相应layout内创建元素。

  *Google的广告下载源为:http://pagead2.googlesyndication.com/pagead/afma_load_ads.js

  既然广告的SDK需要在AndroidManifest.xml中注册,那就看看这个文件。纵观文件,在文件尾部的节点中看到了<activity android:name="com.google.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation">,或 <activity android:name="com.mt.airad.MultiAD" android:configChanges="keyboard|keyboardHidden|orientation" />只有这个部分和广告内容相关,那么把这个节点删掉,应该可以屏蔽广告的注册,也就可以屏蔽广告的加载与显示。

样本2下载:样本2.rar.


由于样本2比较特殊,我就在多介绍一下:

apk程序是否连网,你首先要确定一下,如果你的程序就是一个单机的小游戏或其他应用,不需要网络操作,那么就不要给它网络访问的权限
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />


把上面这两句话删掉。
通过阅读 AndroidManifest.xml  这个文件,我们发现下面内容,英文大致意思就是:推送酷狗的广告,判断你 wifi 网络的状态,因为此程序是完全的单机应用,所以,我们可以删掉下面得内容,
注意:" <……>     </……>"  一定要配对,如果你不确定每次修改是否会影响程序运行,那就改动一下,打包,签名,测试 ,没问题,就在继续改,随着经验的积累,你就可以免去繁琐的测试了。
 
名称:  1.png查看次数: 922文件大小:  12.3 KB


三、DomobSDK (多盟sdk,下载地址:http://www.domob.cn/site/view/page/SDK.htm) 

注意,由于DomobSDK 有多处校验,所以上面的修改方法对这个sdk是无效的,如果修改会提示没有权限,效果如图:
点击图片以查看大图图片名称:20120304114236.png查看次数:907文件大小:141.3 KB文件 ID :65255
通过阅读sdk源码,发现它有个方法 叫: setPublisherId 它的作用是相当与设置你的银行卡号,每个用户的手机通过这个ID 访问了 广告网址,就会使这个ID的钱增加。如果这里要是反悔错误,那么就不会加载广告了。

.method public static setPublisherId(Ljava/lang/String;)V
    .locals 2

    if-eqz p0, :cond_0  # 这里修改为   goto :cond_0

    if-eqz p0, :cond_1

    invoke-virtual {p0}, Ljava/lang/String;->length()I

    move-result v0

    if-nez v0, :cond_1

    :cond_0
    const-string v0, "DomobSDK"

    const-string v1, "Incorrect Domob publisher ID."

    invoke-static {v0, v1}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I

    :goto_0
    return-void

    :cond_1
    sput-object p0, Lcn/domob/android/ads/DomobAdManager;->c:Ljava/lang/String;

    goto :goto_0
.end method

当然,有兴趣的朋友可以研究一下 DomobAdManager.smali  这个文件,可以在初始化sdk的时候就返回 void ,这样 效果也是一样的。

样本三下载:样本3.rar.


经常在看 源码的时候发现这样的 字符串,const-string v2, "\u4e0b\u8f7d\u7ebf\u7a0b\u51fa\u9519\uff0c\u9519\u8bef\u539f\u56e0\uff1a",很难读懂是什么意思,就写了个小工具,
名称:  tools.png查看次数: 892文件大小:  14.4 KB
喜欢的朋友就猛击此处: AndroidUnicodeString.rar[2012年3月6日修改,添加字符串转unicode功能] 
0 0
原创粉丝点击