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