写点什么

Android Studio 3.3 Beta 提供了新的 Android 代码压缩器 R8

  • 2018 年 12 月 04 日
  • 本文字数:1186 字

    阅读完需:约 4 分钟

Android Studio 3.3 Beta提供了新的Android代码压缩器R8

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


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


R8 会一次性完成压缩、脱语法糖并将应用转换为 DEX 格式(https://source.android.com/devices/tech/dalvik/dex-format) 的过程。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 在运行时间上的巨大改进,在文件大小方面的效果似乎比较有限。


查看英文原文:


https://www.infoq.com/news/2018/11/r8-shrinker-android-studio-3.3


2018 年 12 月 04 日 11:531505

评论 1 条评论

发布
暂无评论
发现更多内容

个人信息严控的时代,AI如何实现“安全”的智能营销?

星环科技

大数据

安卓驱动开发!系统盘点Android开发者必须掌握的知识点,搞懂这些直接来阿里入职

欢喜学安卓

android 程序员 面试 移动开发

十年运维经验总结出的智能运维系统落地方案

小术晓术

人工智能 运维 企业信息化 运维自动化 信息化

阿里Java性能优化最佳实践指南全新发布!(编程、多线程、JVM、设计模式、数据库优化全都有)

程序员小毕

Java 面试 性能优化 JVM 数据库调优

Maintainer 聚光灯:KubeEdge 和 Volcano 的王泽锋

华为云原生团队

开源 边缘计算 华为云 批量计算

Android JNI模板与读取系统属性笔记

Changing Lin

android

SpringSecurity基础——权限管理

程序员小毕

Java 源码 程序员 安全 springsecurity

try-catch-finally中的4个大坑,不小心就栽进去了!

王磊

Java 异常处理 try finally

【Mysql-InnoDB 系列】幻读、死锁与事务调度

程序员架构进阶

MySQL 架构 innodb 事务 28天写作

不明白线程池?那看看这篇,附10道面试题

田维常

线程池

Flink + Iceberg 全场景实时数仓的建设实践

Apache Flink

flink

为什么这么一道iOS小题目,这么多面试者搞不定?

Geek_24a3d9

面试 技术交流 ios开发

阿里巴巴正式推出2021年金三银四1000道Java工程师面试题手册(含答案)

Java架构追梦

Java 阿里巴巴 面试 架构师 金三银四

“删库跑路”,这背后的数据安全你悟到了吗?

CloudQuery社区

数据库 大数据 数据安全 数据库管理工具 删库

数学,离一个程序员有多近?

小傅哥

程序员 面试

技术资讯 | 百度智能云拿下MTCS最高安全评级

百度开发者中心

行业资讯

程序员必知的几种限流方案

Java架构师迁哥

IntelliJ IDEA 20周岁啦,为期2天的周年庆活动对开发者免费开放

YourBatman

eclipse ide IDEA IntelliJ IDEA

首发10万字Mysql实战文档,几乎涵盖你需要的所有操作|超清PDF

Crud的程序员

MySQL 数据库

MySQL 8.0.23中复制架构从节点自动故障转移

程序员小毕

Java MySQL 架构 高可用 MySQL优化

百度信息流和搜索业务中的弹性近线计算探索与应用 | 文末送福利

百度Geek说

Java 前端 算法工程师 技术宅

「产品经理训练营」第三章作业

Sòrγy_じò ぴé

产品经理训练营 极客大学产品经理训练营 产品训练营

DjangoRestFramework框架简介及基本使用

行者AI

RESTful

Elastic开源协议改了,用户怎么办?

星环科技

七面阿里成功offer,入职就是25k*16薪,还原我的大厂面经

Java 程序员 面试

android开发面试准备!Android高级工程师进阶学习,已开源

欢喜学安卓

android 程序员 面试 移动开发

深扒!用6部分讲完Java性能调优:多线程+设计模式+数据库

996小迁

数据库 JVM 设计模式 多线程 性能调优

IDEA Malformed argument has embedded quote

会飞的猪

IDEA

Spring Security 实战干货:分布式对象SharedObject

Java spring 分布式

我国首个自主可控区块链软硬件技术体系发布

Geek_987812

区块链

【CSS】不规则阴影

学习委员

css3 html/css CSS小技巧 28天写作 纯CSS

Flutter 自动化测试

Flutter 自动化测试

Android Studio 3.3 Beta提供了新的Android代码压缩器R8-InfoQ