apk解包修改后重新打包

准备工作

需要用到如下工具

  • baksmali:把dex文件转换成smali文件的工具。
  • smali:把smali文件转换成为dex文件的工具。

smali下载链接

1. 使用apktool

解包

可以见我之前一篇:apktool,dex2jar,jd-gui简单使用
以HelloWorld.apk包为例,先解包
apk解包修改后重新打包_第1张图片

修改源码或者替换资源

需要了解一点smali文件知识。

重新打包

//打包成功会在[路径]所在文件夹下新建dist文件,生成apk
apktool b [路径]

以HelloWorld.apk包为例,命令提示行

E:\app>apktool b HelloWorld

apk解包修改后重新打包_第2张图片

签名

需要重新签名,哪怕解包之前已经签过名。

使用smali工具

其实,apktool里面就有smali工具,这种方法和使用apktool其实没很大的不同。

a.修改文件后缀并解压

b.使用baksmali工具将classes.dex转为smali文件

切换到baksmali.jar目录,键入

//执行过后会根据classes.dex生成dexout文件夹
java -jar baksmali-2.4.0.jar d classes.dex -o dexout

apk解包修改后重新打包_第3张图片

c.使用smali工具把smali文件转为dex文件

修改smali文件之后,使用smali工具把smali文件转为dex文件

E:\app>java -jar smali-2.4.0.jar assemble -o classes_new.dex dexout

apk解包修改后重新打包_第4张图片
注意事项:2.2之前的老版本可以不加assemble,2.2之后不加会报错

Exception in thread "main" com.beust.jcommander.MissingCommandException: Expected a command, got -o
        at com.beust.jcommander.JCommander.parseValues(JCommander.java:725)
        at com.beust.jcommander.JCommander.parse(JCommander.java:304)
        at com.beust.jcommander.JCommander.parse(JCommander.java:287)
        at org.jf.smali.Main.main(Main.java:87)

d.替换dex文件,替换资源,生成压缩文件并修改后缀

e.用签名工具对apk进行签名

Thanks

https://blog.csdn.net/yhsnihao/article/details/88705175

你可能感兴趣的:(Android,smali,解包打包)