通过反编译 apk,获取一些好看的素材,并有可能学习到大佬们优秀的代码🐶

准备工作

  1. Java 环境
  2. 反编译工具
  • Apktool:获取资源文件,提取图片文件,布局文件,还有一些 XML 的资源文件
  • dex2jar:将 APK 反编译成 Java 源码(将 classes.dex 转化为 jar 文件)
  • jd-gui:查看转换后的 jar 文件

1. 反编译

将需要反编译的 apk 与需要的反编译工具放到同一个文件目录下,cmd 中输入:

apktool.bat d -f [apk文件] [输出文件夹]
  • -f,如果目标文件夹已存在,则强制删除现有文件夹
  • -o,指定解码目标文件夹的名称(默认使用 APK 文件的名字来命名目标文件夹)
  • -s,不反编译 dex 文件,也就是说 classes.dex 文件会被保留(默认会将 dex 文件解码成 smali 文件)。
  • -r,不反编译资源文件,也就是说 resources.arsc 文件会被保留

之后打开相应文件夹,即可看到 apk 的资源文件。

apk 解压后中的 classes.dex 复制到 dex2jar.bat 所在的目录下,cmd 中输入:

d2j-dex2jar.bat classes.dex

会生成一个 jar 包,之后用 jd-gui.exe 打开即可看见里面的代码,一般没有混淆代码的都可以看到所有参数命名,如果要修改代码的话比较麻烦,这里不再讨论。

2. 重新打包

在 apktool 所在目录下,cmd 中输入:

apktool.bat b [文件夹名]

之后文件目中会新增 build 和 dist 文件夹,新打包的 apk 会保存在 dist 中

3. 签名

管理员模式运行 cmd 进入 java 目录下的 bin 文件夹 (C:\Program Files\Java\jdk1.8.0_251),输入以下命令生成 keystore 文件

keytool -genkey -alias bdk.keystore -keyalg RSA -validity 20000 -keystore bdk.keystore
  • genkey,产生证书文件
  • alias,产生别名
  • keystore,指定密钥库的 .keystore 文件中
  • keyalg,指定密钥的算法,这里指定为 RSA (非对称密钥算法)
  • validity,为证书有效天数

按提示随便输入相关信息后按 Y 确定。 将生成的 keystore 文件放到 apk 文件同一目录下输入:

jarsigner -verbose -keystore bdk.keystore [apk文件] bdk.keystore

这样 apk 就重新打包好了。