apk去广告工具(利用apktool去除apk文件里的广告)

基本知识

apk安装包的文件结构

以知名桌面软件“LauncherPro”为例,apk安装包文件目录:

文件目录如下:

- META-INF

- res

- anim

- color

- drawable

- drawable-hdpi

- drawable-land

- drawable-land-hdpi

- drawable-mdpi

- drawable-port

- drawable-port-hdpi

- layout

- layout-land

- layout-port

- xml

- AndroidManifest.xml

- classes.dex

- resources.arsc

- 多数情况都要汉化的是resources.arsc、classes.dex和res文件夹里的***.xml文件

- META-inf文件夹里面存放的是证书文件,软件修改后需要将里面的证书文件删除(***.RSA、***.SF、***.MF三个文件)再重新签名,否则软件无法安装。

- res文件夹里存放的大部分是软件所需的资源及布局文件(drawable存放资源、layout、xml存放布局文件***.xml),部分需要汉化的单词、语句会在这些***.xml文件里。

- AndroidManifest.xml文件里包含了软件名称、版本、权限、引用的库文件等信息。极少数软件在这个文件里会有单词、语句需要汉化。

- classes.dex文件是Java源码编译后的代码文件。通常该文件里都有单词、语句需要汉化。

- resources.arsc文件是编译后的资源文件,大多数情况下,需要汉化的单词、语句绝大多数都在这个文件里,汉化的时候首先就要看这个文件。

* 另外,一些需要汉化的***.png图片文件、***.html文件、***.txt文件可能会在assets文件夹或res/raw文件夹内。图片文件需要用photoshop修改,html、txt文件可以直接用Notepad++ Portable文本编辑工具修改(不建议用系统自带的记事本,这东西杀伤无数...)。

2、打包/解包

apk安装包其实就是zip格式的压缩包,只是文件扩展名改成了apk而已,所以可以直接用解/压缩软件WinRAR打开,若你的系统没有关联apk文件,请先安装WinRAR,打开WinRAR——选项——设置——综合,在“用户自定义压缩文件扩展名”处填上apk,点“确定”保存即可。之后就可以直接双击以WinRAR打开apk安装包文件。

汉化软件的时候,不需要把整个apk安装包解包,对于需要汉化的文件,如resources.arsc、classes.dex等文件,直接用鼠标拖出来,汉完后再拖进apk安装包后重新签名就行了(签名问题下面会讲到)。

3、签名

Android的软件也需要签名,不过和Symbian相比,却要简单方便得多,首先是不需要自己去申请证书,下载个签名工具就可以签名了。另外,我们从电子市场、软件官网下载来的软件都是已经签好名的,可以直接安装,这里讲到的签名,是针对软件安装包被修改过的情况(如汉化需要修改安装包内的文件,原来的签名文件就不能用了,所以要重新签名软件才能正常安装。),正常情况下不需要签名。

现在Android可用的签名工具很多,想方便点的话可以用汉化浪子出品的AndroidResEdit,这个软件自带签名包(工具在帖子附件有提供)。

签名方法很简单,删除原证书文件后(META-INF 文件夹内的***.RSA、***.SF、***.MF三个文件),打开AndroidResEdit——签名——签名apk文件,选择需要签名的apk安装包后点击“立即签名”即可。

4、安装Java环境

这个是最基本的,汉化相关的软件都需要用到Java环境,必须要安装,否则汉化过程中出现各种奇奇怪怪的问题不要问我。具体安装Java环境方法,可以百度一下。

安装apktool并反编译apk文件

要安装apktool,要下载两个文件

在windows环境下:

apktool-install-windows-r04-brut1.tar.bz2

apktool1.4.1.tar.bz2

在linux环境下:

apktool-install-linux-r04-brut1.tar.bz2

apktool1.4.1.tar.bz2

下载主页 http://code.google.com/p/android-apktool/

下载解压缩后,会得到三个文件,分别为aapt.exe, apktool.bat与apktool.jar。

然后将这三个文件扔到C盘下的windows目录中,即可。

要确认apktool已经正确安装,可以运行命令行窗口,直接键入apktool,可看到如图显示:

