阿里云「飞天发布时刻」2024来啦!新产品、新特性、新能力、新方案,等你来探~ 了解详情
写点什么

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

评论 1 条评论

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

[Day31-03]-[二叉树] BST树中的众数

方勇(gopher)

LeetCode 数据结构和算法

架构实战营作业四

库尔斯

#架构实战营

关于人才的招聘的一些看法(31/100)

hackstoic

团队管理 招聘

架构训练 模块4作业

小马

「架构实战营」

Java 从一个 List 中删除 null 元素

HoneyMoose

阿里架构师花两个月时间整理出来的Java独家面试题(Java岗)

Java架构追梦

Java 程序员 后端开发

成为Java顶尖程序员之前,先过了下面问题才行

Java架构追梦

Java 后端开发 数据结构与算法

对已有系统如何开展TDD

Bruce Talk

敏捷 敏捷开发 TDD Agile

移动办公安全告急?融云 x 海泰方圆,给即时通讯加把「安全锁」

融云 RongCloud

高精度在线计时器(秒表)

入门小站

工具

手撕阿里 Spring 框架:AOP、IOC、注解、事务,带你统统拿下

Java架构追梦

Java spring 程序员

决战摸鱼之巅:将vscode撸成可局域网联机对战的moba平台

gamedilong

前端 vscode nodejs Node 摸鱼

网站开发进阶(一)Tomcat域名或IP地址访问配置详解

No Silver Bullet

tomcat 网站建设 5月月更

面试了200多个程序员,多数上来就要20K,说实话6K我都不想给

Java架构追梦

Java 后端开发 程序员面试

自己动手写 Docker 系列文章总览

Go Docker 4月月更

Gitea 的简单介绍

HoneyMoose

公司8java开发接私活被抓了,我说他最近咋这么飘

Java架构追梦

程序员 JAVA开发 java面试 后端开发

vivo X80系列高端爆款之路:火把照耀在无人区

脑极体

nginx配置系列(三)日志配置

乌龟哥哥

4月月更

GitOps指南

俞凡

DevOps gitops

不要再焦虑了,进大厂真的没你想象的那么困难

Java架构追梦

从领导喊你回去改 Bug 来说如何取消 Dio 网络请求?

岛上码农

flutter ios开发 安卓开发 4月月更 跨平台开发

在线Excel转JSON工具

入门小站

工具

C++类设计和实现的十大最佳实践

俞凡

c++ 最佳实践

Sentinel集群限流探索

艾小仙

sentinel 分布式限流 集群

linux之秘钥登录

入门小站

Linux

在 ABAP 技术栈里实施 Continuous Integration 的一些挑战

Jerry Wang

DevOps 持续集成 abap 5月月更 持续优化

四面字节跳动Java研发岗,最终拿下Offer,只有努力,方能成功,老八股了

Java架构追梦

Java MySQL 程序员 后端开发

阿里架构师耗时 176 天整理出来的 Java 独家面试题(10 万字面试总结)

Java架构追梦

程序员 java面试 后端开发

[Day31-04]-[二叉树]二叉树的堂兄弟节点

方勇(gopher)

LeetCode 数据结构和算法

pinpoint插件开发之二:从零开始新建一个插件

程序员欣宸

Java 分布式 4月月更

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