写点什么

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:531976

评论 1 条评论

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

ObserverPattern-观察者模式

梁歪歪 ♚

设计模式

InfoQ 极客传媒 15 周年庆征文|深入理解 ELK 中 Logstash 的底层原理 + 填坑指南

悟空聊架构

运维 Logstash ELK 6月月更 InfoQ极客传媒15周年庆

科技成就伟大游戏 | 2022 亚马逊云科技游戏开发者大会

亚马逊云科技 (Amazon Web Services)

开发者 亚马逊云

安势信息加入Linux基金会OpenChain项目,助力软件供应链安全

安势信息

Linux 开源 DevSecOps SCA 开源软件

【愚公系列】2022年06月 二十三种设计模式(十九)-观察者模式(Observer Pattern)

愚公搬代码

6月月更

Fabric.js 圆形笔刷

德育处主任

canvas 前端可视化 Fabric.js 6月月更 前端画板

静态路由,YYDS

wljslmz

网络工程师 6月月更 静态路由 路由协议

应用实践|Lifewit 数据平台基于Apache Doris的建设实践

SelectDB

数据库 数据仓库 apache doris SelectDB

StrategyPattern-策略模式

梁歪歪 ♚

设计模式

Django API 开发:Todo 应用的 React 前端

宇宙之一粟

django React API 6月月更

深入剖析 | HeartBeat方案的标准设计

九叔(高翔龙)

架构 dubbo 源码解析 HeartBeat 心跳设计

2022 核心服务动手训练营

亚马逊云科技 (Amazon Web Services)

Amazon 亚马逊云

MixNet解析以及pytorch源码

AI浩

人工智能 6月月更

云图说丨应用宕机怎么办?MAS帮您实现业务无缝切换

华为云开发者联盟

云计算 MAS 宕机 多云高可用服务

TemplateMethodPattern-模板方法模式

梁歪歪 ♚

设计模式

水果FL Studio最新20.9中文破解版下载

茶色酒

水果FL Studio

王者荣耀商城异地多活架构设计

踩着太阳看日出

架构训练营

换个角度带你学C语言的基本数据类型

华为云开发者联盟

开发 C语言 数据类型位数

字节跳动一站式数据治理解决方案及平台架构

字节跳动数据平台

数据治理 元数据

常遇到读多写少,教你用ReadWriteLock实现一个通用的缓存中心

华为云开发者联盟

缓存 高并发 开发 ReadWriteLock

对不起,我错了,这代码不好写

捉虫大师

Java Go sentinel 6月月更

磁盘I/O性能测试工具

穿过生命散发芬芳

6月月更 磁盘测试工具

ConcurrentLinkedQueue

急需上岸的小谢

6月月更

linux之同时监控多个日志文件变化

入门小站

Linux

对话ACE第三期:数据库技术生态应如何构建

OceanBase 数据库

oceanbase

在线HTML转PERL工具

入门小站

工具

Agora Web UIKit:快速构建视频通话或直播

devpoint

React 直播技术 视频通话

在线数字转成人民币大写

入门小站

工具

彰显个性│博客园的自定义主题

主题 可视化看板 6月月更

leetcode 547. Number of Provinces 省份数量(中等)

okokabcd

LeetCode 搜索

天猫精灵的自定义语音技能创建流程

汪子熙

人工智能 机器学习 机器人 机器人流程自动化 6月月更

Android Studio 3.3 Beta提供了新的Android代码压缩器R8_大前端_Sergio De Simone_InfoQ精选文章