博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android Studio 3.3 Beta提供了新的Android代码压缩器R8
阅读量:6984 次
发布时间:2019-06-27

本文共 1286 字,大约阅读时间需要 4 分钟。

摘要: 在将D8作为其新的Dalvik编译器之后,谷歌已经开始研发新的代码压缩器R8,在Android Studio 3.3 beta版本上它已经可以使用了。R8承诺用更少的时间交付更小的APK文件。

在将D8作为其新的Dalvik编译器之后,谷歌已经开始研发新的代码压缩器(shrinker)R8,在版本上它已经可以使用了。R8承诺用更少的时间交付更小的Android应用文件(Android applicatin package,APK)。

R8会一次性完成压缩、脱语法糖并将应用转换为DEX格式( 的过程。R8能够优化Java字节码,使其变得更小更高效,同时还会移除所有未使用的类、字段、方法和属性。它还会将所有程序的名称变短,实现对它们的混淆,另外还会让可执行文件变得更小。按照谷歌的基准测试,使用R8能够大幅度减少处理时间,它所耗费的时间大约是当前的Android压缩器Proguard的一半。在APK(或DEX)文件大小方面,优势并不明显。尽管如此,R8还是成功地将谷歌用作基准测试的Santa Tracker应用的最终APK文件减少了几百KB。

在特性方面,谷歌还没有提供R8与Proguard之间对比的技术细节。前段时间,Proguard的创建者GuardSquare提供了这两款产品的对比,这项对比是基于对R8源码的分析以及它们自己的测试套件进行的。在GuardSquare的对比中,R8对反射的支持有限;对字符串、资源文件以及资源文件名中的类名混淆支持有限;没有标准的内部类重命名。目前尚不清楚在GuardSquare的报告之后,R8是否有新的进展来克服这些限制。

R8将代码转换成一个中间表述形式,并会执行一个静态单一赋值(static single assignment,SSA)分析,在分析方法体时,这是一种标准的方式。Proguard会在整个代码库进行局部运算(partial evaluation),这能够进一步看到代码的动态行为。

R8和Proguard之间的主要区别似乎在于R8是一个一次性(one-pass)的优化器,而Proguard可以在多个过程中优化代码——对于Android构建,默认情况下是5个过程。通常情况下,当前执行的优化过程会为后续的优化创造新的机会。在这方面,一个典型的例子就是日志语句的优化,在连续的优化过程中,可以删除仅在这些日志语句中使用的变量。

R8依然是可选的,你可以在gradle.properties文件中通过如下的配置启用它:

android.enableR8=true

R8提供了更高级的选项,也就是所谓的“完整模式(full mode)”,它会带来更多的优化,而它的代价是牺牲对Proguard的兼容性。你可以通过如下的配置启用完整模式:

android.enableR8.fullMode=true

因为R8依然处于beta阶段,所以相对于Proguard的效果可能会有一定的差异。 不过,对开发人员来说最重要的似乎是R8在运行时间上的巨大改进,在文件大小方面的效果似乎比较有限。

查看英文原文:

转载地址:http://qqtpl.baihongyu.com/

你可能感兴趣的文章
IBM X系列服务器IMM日志采集
查看>>
实验三 静态路由、默认路由配置
查看>>
mysql 查看导出数据字典
查看>>
linux命令--cp
查看>>
到底怎么样才叫看书?
查看>>
python 将ipv4的格式转换
查看>>
C语言宏的副作用的简单实例
查看>>
关于C语言结构体对齐的学习
查看>>
富文本框
查看>>
windows下安装rabbitMQ
查看>>
20个优秀的移动(iPhone)网站设计案例
查看>>
week04_python函数返回值、作用域
查看>>
CentOS 6.3安装Nginx开启目录浏览、下载功能
查看>>
oracle登陆认证方式
查看>>
FMDB/SQLCipher数据库管理
查看>>
cocos_python
查看>>
关于安装oracle 11G R2 for Windows X64问题
查看>>
springmvc 重定向传递参数
查看>>
tomcat实现session集群及tomcat+memcached共享session存储(四)
查看>>
线性时间排序--桶排
查看>>