在今年的 Google IO 大会中,官方宣布 Koltin 为 Android 开发的首选语言。一时间 Koltin 成为许多 Android 开发者讨论的热点,一些 Android 开发者更是早早的开始学习和使用 Koltin 来开发 Android 项目,但是别高兴的太早,看完下面的内容,你会发现 Java 仍然是 Android Studio 3.0 中的一等公民,Koltin 只能排第二。
我总结了三个理由:
1.Unchangeable fact:Something Android Studio CAN’T do a thing
2. Conscious exclusion:Something Android Studio CAN’T do a thing
3. Support failures:Something Android Studio SHOULD do about
Unchangeable fact
Kotlin 是运行在 JVM(Java 虚拟机)上的,正因如此,我们才能快速的上手和使用 Koltin。也是因为这个原因,我们在使用 Koltin 的时候可以和 Java 进行互操作。这样的好处就是,一个项目中可以同时存在 Java 和 Koltin 的两种代码,同时也可以是 Java 使用者平滑的学习和过渡到 Kotlin,例如我们可以把 Java 代码转变为 Koltin,同时也可以把 Koltin 反编译回 Java。
但是换句话说,我认为如果没有 Java 就不会有 Kotlin,至少传播和发展的不会如此之快。
从 Android Studio 3.0 的角度来看,Koltin 是一个完完全全的二等公民。
在 Android Studio 中,为了使用 Kotlin,你需要添加 JDK。没有一个独立于 JDK 的 KDK 可以供 Kotlin 来使用。
如果你每一个创建一个新项目,你都要确认是否选中了是否引入 Kotlin 支持。在默认情况下,如果没有确认的话,Java 是默认的语言。
通过这个确认,Kotlin 库和插件被添加到下面,就像这样
AS 需要额外的库和插件才能使 Kotlin 正常工作,这是一个无法改变的事实,因为 Kotlin 生活在 Java (或者更具体地说是 JVM )领域,这是属于 Kotlin 的语言特性,所以 Android 团队也拿它没办法。
Conscious exclusion
不过,有一些东西表明,Android Studio 仍然没有让 Kotlin 像 Java 那样独一五二。下面我将提供三个示例
项目代码的文件夹仍然是以 Java 命名的!
当你在用 Kotlin 创建一个项目,并查看项目文件夹时,你会发现到以下内容
你看到了吗? 是 Java ! ! 默认的源文件夹是 Java,尽管所有的代码都是纯 Kotlin 的。
如果你想要把代码放入 Kotlin 文件夹,你需要在模块构建中显式地指定,gradle 如下
嗯,Java 的旗帜仍然飞得很高…即使在里面只有 Kotlin 。
只在 Java 中生成的默认库 :(
哦,你可能会说,这是因为 Kotlin 生活在 Java 中,所以 Kotlin 的代码可以在 Java 源代码的指导下运行,我再举一个例子。
一旦你有了一个项目,试着创建一个新的模块。也许是一个新的 Android 库模块。
这一次你意识到你没有选择 Kotin 的复选框。您可能会想,既然你在创建项目时已经对它进行了标记,那么它应该为你创建 Android Kotlin 库。
然而,让你沮丧的是,当你创建它时,请查看给定的示例测试代码。Java!!
另外,检查新的模块构建。它没有为你添加 Kotlin 插件和库。你必须手动添加 Kotlin 插件和库。这就像编写一个应用程序表单来使用 Kotlin :(
Kotlin 模板库在哪里
如果上面没有说服您,Kotlin 就没有像 Java 那么优秀了……请看下面的内容。
当你想要创建一个新的简单 Java 库时,Android Studio提供了这个功能。但是并没有 Kotlin 的。
Support failures
好吧,以上这些可能不是针对 Android Studio 3.0 的。在 Android Studio 3.1中可能会有计划,或者以后会出现。所以在 Android Studio 3.0中 没有这些东西是可以的。
但是等等,显然我认为这些是有必要在 Android Studio 3.0 中支持的,但是并没有。
在 Android 中的 Koltin Protobuf 支持
Google 引入了这个伟大的网络通信概念,Protocol Buffer (也就是原 Protobuf)。它可以在Android上通过 Protobuf Gradle使用。
Protobuf 和 Android 都是属于 Google 的,我认为,Kotlin 应该支持 Protobuf,是因为 Kotlin 与 Java 是很相似的,而且在 Android 官方也宣布了 Kotlin 为 Android 开发首选推荐语言。
然而,让我沮丧的是,在 Android 应用程序或库中,当代码是 Colton时,它的 Gradle 插件是无法找到 Proto 生成的文件。但将代码转换为Java,问题立即得到解决。
为此我为它提了一个 issue,地址在这里 https://github.com/google/protobuf-gradle-plugin/issues/176
在 Android Studio 3.0 中没有针对 Kotlin 的代码覆盖报告
也许是因为 Protobuf 是一种相对较新的东西,这可能是一种疏忽,或者这更像是一个 Gradle 插件的问题。
好吧,让我们来做一些更常见的事情,代码覆盖率。这就是我们在大学时代学到的,要成为一个有质量意识的开发者。
然而,如果你想在 Android Studio 3.0 中检查你的测试代码覆盖率,那么祝你好运,这是不可能。
如果你想要知道官方什么时候解决这个问题,那么请关注这个 issue,https://issuetracker.google.com/issues/64929213
老实说,在 AS 2.3 版本中,我觉得就应该引入对 Kotlin 的代码覆盖得支持。但直到 Android Studio 3.0 都没有。
好吧,希望我的观点是合理的,Java 在 Android Studio 3.0 中仍然更有优势。
Java 仍然是 Android 工作室的老大,而Kotlin只是“新公民”。我知道想要改变,这是需要时间的,我希望有一天 Kotlin 可能会真正的得到一等公民”的待遇。
探索有趣的新事物
Android、Kotlin、设计、产品、思考、游戏。
长按关注
如果觉得有意思,那就分享一下啦
来源: https://juejin.im/entry/5a0509236fb9a0450e7593f8