导读

虽然 Android Studio 的负责人 Jeffery 已经澄清,只是 Kotlin-First 而不是 Kotlin-Must,并不需要将 App 用 Kotlin 重写一遍。但是 OkHttp 已经开始用 Kotlin 重写的工作,我们来看看这次重写后带来的差异。

一. 序

在今年的 Google I/O 大会上,Google 宣布将以 Kotlin 作为 Android 开发的一级编程语言。而同天,Google 就开源了只支持 Kotlin 的 Jetpack Compose,以借此呼应这一战略。

消息一出,不少 Android 开发就担心以后是不是只能用 Kotlin 开发了。Android Studio 的负责人 Jeffery Van Gogh,立刻发文表示,"Kotlin-First" 只是表示 Kotlin 将比 Java 在 Android 中占据更重要的地位,但是并不需要将现有 Java 开发的 Android App 使用 Kotlin 重写一遍。

Jeffer 也表示,在 Android Studio 的十几万代码中,大约只有 10% 的 Kotlin 代码,也只会用 Kotlin 来编写新功能。

只是 Kotlin-First,而非 Kotlin-Must。

虽说 Google 也不建议我们将现有的 App 用 Kotlin 重写一遍,但是 OkHttp 这个 Android 下最火的网络框架开源库,已经开始着手用 Kotlin 将整个库重写一遍。

接下来我们看看这次升级的细节吧。

二. Kotlin 版的 OkHttp

Kotlin 是由 JetBrains 公司开发,与 Java 100% 互通,并且具备诸多 Java 尚不支持的新特性。就我个人的使用体验来说,Kotlin 还是非常不错的,唯一有问题的可能就是写 Kotlin 太爽了,导致在同项目中编写 Java 代码时,有那么零点几秒的恍惚。

近期 Jesse Wilson 表示,已经使用 Kotlin 语言,把 OkHttp 3.0 全部重写一遍,并将其命名为 OkHttp4。

此次升级主要是受到了 Okio 2 的启发,而 OkHttp 4 的功能和逻辑,与 OkHttp 3.0 完全一致,等于只是用 Kotlin 将之前的 Java 版本,复刻了一遍。

在仅用 Kotlin 将原项目重写一遍,带来了一些数据指标的变化,我们一起来看看。

2.1 代码量的比较

从代码行数,可以看到,Kotlin 的编写代码量在减少。

  • Java: 25,775 行
  • Kotlin:24,114 行

代码行减少了 7%,但是如果严格利用 Kotlin 的特性,类似 ConnectionSpec 这个类,可以减少 40% 的代码。

2.2 编译时间

Kotlin 的编译时间是增加了。

  • Java :2.4 秒
  • Kotlin:10.2 秒

可以看到,Kotlin 的编译速度,相较于 Java 是变慢了。这主要是因为 Kotlin 的编译器比通用 Java 编译器要慢的缘故。

2.3 二进制大小

因为编译器的差异,也将导致 Kotlin 编译后的文件,会比 Java 编译后的代码要大。

  • Java:415 KiB
  • Kotlin:670 KiB

大约大了 60%,这还是挺令人惊讶的。通过反编译可以发现,这些额外的代码,主要来自 JVM 重载、Kotlin 元数据、空检查以及伴生对象的代码。

三. 小结时刻

作为 Android 开发,现在是时候使用 Kotlin 了。在 Android 开发中,Kotlin 将比 Java 获得更重要的地位,更多的在线培训中以及官方 Demo 都会优先使用 Kotlin 做支持,而对 Java 只是 “尽量满足”,并且有一些功能,可能只提供 Kotlin 的支持,例如本次开源的 Jetpack Compose。

从 OkHttp 的重写这个事情上来看,Kotlin 编写的代码,虽然编译速度更慢、编译的二进制文件更大,但是我们开发人员编写的代码将更少。

这些也符合趋势,程序员做的更少,机器做的更多,不过我相信 Google 在后期应该也会针对这些情况做一些优化,以达到满足生产的需求。

reference:

  • okhttp-issues
  • metrics-for-okhttps-kotlin-upgrade

本文对你有帮助吗?留言、转发、点好看是最大的支持,谢谢!


公众号后台回复成长『成长』,将会得到我准备的学习资料,也能回复『加群』,一起学习进步;你还能回复『提问』,向我发起提问。

转载于:https://juejin.im/post/5cde3ec1e51d45105e0211f2