apktool安装正确后,就可以反编译apk文件了。反编译apk文件,只需要在命令行窗口下输入如下所示的命令语句:

apktool d D:\dartE.apk D:\dartE

命令解析:

-apktool d 表示要反编译apk文件

-D:\dartE.apk 是apk文件存放的绝对路径

-D:\dartE 是要输出的反编译文件的存储位置(注:apktool会自动创建一个叫做dartE的文件夹来存放反编译文件,而若在之前已经存在dartE文件夹,则apktool会提示文件夹已存在,而不会进行反编译)

键入命令后回车,出现如下几行语句后,就会发现在D盘下已经多了一个叫做dartE的文件夹,里面存放的就是反编译后的文件。

汉化APK文件

汉化APK文件,主要的任务就是利用apktool将apk文件反编译,然后找到其语言包(语言包中均为*.xml文件),将里面的英文改为对应的中文即可。另外,有些英文可能被写死在了程序源代码中,汉化这部分就需要搜索并汉化利用apktool工具反编译classes.dex文件后得到的源码文件*.smali文件了。

首先,讲解如何找到并汉化apk语言包。

利用apktool反编译apk文件后,会得到如图的几个文件及文件夹

其中,smali文件夹下存放反编译后的源码文件*.smali。而res文件夹下,则是反编译后的apk资源文件。其中包括程序用到的图片,声音,布局xml,及语言包等。因此,应点开res文件夹,会看到如图所示的几个文件夹

其中用values-***命名的文件夹,就是我们要找的语言包!

values是英文语言包,values-zh是中国地区语言包(包含港澳台及内地),values-zh-rCN是中文简体语言包(只包含内地),values-zh-rTW是中文繁体语言包(港澳台)。除此以外,其它地区的语言包都是精简的对象,可以不过多了解。

* 若要汉的软件没有中文语言包,可以自己在res目录下新建values-zh-rCN和values-zh-rTW文件夹,再把values文件夹内的原arrays.xml、strings.xml语言文件复制到values-zh-rCN和values-zh-rTW文件夹,然偶将语言文件内的单词、语句修改成中文并保存即可。

在values文件夹里,通常有arrays.xml、strings.xml等语言文件,要汉化这些文件,可以用Notepad++ Portable打开,如图:

我们只需要将>*****间的*****内容改成中文就行了。

对于写死在源码中的英文,这需要我们利用Notepad++工具,在smali文件夹下搜索相应的英文单词,然后再修改为中文了。

Tips:

- 若对软件的汉化熟悉后,用“文件查找”搜索要汉的单词、语句时,可以直接输入“const-string”,因为基本上这些单词、语句都在const-string后面,如图:

- 对于刚刚接触汉化的人,源码汉化这部分最好先在汉完资源文件和xml文件后,把软件装上去查找没有汉完的单词、语句,然后再到smali文件夹下查找汉化,软件上没有的单词,就不要多汉,不然出问题了很难查找,smali重新打包后,那些中文是搜不出来的,所以很难修改。切记,宁可少汉,也不要多汉,即使少汉了,日后还可以补汉上去。

其它文件类型汉化

- 除了语言包、***.xml、**.smali这三中常见的文件类型需要汉化外,有些软件还有另外一些文件需要汉化,例如txt、html、png等文件。

* 下面对这类文件的汉化作下讲解:

① txt汉化,txt之类的文本文件可以直接用Notepad++ 打开,难度不大,将里面的内容修改成中文后保存即可。这类文件大部分用作显示关于信息、帮助信息等,所以基本上都是一些整句句子。另外,若保存后在手机上这些内容显示乱码的话,可以尝试将文件格式更改为UTF-8格式(在Notepad++ Portable中打开格式——转为UTF-8编码格式)。

②html文件的汉化也和txt文件类似,可以用Notepad++ Portable汉化,完成后保存即可,需要注意的格式问题也和txt文件一样。另外要注意的是这类文件里面有代码,熟悉汉化后对这些代码自会有相应的了解,例如

,表示这段代码后的文字内容以红色、居中显示。

