优化 Android 应用的字节码优化器

Facebook 开源的字节码优化器,它提供了一个框架,可用来读取、写入和分析 .dex 文件,并使用这个框架进行一系列的优化处理来改进字节码。经过 ReDex 优化后的 APK 会比其源文件更小且更快。优化 Android 应用的字节码优化器

配置 ReDex

ReDex 可以配置为运行不同的优化或更改现有优化的行为。虽然这并不总是必要的,但能够调整设置以获得最佳结果会很有帮助。

一个简单的例子

配置的起点是使用类似于嵌入到二进制文件中的默认配置的配置 redex。可以在 config/default.config 中找到此配置。

{
"redex" : {
  "passes" : [
    "ReBindRefsPass",
    "BridgeSynthInlinePass",
    "FinalInlinePassV2",
    "DelSuperPass",
    "SingleImplPass",
    "MethodInlinePass",
    "StaticReloPassV2",
    "RemoveEmptyClassesPass",
    "ShortenSrcStringsPass",
    "RegAllocPass"
  ]
}
}

将此文件命名为 default.config,并使用 redex 它调用:

% redex.py -c default.config -o tmp/output.apk input.apk

选择优化过程

更改 ReDex 运行的优化集很容易;只需从 redex.passes 列表中添加(或删除)pass 名称即可。假设在调试某些内容时删除 ShortenSrcStrings 优化。只需使用这个配置:

{
"redex" : {
  "passes" : [
    "ReBindRefsPass",
    "BridgeSynthInlinePass",
    "FinalInlinePass",
    "DelSuperPass",
    "SingleImplPass",
    "MethodInlinePass",
    "RemoveEmptyClassesPass",
    "RegAllocPass"
  ]
}
}

配置优化行为

每个优化过程都有一些特定于该过程的可配置参数。这些通常是阻止列表(或允许列表),指示优化应保留哪些代码(对于阻止列表)或应优化哪些代码(对于允许列表)。

"redex" : {
  "passes" : [
    ShortenSrcStringsPass,
    "RegAllocPass"
  ]
},
"ShortenSrcStringsPass" : {
  "filename_mappings" : "/tmp/filename_mappings.txt"
}

用法

基本用法

要使用 ReDex,首先构建您的应用程序并找到它的 APK。那么最简单的调用就是:

[python3] redex.py path/to/your.apk -o path/to/output.apk

更完整的调用:

  • 默认配置设置 config/default.config
  • 访问 Android SDK 工具
[python3] redex.py -c default.config 
  --android-sdk-path path/to/android/sdk 
  path/to/your.apk -o path/to/output.apk

完整的选项集可以通过以下方式找到

[python3] redex.py --help

追踪

如果想要有关每次传递的一些统计信息,可以打开跟踪:

export TRACE=1

对于 TRACE(X, Y, msg)要记录的代码中的语句,类别 X 必须具有级别 Y 或更高级别:

export TRACE=X:1,Y:2,Z:3

跟踪的输出也可以重定向到带有变量的文件 TRACEFILE :

export TRACEFILE=/path/to/trace.txt

安装

mac

需要安装了命令行工具的 Xcode。要获取命令行工具,请使用:

xcode-select --install

使用自制程序安装依赖项:

brew install autoconf automake libtool python3
brew install boost jsoncpp

brew install protobuf 还需要 App Bundle 支持。

下载、构建和安装

  • GitHub 获取 ReDex:
git clone https://github.com/facebook/redex.git
cd redex

现在,使用 autoconf 和 make 构建 ReDex。

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

或者,要使 protobuf 支持 App Bundle,请使用:

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

传送门

开源协议:MIT license

开源地址:https://github.com/facebook/redex

项目合集:https://github.com/OpenTechCol/OpenTechCol

-END-


原文始发于微信公众号(开源技术专栏):优化 Android 应用的字节码优化器

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/155204.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!