一. 配置环境(MacOS)
xcode-select --install
brew install autoconf automake libtool python3
brew install boost jsoncpp
二. 安装Redex
方式一: Homebrew 有直接可体验版本,但比较老,不支持D8编译器产生的APK
brew install redex
方式二: Clone源码编译最新版本,支持D8编译器
1)git clone https://github.com/facebook/redex.git
2)安装老版本的boost, 最新版本1.70有bug,导致源码编译失败,看issue描述boost会在1.71版本修复这个bug。 1.70以后的releaes版本应该不需要安装旧版本了
PS:不要用brew install boost@1.69这种带版本号的方式安装其他版本,会导致环境路径有误,编译还是会出错。
brew uninstall boost
brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/b4de2e1ce084ec249ca61c3eff6f96617e38c081/Formula/boost.rb
3)编译源码
cd redex
autoreconf -ivf && ./configure && make
4)如果之前通过homebrew安装过redex,先卸载
brew uninstall redex
然后
sudo make install
至此,Redex应该是正确安装了。
三. 使用
1. 源码中的/config文件夹下有两个配置,可以使用defalut.config来使用一下Redex
redex /path/to/apk/ -c default.config -o path/to/output/apk/
2. 如果处理的是proguard过的apk,需要在配置文件中配置proguard的mapping文件,帮助redex识别混淆的代码
"proguard_map":"/Path/to/proguard_mapping_release.txt"
3. 可以通过-P指定一个Proguard rule, 使Redex遵循Prouard的rule防止误删类
-P common.cfg
4. 如果执行时有报错,可以根据实际情况修改default.config中的passes节点,关闭导致错误的pass配置
5. 经过Redex处理过的apk需要重新签名
1)简单debug自动签名可用--sign处理,不然无法安装
2)用-s 指定keystore文件 -s path/to/android/keystore --sign