③ png图片文件通常都是用Photoshop来修改的,部分软件是通过调用图片来达到显示选项的目的,而单词又在图片上,所以需要通Photoshop将图片上的单词修改成中文,保存后再拖回apk安装包中替换原文件即可。这个只需要Photoshop上的一些最基本的操作,难度并不大,就不作过多阐述了。

去除广告

利用apktool去除apk文件里的广告,主要是要去做两个部分工作:

让广告在程序里无法显示(但程序仍会下载广告,只是没有显示)

禁止程序自动在后台访问广告源,这样做后程序才不会偷偷的在后台下载广告,浪费我们的手机流量。

目前Android的广告供应商有两个,一个是Admob,一个是Google Ads,前者已被后者收购,但两者SDK依然独立。

- 广告代码

Admob的广告代码为:

<COM.ADMOB.ANDROID.ADS.ADVIEW< p>

android:id=”@+id/ad”

android:layout_width=”fill_parent”

android:layout_height=”wrap_content” />

Google Ads的广告代码为:

<COM.GOOGLE.ADS.GOOGLEADVIEW< p>

android:id=”@+id/adview”

android:layout_width=”wrap_content”

android:layout_height=”wrap_content” />

- 广告下载源

Admob的广告下载源:

http://r.admob.com/ad_source.php

http://mm.admob.com/

http://api.admob.com

Google Ads的广告下载源:

http://pagead2.googlesyndication.com/pagead/afma_load_ads.js

下面就来讲解如何做这两部分工作。

禁止显示广告

由于程序的布局信息都写在了res文件夹下的*.xml文件中,因此,我们可以?直接利用Notepad++搜索*.xml文件中的广告代码,?再将其显示的宽,高设置为0像素即可。即将上面的广告代码中

android:layout_width=”...” 设置为 android:layout_width="0.0dip"

android:layout_height="..." 设置为 android:layout_height="0.0dip"

? 搜索广告代码:

在res文件夹下,按广告代码的关键字"com.admob.android.ads.AdView"或

"com.google.ads.GoogleAdView"搜索。(为了以防万一,干脆两个广告供应商都搜索一遍)

搜索后,在屏幕下方会得到如下结果。

双击黄色的部分,转到程序中的相应代码处,然后将宽,高设置为0.0dip即可!

?去除广告下载源

在Android程序中,广告下载源是被写在代码中的。而利用apktool反编译程序后,其编译后的源代码文件即classes.dex文件,被反编译为*.smali文件,这是一种文本文件,可以用记事本打开查看里面的内容(但其内容并非原始的*.class文件内容,因此并不是真正的源代码文件)。尽管如此,我们仍可以在其中搜索到广告下载源网站,并将网址改为无效的地址,借此来阻止程序自动下载广告数据。

apktool会将反编译得到的*.smali文件放在smali文件夹中。因此我们在smali文件夹下利用Notepad++搜索广告下载源网址(在文章开始处已经列出),并将其网址替换为"0.0.0.0"。

得到的内容如下所示,同样双击黄色部分,跳到代码处,将其网址改成

"0.0.0.0"

至此,我们已经完成了apk文件去广告的整个过程。

将程序重新打包并签名

将apk文件汉化,并去除广告后,最后一步要做的,就是将程序重新打包为apk文件并签名使其能够在手机中安装。同样的,我们需要分为两步进行:?将程序重新打包 ?为打包后的apk文件签名

?将程序重新打包

利用apktool,可以将程序重新打包。在命令行下,输入如下命令

* 命令说明:apktool b D:\dart

- apktool b为重新编译命令

- D:\dart 为需要编译的目录(就是存放刚刚反编译后的文件的文件夹,名称可以自定义)

重新打包后,我们再查看D:\dart目录,会发现其中多了一个名称为dist的文件夹,打开,我们重新打包的apk文件就在里面啦~~~

?为打包后的apk文件签名

签名的话,我们用汉化浪子出品的AndroidResEdit软件,其自带签名功能,相当方便啊。只要进入软件,点选【签名】,然后选择要签名的apk文件,在点击【立即签名】,然后在选择签名后的apk文件存放路径,就好了!一切就是这么简单!!!

转载于:https://www.cnblogs.com/huangxinzhen/p/4096629.html

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值