android-----apk去广告

转自:http://blog.csdn.net/yf210yf/article/details/10042741


简介: 
    Android apktool是一个用来处理APK文件的工具,可以对APK进行反编译生成程序的源代码和图片、XML配置、语言资源等文件,也可以添加新的功能到APK文件中。用该工具来汉化Android软件然后重新打包发布是相当简单的。 


1、安装 

   1).首先安装需要JAVA环境,先下载JDK/JRE,点击下载,已经有JAVA环境的可跳过此步 

   2).到code.google上下载apktool.jar以及相关文件: http://code.google.com/p/android-apktool/downloads/list  
点击下载apktool1.4.3.tar.bz2  和 apktool-install-windows-r04-brut1.tar.bz2 

   3).解压apktool-install-windows-r04-brut1.tar.bz2到任意文件夹,然后解压apktool1.4.3.tar.bz2,把apktool.jar拷贝至apktool-install-windows-r04-brut1.tar.bz2解压所在的文件夹下,此时文件下有aapt.exe、apktool.bat及apktool.jar三个应用。 

   4).点击开始菜单,运行,输入CMD回车,用cd命令转到刚刚解压的D:\My Documents\Desktop\apktool-install-windows-r04-brut1所在的文件夹,输入apktool,出现如下命令即说明安装成功(以下信息,即apktool使用命令)。 

D:\My Documents\Desktop\apktool-install-windows-r04-brut1> apktool  

Java代码   收藏代码
  1. Apktool v1.4.3 - a tool for reengineering Android apk files  
  2. Copyright 2010 Ryszard Wi?niewski <brut.alll@gmail.com>  
  3. Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)  
  4.   
  5. Usage: apktool [-q|--quiet OR -v|--verbose] COMMAND [...]  
  6.   
  7. COMMANDs are:  
  8.   
  9.     d[ecode] [OPTS] <file.apk> [<dir>]  
  10.         Decode <file.apk> to <dir>.  
  11.   
  12.         OPTS:  
  13.   
  14.         -s, --no-src  
  15.             Do not decode sources.  
  16.         -r, --no-res  
  17.             Do not decode resources.  
  18.         -d, --debug  
  19.             Decode in debug mode. Check project page for more info.  
  20.         -f, --force  
  21.             Force delete destination directory.  
  22.         -t <tag>, --frame-tag <tag>  
  23.             Try to use framework files tagged by <tag>.  
  24.         --keep-broken-res  
  25.             Use if there was an error and some resources were dropped, e.g.:  
  26.             "Invalid config flags detected. Dropping resources", but you  
  27.             want to decode them anyway, even with errors. You will have to  
  28.             fix them manually before building.  
  29.     b[uild] [OPTS] [<app_path>] [<out_file>]  
  30.         Build an apk from already decoded application located in <app_path>.  
  31.   
  32.         It will automatically detect, whether files was changed and perform  
  33.         needed steps only.  
  34.   
  35.         If you omit <app_path> then current directory will be used.  
  36.         If you omit <out_file> then <app_path>/dist/<name_of_original.apk>  
  37.         will be used.  
  38.   
  39.         OPTS:  
  40.   
  41.         -f, --force-all  
  42.             Skip changes detection and build all files.  
  43.         -d, --debug  
  44.             Build in debug mode. Check project page for more info.  
  45.   
  46.     if|install-framework <framework.apk> [<tag>]  
  47.         Install framework file to your system.  
  48.   
  49. For additional info, see: http://code.google.com/p/android-apktool/  



2、使用 

  1).解压APK 
