AS负责人说不必用Kotlin重写,但OkHttp拿Kotlin重写了一遍,就发了OkHttp 4.0!
导读
虽然 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!相关推荐
- why在重写equals时还必须重写hashcode方法
首先我们先来看下String类的源码:可以发现String是重写了Object类的equals方法的,并且也重写了hashcode方法 public boolean equals(Object anO ...
- Kotlin Jetpack 实战:01. Kotlin 基础
背景 近几年,Android 相关的新技术层出不穷.往往这个技术还没学完,下一个新技术又出来了.很多人都是一脸黑人问号?不少开发者甚至开始哀嚎:"求求你们别再创造新技术了,我们学不动了!&q ...
- 在 Android 开发中使用 Kotlin 协程 (一) -- 初识 Kotlin 协程
前言 最近在研究 Kotlin 协程,发现功能真的超级强大,很有用,而且很好学,如果你正在或计划使用 Kotlin 开发 Android,那么 Kotlin 协程你一定不能错过! 协程是什么? 我们平 ...
- 【Kotlin】IntelliJ IDEA 创建 Kotlin 项目
文章目录 IntelliJ IDEA 创建 Kotlin 项目 IntelliJ IDEA 创建 Kotlin 项目 IntelliJ IDEA 环境创建 Kotlin 项目流程 : 1 . 创建工程 ...
- 重写equals方法时必须重写hashcode方法吗
重写equals方法时必须重写hashcode 有规范: 1,当obj1.equals(obj2) 为 true 时,obj1.hashCode() == obj2.hashCode() 2,当obj ...
- java equals重写原则_java中为何重写equals时必须重写hashCode方法详解
前言 大家都知道,equals和hashcode是java.lang.Object类的两个重要的方法,在实际应用中常常需要重写这两个方法,但至于为什么重写这两个方法很多人都搞不明白. 在上一篇博文Ja ...
- php重写地址,php url地址重写
地址重写: urlRewrite: 就是: 1. 将php的地址index.php不写只写Action模块和function方法, 或者 2. php地址转变成html地址, 就是一种假的html, ...
- kotlin编写后台_在Kotlin编写图书馆的提示
kotlin编写后台 by Adam Arold 亚当·阿罗德(Adam Arold) 在Kotlin编写图书馆的提示 (Tips for Writing a Library in Kotlin) W ...
- 建议重写equals方法时也一并重写hashCode方法
Object类中有这样一段说明,意思是建议我们equals方法和hashCode方法,或者一起重写,或者一起不重写,以维护hashCode的常规协定. 什么叫hashCode的常规协定呢? 我的理解就 ...
- java -为什么重写equals(),还需要重写hashCode()?
1.先post这两个方法的基本定义: equals()的定义: 浅谈Java中的equals和==(转) hashCode()的定义: java中hashCode()方法的作用 Java中hashCo ...
最新文章
- [Bzoj1061][Noi2008]志愿者招募(费用流)
- 科大星云诗社动态20210330
- 嵌入式处理器 cisc risc_RISC-V能否“重构”芯片产业格局
- android底部导航栏_Kotlin实现底部导航栏
- DIV+CSS基础教程
- 科目三并不难 盘点科目三技巧
- Linux(Fedora21)安装google chrome浏览器
- pycharm远程调试python_使用PyCharm进行Python远程调试
- 11月17日站立会议
- Oracle技术分享系列一:Oracle数据库学习资源推荐
- 如何把一张照片的像素提高_不改变像素尺寸怎么增加图片的文件大小
- C/C++ 内存泄漏检测工具汇总
- 如何用计算机绘函数图,用计算机绘制函数图像.
- 信而泰ALPS 用户管理——网络测试仪实操
- 浏览器被劫持怎么解决?关于浏览器被劫持主页的处理方法
- 虚拟视频驱动vivi.c分析(linux-3.4.2版本)
- 王道计算机组成原理课代表 - 考研计算机 第六章 总线 究极精华总结笔记
- 织梦dedecms网站地图生成在根目录的开发教程
- 想给公司起个大气点的名字,大家帮忙啊!!!
- 视频变声音的软件有哪些?剪辑视频怎么改变声音
热门文章
- java核心技术卷一 基础知识读书笔记
- 早该知道的 7 个JavaScript 技巧[转]
- 《嵌入式Linux基础教程学习笔记一》
- object c小代码——日期篇
- Sudoku Solver
- TwoStep Cluster
- Xcode 12 引用缺失包:libstdc++.tbd libstdc++.6.tbd libstdc++.6.0.9.tbd 等
- 每天一个Linux命令(3):ls命令
- (转)机器学习入门,强烈推荐
- 关于handler的再次讨论