Redex

来源:互联网 发布:区块链雷电网络众筹 编辑:程序博客网 时间:2024/05/17 23:55

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

添加依赖

Mac OS X

安装Xcode命令行工具:

xcode-select --install

使用Homebrew安装Redex:

brew install autoconf automake libtool python3brew 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.gitcd redex

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

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

Test

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

./test/setup.shcd testmake 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]

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

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

原创粉丝点击