虽然 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:

github-issues

metrics-for-okhttps-kotlin-upgrade

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


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

AS负责人说不必用Kotlin重写,但OkHttp拿Kotlin重写了一遍,就发了OkHttp 4.0!的更多相关文章

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

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

  2. 重写Equals为什么要同时重写GetHashCode

    .NET程序员都知道,如果我们重写一个类的Equals方法而没有重写GetHashCode,则VS会提示警告 :“***”重写 Object.Equals(object o)但不重写 Object.G ...

  3. 【转】重写Equals为什么要同时重写GetHashCode

    .NET程序员都知道,如果我们重写一个类的Equals方法而没有重写GetHashCode,则VS会提示警告 :“***”重写 Object.Equals(object o)但不重写 Object.G ...

  4. java 重写你可以这么理解 因为 方法名和参数类型个数相同 所以这就是重写了 然后 因为是重写 所以 返回值必须相同

    java  重写你可以这么理解    因为   方法名和参数类型个数相同  所以这就是重写了    然后  因为是重写  所以  返回值必须相同

  5. 用Kotlin开发Android的Hello Kotlin!!

    1 创建新项目 android studio 新建一个项目 只有一个空MainActivity 2 安装kotlin file-seeting-plugins-install jetbrains pl ...

  6. 使用kotlinc、kotlin、java命令进行kotlin程序运行

    使用kotlinc.kotlin.java命令进行kotlin程序运行 学习了:https://www.cnblogs.com/ShaYeBlog/p/7280452.html kotlinc xxx ...

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

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

  8. 为什么重写equals()方法就必须重写hashCode()方法

    hashCode()和equals()保持一致,如果equals方法返回true,那么两个对象的hasCode()返回值必须一样.如果equals方法返回false,hashcode可以不一样,但是这 ...

  9. 一文搞懂--Java中重写equals方法为什么要重写hashcode方法?

    Java中重写equals方法为什么要重写hashcode方法? 直接看下面的例子: 首先我们只重写equals()方法 public class Test { public static void ...

  10. 9.scrapy pycharm调试小技巧,请求一次,下次直接调试,不必每次都启动整个爬虫,重新请求一整遍

    pycharm调试技巧:调试时,请求一次,下次直接调试,不必每次都启动整个爬虫,重新请求一整遍 [用法]cmd命令运行:scrapy shell 网址 第一步,cmd进行一次请求: scrapy sh ...

随机推荐

  1. 远程服务器上的weblogic项目管理(一)项目部署与更新流程

    最近接手了项目组的服务器管理工作,服务器以linux系统为主,项目则搭建在weblogic上面,也算是积累了一些远程管理服务器的心得,决定稍微整理一下: windows系统要如何方便地连接到远程服务器 ...

  2. 为什么Java中的字符串是不可变的?

    原文链接:https://www.programcreek.com/2013/04/why-string-is-immutable-in-java/ java字符串是不可变的.不可变类只是一个不能修改 ...

  3. ORACLE DATABASE 10g EXPRESS EDITION LICENSE AGREEMENT

     启动Tomcat之后出现全是英文错误: ORACLE DATABASE 10g EXPRESS EDITION LICENSE AGREEMENT To use this license, yo ...

  4. 二维码图片流转base64

    @RequestMapping(value = "/weChatImage",method = RequestMethod.GET)public Response weChatim ...

  5. Java for LeetCode 122 Best Time to Buy and Sell Stock II

    Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...

  6. AR模型脱卡,unity端实现步骤详情

    AR模型脱卡unity端实现具体步骤 AR模型脱卡的原理 利用一些unity端AR插件做AR应用.通常会有一个需求,当识别物消失的时候,将3D模型从识别物这个父物体上移除,显示在屏幕中央.那么原理就显 ...

  7. java.lang.UnsupportedClassVersionError: com/dw/Function : Unsupported major.minor version 52.0

    本地环境中有jdk7和jdk8,当把jdk8改为jdk7时,出现如下错误,是jdk版本的问题,在Properties-->JAVA Compiler-中的Compiler compliance ...

  8. 51nod 1766

    题意:给定一个树(10^5),m个询问(10^5),每次给定a,b,c,d,在区间[a,b]中选一个点,[c,d]选一个点,使得这两个点距离最大,输出最大距离. 题解:首先,我们有一个结论:对于一个集 ...

  9. PYTHON 爬虫笔记六:PyQuery库基础用法

    知识点一:PyQuery库详解及其基本使用 初始化 字符串初始化 html = ''' <div> <ul> <li class="item-0"&g ...

  10. css3线性渐变兼容

    火狐浏览器: background:-moz-linear-gradient(top, red, rgba(0, 0, 255, 0.5)); 谷歌: .l6{background: -webkit- ...