AS负责人说不必用Kotlin重写,但OkHttp拿Kotlin重写了一遍,就发了OkHttp 4.0!相关推荐

  1. why在重写equals时还必须重写hashcode方法

    首先我们先来看下String类的源码:可以发现String是重写了Object类的equals方法的,并且也重写了hashcode方法 public boolean equals(Object anO ...

  2. Kotlin Jetpack 实战:01. Kotlin 基础

    背景 近几年,Android 相关的新技术层出不穷.往往这个技术还没学完,下一个新技术又出来了.很多人都是一脸黑人问号?不少开发者甚至开始哀嚎:"求求你们别再创造新技术了,我们学不动了!&q ...

  3. 在 Android 开发中使用 Kotlin 协程 (一) -- 初识 Kotlin 协程

    前言 最近在研究 Kotlin 协程,发现功能真的超级强大,很有用,而且很好学,如果你正在或计划使用 Kotlin 开发 Android,那么 Kotlin 协程你一定不能错过! 协程是什么? 我们平 ...

  4. 【Kotlin】IntelliJ IDEA 创建 Kotlin 项目

    文章目录 IntelliJ IDEA 创建 Kotlin 项目 IntelliJ IDEA 创建 Kotlin 项目 IntelliJ IDEA 环境创建 Kotlin 项目流程 : 1 . 创建工程 ...

  5. 重写equals方法时必须重写hashcode方法吗

    重写equals方法时必须重写hashcode 有规范: 1,当obj1.equals(obj2) 为 true 时,obj1.hashCode() == obj2.hashCode() 2,当obj ...

  6. java equals重写原则_java中为何重写equals时必须重写hashCode方法详解

    前言 大家都知道,equals和hashcode是java.lang.Object类的两个重要的方法,在实际应用中常常需要重写这两个方法,但至于为什么重写这两个方法很多人都搞不明白. 在上一篇博文Ja ...

  7. php重写地址,php url地址重写

    地址重写: urlRewrite: 就是:  1. 将php的地址index.php不写只写Action模块和function方法, 或者 2. php地址转变成html地址, 就是一种假的html, ...

  8. kotlin编写后台_在Kotlin编写图书馆的提示

    kotlin编写后台 by Adam Arold 亚当·阿罗德(Adam Arold) 在Kotlin编写图书馆的提示 (Tips for Writing a Library in Kotlin) W ...

  9. 建议重写equals方法时也一并重写hashCode方法

    Object类中有这样一段说明,意思是建议我们equals方法和hashCode方法,或者一起重写,或者一起不重写,以维护hashCode的常规协定. 什么叫hashCode的常规协定呢? 我的理解就 ...

  10. java -为什么重写equals(),还需要重写hashCode()?

    1.先post这两个方法的基本定义: equals()的定义: 浅谈Java中的equals和==(转) hashCode()的定义: java中hashCode()方法的作用 Java中hashCo ...

最新文章

  1. [Bzoj1061][Noi2008]志愿者招募(费用流)
  2. 科大星云诗社动态20210330
  3. 嵌入式处理器 cisc risc_RISC-V能否“重构”芯片产业格局
  4. android底部导航栏_Kotlin实现底部导航栏
  5. DIV+CSS基础教程
  6. 科目三并不难 盘点科目三技巧
  7. Linux(Fedora21)安装google chrome浏览器
  8. pycharm远程调试python_使用PyCharm进行Python远程调试
  9. 11月17日站立会议
  10. Oracle技术分享系列一:Oracle数据库学习资源推荐
  11. 如何把一张照片的像素提高_不改变像素尺寸怎么增加图片的文件大小
  12. C/C++ 内存泄漏检测工具汇总
  13. 如何用计算机绘函数图,用计算机绘制函数图像.
  14. 信而泰ALPS 用户管理——网络测试仪实操
  15. 浏览器被劫持怎么解决?关于浏览器被劫持主页的处理方法
  16. 虚拟视频驱动vivi.c分析(linux-3.4.2版本)
  17. 王道计算机组成原理课代表 - 考研计算机 第六章 总线 究极精华总结笔记
  18. 织梦dedecms网站地图生成在根目录的开发教程
  19. 想给公司起个大气点的名字,大家帮忙啊!!!
  20. 视频变声音的软件有哪些?剪辑视频怎么改变声音

热门文章

  1. java核心技术卷一 基础知识读书笔记
  2. 早该知道的 7 个JavaScript 技巧[转]
  3. 《嵌入式Linux基础教程学习笔记一》
  4. object c小代码——日期篇
  5. Sudoku Solver
  6. TwoStep Cluster
  7. Xcode 12 引用缺失包:libstdc++.tbd libstdc++.6.tbd libstdc++.6.0.9.tbd 等
  8. 每天一个Linux命令(3):ls命令
  9. (转)机器学习入门,强烈推荐
  10. 关于handler的再次讨论