2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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

评论 1 条评论

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

Spring源码分析(三)Spring是如何把元素解析成BeanDefinition对象的

石臻臻的杂货铺

spring 源码 8月月更

使用 ECK 在 Kubernetes 集群中管理 Elastic Stack

Se7en

Apache DolphinScheduler 简单任务定义及复杂的跨节点传参

白鲸开源

工作流调度 海豚调度 调度器 大数据调度 任务传参

【Python | 词云】聊天记录绘制超美词云(七夕快乐 ,曾同学)

计算机魔术师

8月月更

【操作系统 | Linux】介绍与安装(虚拟机)

计算机魔术师

8月月更

C/C++模板类模板与函数模板区别,以及用法详解

CtrlX

c c++ 面向对象 模板方法 8月月更

牵手华为云,云时通SRM助力企业采购数字化升级!

创意时空

Spring源码解析(四)Spring是怎么处理BeanDefinition的?

石臻臻的杂货铺

spring 源码 8月月更

【Django | 开发】 为已有遗留系统数据库生成管理后台

计算机魔术师

8月月更

长安链RPC服务学习笔记

长安链

加速拥抱数字化,云时通打造全新数字中台!

创意时空

上了NVMe的路,才能飙起全闪存的车

白洞计划

「35分钟」开发刷题功能

小鑫同学

前端 H5 数据分析、 分页查询 开发.

React Spring实战之API以及animated 组件的运用

恒山其若陋兮

8月月更

如何正确理解Java对象创建过程,我们主要需要注意些什么问题?

PivotalCloud

一文快速上手 Nacos 注册中心+配置中心!

王磊

Java SpringCloud

直播预告 | Homebrew 作者 Max Howell:如何打造杰出的开发者工具

思码逸研发效能

开源 研发效能 开发者工具 开发工具 科技

【云原生| Docker】 部署 Django & mysql 项目

计算机魔术师

8月月更

长安链国密TLS设计和实现学习

每日一R「20」网络编程(二)

Samson

学习笔记 8月月更 ​Rust

学习 Go 语言数据结构:实现哈希表

宇宙之一粟

哈希表 8月月更

职场人的未来,GO!咱们上云办公

创意时空

乘云远航|共赢新征程,打造数字化供应链竞争力!

创意时空

长篇图解etcd核心应用场景及编码实战

字母哥哥

Java etcd #Kubernetes#

日常工作最常用6大Git命令讲解

流浪的漂流瓶

git git stash 8月月更 git命令

飞向深空:ColorOS 超算平台带来性能之变

脑极体

在线XML转HTMLTable工具

入门小站

工具

一文详解产品经理与项目经理的区别

产品海豚湾

产品经理 职业发展 项目经理 产品设计与思考 9月月更

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