美文网首页
Redex - Android Dex文件优化库

Redex - Android Dex文件优化库

作者: From64KB | 来源:发表于2017-10-20 20:01 被阅读159次

    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文件优化库

          本文链接:https://www.haomeiwen.com/subject/cwyvuxtx.html