apk反编译学习(一)
昨天因为公司同事给了一个国外apk包,希望我修改一下其中的一些功能与图标,然后做出自己的apk包,觉得这是一种新的学习,可以记下来。好了,闲话少说。
目的:对apk包进行二次加工
工具:apktool
需要环境:jdk
学习步骤:
因为需要修改功能,所以需要反编译。如果仅仅修改图标的话,可以将apk文件改变后缀为zip,然后用winRAR打开,改变其中想要修改的图标即可。注意在修改图标的时候,不要解压zip包,而且防止图片时,选择存储方式,不要选择压缩方式。
1.工具下载
发生错误:
刚开始在百度搜索apktool下载,然后搜索到很多下载的地方,随便进入一个地方,下载 apktool zip文件,经过解压之后,因为电脑本身已经安装过jdk,所以直接在dos下使用。但是发现无法反编译成功。错误如下:
Exception in thread "main" brut.androlib.AndrolibException: Could not decode arsc file
at
brut.androlib.res.decoder.ARSCDecoder.decode(ARSCDecoder.java:56)
at
brut.androlib.res.AndrolibResources.getResPackagesFromApk(AndrolibResources.java:491)
at
brut.androlib.res.AndrolibResources.loadMainPkg(AndrolibResources.jav
解决办法:
经过相关查找搜索之后发现,这种问题是因为搜索下载到的apktool版本过低,所以无法解析高版本sdk打出来的apk包,于是去了guthub上提供的一个下载地址
http://ibotpeaches.github.io/Apktool/install/
在其中可以下载最新版本2.X ,下载步骤都已经说得很具体。简单说一下:1.确定电脑安装jdk,且在环境变量中注册,并且jdk版本不得低于1.7;如果没有安装jdk,可从网上搜索安装jdk方 法。 2.因为用的Windows,所以只介绍Windows下载方法。
按照步骤先右键点击 “wrapper script”字样,选择保存链接,保存文件为apktool.bat。然后现在apktool-2,下载完成后将下载后的apktool jar文件命名为apktool。最后将apktool.bat文件和apktool.jar文件共同放在一个文件夹下。
此时,apktool环境配置已经完成。
如图所示

2.使用步骤
先将要进行反编译的apk文件放在与apktool.jar文件的同级文件夹下。此处假如我要反编译的apk文件我 a.apk,我的文件夹路径为G:\now\反编译\apktool\apktool6
然后开始进行反编译。
先进入dos窗口,具体步骤为 点击电脑上 windows + R 弹出运行窗口,在窗口中输入cmd,然后点确定进入dos窗口。在命令行先输入g:,点确定,然后输入cd G:\now\反编译\apktool\apktool6,进入apktool6文件夹下。
(1) 在电脑中搭建框架 命令如下
apktool if a.apl
弹出在c盘用户目录下有个127.apk文件,不用管这个。
效果如下

(2)进行反编译 命令如下
apktool d a.apk
此时会在同级目录下产生于apk同名的文件夹
效果如下

在apk同名文件夹中,smail文件夹里防止的是apk包中的dex文件,也就是之前的java文件,但是此时文件为smail格式,如果需要查看smail文件,可以下载smail2java工具直接打开apk文件进行修改。res文件夹下放置的就是xml文件,因为我本次的功能是修改显示的文字,以及点击需要打开的电话号码,所以直接在该文件夹上找到value文件夹,打开string文件,在其中修改自己想要的东西即可。修改后保存即可。
(3) 进行回编译 命令如下
apktool b a
此时会在之前的同名文件夹下多出两个文件的,分别是dist和build。dist文件夹下放置的是回编译成的apk包,需要注意的是此时的apk包还未进行签名,需要进行签名才能在手机上运行。build文件下是未参与回编译的文件。
效果如下

(4) apk包签名
此时也到最后一步了,对dist文件夹下的apk文件进行签名。至于如何签名,在其他博客中会提出。
好了,到了这里,apk反编译也就结束输了。
浙公网安备 33010602011771号