Redex - Android Dex文件优化库

ReDex是一个由Facebook开发的Android bytecode(dex)优化库。它提供了一个读、写和分析.dex文件的框架,并且可以对dex文件进行优化。经过ReDex优化过的APK文件通常会体积更小,运行更快。

添加依赖

Mac OS X

安装Xcode命令行工具:

xcode-select --install

使用Homebrew安装Redex:

brew install autoconf automake libtool python3
brew install boost double-conversion gflags glog libevent jsoncpp

Ubuntu 14.04 LTS (64-bit)

sudo apt-get install \
    g++ \
    automake \
    autoconf \
    autoconf-archive \
    libtool \
    libboost-all-dev \
    libevent-dev \
    libdouble-conversion-dev \
    libgoogle-glog-dev \
    libgflags-dev \
    liblz4-dev \
    liblzma-dev \
    libsnappy-dev \
    make \
    zlib1g-dev \
    binutils-dev \
    libjemalloc-dev \
    libiberty-dev \
    libjsoncpp-dev

下载、编译和安装

从Github下载ReDex:

git clone https://github.com/facebook/redex.git
cd redex

使用自带的配置编译并安装Redex

autoreconf -ivf && ./configure && make
sudo make install

Test

这一步是可选的。可以通过预设的脚本下载单元测试功能:

./test/setup.sh
cd test
make check

使用方法

运行下面的代码:

redex path/to/your.apk -o path/to/output.apk

这里的your.apk是编译打包过的Release版本,没有意外的话就会得到output.apk。但是这里得到的apk是没有签名的,这时安装会出现My app fails to install with Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]错误,你需要对apk重新签名。
ReDex也提供了签名的功能,如果只是想用debug key签名的话,命令如下:

redex --sign [ ... arguments ...]

如果想要用指定的Key签名的话,输入以下命令:

--sign Sign the apk after optimizing it
-s [KEYSTORE], --keystore [KEYSTORE]
-a [KEYALIAS], --keyalias [KEYALIAS]
-p [KEYPASS], --keypass [KEYPASS]

和ProGuard有什么不同?

简而言之ProGuard是从.class文件到.dex文件的优化,而ReDex是从.dex文件到.dex文件的优化。ProGuard和ReDex各有优势,官方的建议是两者都要使用。官方提供的优化数据表明,对比只使用ProGuard的APK减少了25%的体积和冷启动时间。(我手头的实测数据比较尴尬,13M多的APK只减少了0.03MB,冷启动时间没有明显变化
Facebook官方并没有对使用DexGuard给出优化的建议和数据,并且也没有支持DexGuard的计划。

常见错误

I’m getting “Couldn’t find zipalign. See README.md to resolve this”

zipalign是Android SDK提供的优化工具,需要告诉ReDex Android SDK的路径。例如:SDK的路径是:/path/to/android/sdk,命令如下:

ANDROID_SDK=/path/to/android/sdk redex [... arguments ...]

当然也可以把zipalign配置到环境变量里面:

PATH=/path/to/android/sdk/build-tools/xx.y.zz:$PATH redex [... arguments ...]

My app fails to install with Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]

这是没有签名造成的,详细的解决方案上文有提供。

详细原理相关的文章,由于时间有限就不在这里提供了。如各位大佬有需求,以后更新。

你可能感兴趣的:(Redex - Android Dex文件优化库)