通过反编译 apk,获取一些好看的素材,并有可能学习到大佬们优秀的代码🐶
准备工作
- Java 环境
- 反编译工具
- 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 就重新打包好了。