大家好,今天来为大家解答哪个网站下android源码分享这个问题的一些问题点,包括安卓app源代码也一样很多人还不知道,因此呢,今天就来为大家分析分析,现在让我们一起来看看吧!如果解决了您的问题,还望您关注下本站哦,谢谢~
出品|开源中国
Meta发布了一篇博客表示,正在将其Android应用的Java代码迁移到Kotlin,并分享了这一过程中的一些经验。
该公司认为,Kotlin是一种流行的Android开发语言,与Java相比具有一些关键优势。“因此,在我们努力使我们的开发工作流程更加高效的过程中,将Meta的Android开发转向Kotlin是非常合理的……Kotlin通常被认为是一种比Java更好的语言,在年度StackOverflow开发者调查中,它的好感度要高于Java。”
除了受欢迎程度外,Meta还将最新的Kotlin版本与Java11(可用于Android开发的最新版本)进行了比较,并得出了Kotlin的一些主要优势:可空性、函数式编程、更短的代码、以及领域特定语言(DSL)/类型安全构建器等。
Facebook软件工程师OmerStrulovich指出,Meta旗下几个流行的Android应用–Facebook、Instagram、Messenger、Portal和Quest都已经开始从Java转向Kotlin。截至目前,Facebook、Messenger和Instagram的Android应用程序都有超过100万行Kotlin代码,并且转换率正在提高。Meta的Android代码库总共已包含有超过1000万行的Kotlin代码。作为此次迁移的一部分,Meta透露其也正在开源用于操作Kotlin代码的各种示例和实用程序。
不过,采用Kotlin也有一些不能忽视的缺点。博客内容指出,比如:两种语言的混合代码库需要长时间的处理维护;以及Kotlin与Java相比,流行度还是存在明显的差距,这意味着Kotlin可用的工具也更少。更糟糕的是所有Kotlin工具还都需要考虑Kotlin和Java的互操作性,这使得它们的实现就变得复杂。
最大的问题还在于构建时间。“我们从一开始就知道Kotlin的构建时间会比Java的要长。该语言及其生态系统更加复杂,Java在优化其编译器方面领先了20年。由于我们拥有多个大型应用程序,较长的构建时间可能会对我们的开发人员体验产生负面影响。”
如何处理迁移
Meta称,迁移到Kotlin既简单又非常复杂。因为Kotlin的设计允许从Java进行简单的转换,并具有经过深思熟虑的互操作性。这种设计使JetBrains能够为开发人员社区提供J2K,即IntelliJ/AndroidStudio中的Java到Kotlin转换器。但J2K不是万能的,迁移中的有些情况仍然很复杂。
迁移之前,该公司考虑了两个选择:
一个是可以使用Kotlin在Meta上编写新代码,但将大部分现有代码保留在Java中。
还有一个是可以尝试将几乎所有内部代码转换为Kotlin。
第一个选项的优势很明显,即少得多的工作量;但是这种方法也有两个明显的缺点。首先,在Kotlin和Java代码之间实现互操作性引入了Kotlin中platformtypes的使用。platformtypes会导致运行时空指针取消引用,从而导致崩溃,破坏了纯Kotlin代码提供的静态安全优势。在一些复杂的情况下,Kotlin的空检查省略还可能漏掉空值通过,进而引发空指针异常。例如,如果Kotlin代码调用由Java接口实现的Kotlin接口,就会发生这种情况。其他问题包括Java无法将类型参数标记为可空性(直到最近才修复),以及Kotlin的重载规则考虑了可空性,而Java的重载规则却没有。
第二个缺点是考虑到Meta的大多数软件开发都需要修改现有代码。“如果我们的大部分代码都是用Java编写的,我们就无法让我们的开发人员充分享受Kotlin的乐趣。由于迁移是一个漫长的过程,期望每个工程师在接触文件之前将文件转换为Kotlin既费力又低效。”
因此,Meta方面最终选择了第二条选项,决定将几乎所有代码转换为Kotlin。而在尝试为现有应用程序引入Kotlin时,Meta也遇到了很多麻烦,例如需要更新Redex以支持Java不生成的字节码模式。以及使用的某些内部库依赖于在编译期间进行字节码转换来获取更好的性能。而将其作为Kotlin编译的一部分运行时,这部分代码则无法生效。为此,Meta专门构建了解决工具。
此外,他们还发现在现有工具中存在的一些差异。例如代码审查或wiki中缺少Kotlin语法高亮显示。“我们更新了我们正在使用的库Pygments,以使体验与Java相媲美。我们更新了一些内部代码修改工具,以便能够处理Kotlin。我们还构建了Ktfmt,这是一个基于google-java-format的代码和理念的确定性Kotlin格式化程序。”
准备好所有工具后,Meta就可以正式开始批量转换大量代码。“随着我们工具的改进,我们已经能够将相当大的一部分代码转换成Kotlin。我们的代码库中已经有超过1000万行Kotlin代码,而且Meta的大多数Android开发人员现在都在编写Kotlin代码”。平均而言,此次迁移使代码行数减少了11%。
Meta方面表示,其向Kotlin的迁移仍在进行中并在加速。“我们已经允许Meta的任何想要使用Kotlin的Android开发人员这样做,并为他们提供了工具来轻松地将现有代码迁移到Kotlin。Kotlin仍然缺少一些我们在使用Java时已经习惯的工具和优化。但我们正在努力缩小这些差距。随着我们取得进展以及这些工具和库的成熟,我们还将努力将它们反馈给社区。”
OK,本文到此结束,希望对大家有所帮助。
