写点什么

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

评论 1 条评论

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

Web前后端:如何分离,如何解耦?

华为云开发者联盟

大前端 后端 开发

开源=免费?

Learun

Spring Cloud 微服务实践(7) - 日志

xiaoboey

kafka 微服务 Spring Cloud 日志 spring cloud stream

SpringBoot-技术专题-启动原理

码界西柚

2020年秋招阿里136道Java高级岗面试题(含答案及复习资源)

Java架构之路

Java 程序员 面试 算法 编程语言

从构建小系统到架构分布式大系统,Spring Boot2的精髓全在这里了

Java架构之路

Java 程序员 面试 Spring Boot 编程语言

Python时间序列分析简介(2)

计算机与AI

Python 时间序列

架构师训练营第四周作业

郎哲158

开源数据库这么香,为什么我们还要下功夫自研?

华为云开发者联盟

数据库 开源 数据

国庆期间,我造了台计算机

yes

计算机 底层

技术实操丨SoundNet迁移学习之由声音分类到语音情感识别

华为云开发者联盟

AI 数据 语音识别

spring-boot-route(十)多数据源切换

Java旅途

Java Spring Boot

PyFlink + 区块链?揭秘行业领头企业 BTC.com 如何实现实时计算

Apache Flink

flink

程序员去外包真的不可取吗?

Java架构师迁哥

区块链教育 丨 首批区块链专业新生正式入学

CECBC

区块链技术 区块链教育

字节跳动 Flink 单点恢复功能实践

Apache Flink

flink

MySQL-技术专题-查询速度性能

码界西柚

lldb常用命令与调试技巧

iOSer

ios lldb常用命令 lldb调试技巧

Nacos-技术专题-配置中心实现

码界西柚

架构师训练营第四章 系统架构总结

郎哲158

建筑行业区块链应用场景是怎样的

CECBC

区块链 行业资讯

光大银行刘淼:基于华为云GaussDB(DWS) 数据仓库创新实践

华为云开发者联盟

数据仓库 数据 huawei

EffectiveJava读书笔记-01-对象创建与销毁

wander

读书笔记 编程开发

深入分析CRM系统对现代企业的作用

Learun

Java程序员月薪多少K才能在北上广买得起房?

Java架构之路

Java 程序员 编程语言

区块链是一个不知道要解决什么问题的解决方案吗?

CECBC

比特币 区块链 银行

31道Java核心面试题,一次性打包送给你

小Q

Java 学习 程序员 架构 面试

架构师训练营1期第三周作业

木头发芽

MySQL-技术专题-问题分析

码界西柚

互联网应用系统技术方案主要解决什么问题?

博古通今小虾米

来不及解释了,快上车!力软快速开发平台,助力企业搭乘万物互联的顺风车

Learun

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