D:\My Documents\Desktop\apktool-install-windows-r04-brut1> apktool d F:\document\APK\PushAd.apk F:\document\app  
源文件:F:\document\APK\PushAd.apk 
解压目录:F:\document\app 
Java代码   收藏代码
  1. I: Baksmaling...  
  2. I: Loading resource table...  
  3. I: Loaded.  
  4. I: Loading resource table from file: D:\My Documents\apktool\framework\1.apk  
  5. I: Loaded.  
  6. I: Decoding file-resources...  
  7. I: Decoding values*/* XMLs...  
  8. I: Done.  
  9. I: Copying assets and libs...  

使用notepad++
现在就是去广告的步骤,简单说下广告,APK广告供应商有 Admob和Google Ads
所以我们要找的就是admob.com和个google.com 也可以搜索单个关键字
点击快捷键ctrl+f 点击上方标签文件查找, 填写查找目标,选择查找目录, 也就是刚才你反编译后生成的文件夹, 选择匹配大小写和查找模式

我们将http://开头的字符串改成0.0.0.0或者127.1.1.1等无效的ip。使广告源无法访问。改完记得保存文件.如果是非IP地址,那么将字符串该乱,例如google.com改成a.com 要提醒的是改的时候"http://r.admob.com/ad_source.php" 把中间的地址改成"0.0.0.0",即 " " 符号不要删掉! 

  2).打包APK 
D:\My Documents\Desktop\apktool-install-windows-r04-brut1>apktool b F:\document\app F:\\document\\app.apk 
源文件:F:\\document\\app 
打包目录:F:\document\app.apk 

Java代码   收藏代码
  1. I: Checking whether sources has changed...  
  2. I: Smaling...  
  3. I: Checking whether resources has changed...  
  4. I: Building resources...  
  5. I: Building apk file...  

3)签名

java -jar signapk.jar testkey.x509.pem testkey.pk8 xxx1.apk xxx.apk

注意要在放signapk.jar testkey.x509.pem testkey.pk8 目录下运行,签名。


所用工具已打包:http://download.csdn.net/detail/yf210yf/5968427


另:

使用APKtool回编译APK,出现错误如下:
    Exception in thread "main" org.yaml.snakeyaml.error.YAMLException: java.nio.char
    set.MalformedInputException: Input length = 1
        at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:200)
        at org.yaml.snakeyaml.reader.StreamReader.(StreamReader.java:60)
        at org.yaml.snakeyaml.Yaml.load(Yaml.java:412)
        at brut.androlib.Androlib.readMetaFile(Androlib.java:162)
        at brut.androlib.Androlib.build(Androlib.java:183)
        at brut.androlib.Androlib.build(Androlib.java:176)
        at brut.apktool.Main.cmdBuild(Main.java:218)
        at brut.apktool.Main.main(Main.java:74)
   Caused by: java.nio.charset.MalformedInputException: Input length = 1
        at java.nio.charset.CoderResult.throwException(CoderResult.java:277)
        at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:338)
        at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:177)
        at java.io.InputStreamReader.read(InputStreamReader.java:184)
        at org.yaml.snakeyaml.reader.UnicodeReader.read(UnicodeReader.java:123)
        at java.io.Reader.read(Reader.java:140)
        at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:184)
        ... 7 more
     网上查了查没有相关的解决方法,倒是有一位对MalformedInputException这个错误本身进行了解释,大致就是中文转换这块出了问题,好像是“半个汉字”的问题。
     软件里中文还不少,因为smali文件已经成功的转为dex文件了,所以怀疑在xml文件中有问题。大致看了一遍感觉没用啥问题,而且xml文件有问题的话应该会报一个详细错误指出是哪个文件出错了。这样就很迷茫了,程序文件没有错误,那错误是怎么来的?
     这时突然看到apktool.yml这个文件,这是反编译apk时新建的文件,删掉这个文件就无法回编译,说明回编译时是用到了这个文件。内容很简单,其中有一个apkFileName: ************.apk,这里文件名是原apk的文件名,是中文的。感觉眼前一亮,会不会是这里出问题了。于是把文件名改成英文,又把整个文件夹也改成英文,回编译成功!
     后来又经过试验发现,不需要更改文件夹名字,只要把apkFileName: ************.apk这里更改就可以了,回编译后apk的名字跟文件夹名字是一样的,也就是说这个apkFileName: ************.apk好像没有什么用处!! 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值