Android反编译修改apk并重新打包

        Apktool 是反编译Apk的第三方工具,它可以反编译资源,并在修改之后重新生成Apk

        注意:apktool 依赖 Java1.8。请使用 java -version 查看,是否为1.8或更高版本。

1. 使用apktool.jar反编译解包

将需要编译的apk和apktool.jar放到同一个文件夹下

在cmd终端,cd到此目录下,输入以下命令:

#
# test.apk: 表示反编译的apk
# out: 表示反编译后资源存放目录
#
java -jar apktool.jar d -f test.apk -o out

执行后当前目录下生成 out 文件夹存放反编译后的资源文件

2. 修改反编译apk信息

现在可以修改 out 里面的信息,修改应用版本号只需要修改apktool.yml即可,apktool.yml文件中找到versionCode和versionName,修改对应的值保存即可

Android反编译修改apk并重新打包_第1张图片

修改应用名只需要修改res/values/strings.xml文件中app_name属性对应的值即可

Android反编译修改apk并重新打包_第2张图片

修改应用图标只需要替换res/mipmap-xxx目录下对应的图标

Android反编译修改apk并重新打包_第3张图片

修改包名需要修改多个地方,最难修改的部分就是对应java代码的smali文件夹,假设将com.demo.test修改成com.demo1.test1,需要修改以下内容:

  •    AndroidManifest.xml 中所有com.demo.test替换成com.demo1.test1
  •    smali/com/demo/test 目录重命名为 smali/com/demo1/test1
  •    遍历 smali 目录下所有文件,将文件中所有com.demo.test替换成com.demo1.test1
  •    遍历 smali 目录下所有文件,将文件中所有com/demo/test替换成com/demo1/test1

3:通过修改后的文件重新回编成apk文件

 再使用下面命令将我们的out文件夹重新编译成apk文件,也就是命令中的modify.apk

#
# modify.apk: 新生成的apk文件(未签名合对齐)
# out: 表示将out文件夹编译成apk
#
java -jar apktool.jar b -o modify.apk out

Android反编译修改apk并重新打包_第4张图片

4:对新的apk文件进行重签名以及内存对齐 

将使用 jarsigner 工具进行签名,jarsigner是JDK提供的对jar包签名通用工具(位于jdk/bin/目录)

将签名用的签名文件 test.keystore 放入当前文件夹,使用下面命令对apk签名

#
# test.keystore: 给apk签名用的签名文件
# 123456:签名文件的密码
# modify_signed.apk: 签名后生成的apk文件
# modify.apk: 指定需要签名的apk文件
# testalias: 签名文件的别名
#
jarsigner -verbose -keystore test.keystore -storepass 123456 -signedjar modify_signed.apk modify.apk testalias

Android反编译修改apk并重新打包_第5张图片

将使用 zipalign 工具进行内存对齐,zipalign是对zip包对齐的工具(位于AndroidSDK/build-tools/SDK版本/目录),使APK包内未压缩的数据有序排列对齐,减少APP运行时内存消耗

将 zipalign 拷贝放入当前文件夹,使用下面命令对 apk 进行内存对齐

#
# 对apk进行4字节对齐
#  
# modify_signed.apk: 需要内存对齐的apk文件
# modify_signed_aligned.apk: 对齐后生成的apk文件
#
zipalign -v 4 modify_signed.apk modify_signed_aligned.apk

Android反编译修改apk并重新打包_第6张图片

 最终生成的modify_signed_aligned.apk就是我们最终要用的apk文件

你可能感兴趣的:(android,java)