[译]我第一次体验Kotlin Native

栏目: IOS · 发布时间: 5年前

内容简介:随着最近发布的Kotlin 1.3,我听说了创建多平台移动应用程序的能力现在可以在我的 android 和 ios 应用程序之间共享代码??? 这背后的魔力是什么?让我向你展示我如何成功创建我的第一个 Android 和 iOS 兼容模块,以及如何将其集成到实际应用程序中。

随着最近发布的Kotlin 1.3,我听说了创建多平台移动应用程序的能力

[译]我第一次体验Kotlin Native

现在可以在我的 android 和 ios 应用程序之间共享代码??? 这背后的魔力是什么?

让我向你展示我如何成功创建我的第一个 Android 和 iOS 兼容模块,以及如何将其集成到实际应用程序中。

Kotlin 可以编译到任何平台

Kotlin 的最新版本强制执行多平台语言的概念,您已经可以使用 Kotlin 生成 JVM 二进制文件和 JS 包,现在可以生成 Native 框架!

对于原生我想说的是 iOS 代码,但不仅仅是!根据官方文档,可以生成与许多本机架构兼容的代码:

[译]我第一次体验Kotlin Native

我将只关注 Kotlin-Native iOS 兼容性,并向你演示如何生成与 Android 和 iPhone 兼容的共享 kotlin 代码的移动应用程序!

我是如何创建我的多平台项目的

Mhhmmm让我猜想什么是完美的 IDE,兼容 Gradle 和 Android

当然 IntelliJIdea :grin:(你也可以使用 Android Studio)

为了创建我的项目,我复制了由 JetBrain 制作的官方 Kotlin-Conf 应用程序 的分支,并修改了源代码!

你也可以按照官方文档从0开始配置多平台项目

这是我制作的简单应用程序,你写了一个 github 用户的登录名,它显示了他的完整名字,它的头像和他的公司。它不是一个复杂的应用程序,但它包含一些 Http 调用,一个 Json 反序列化,并且可以使用 MVP 进行架构

[译]我第一次体验Kotlin Native

多平台项目如何?

[译]我第一次体验Kotlin Native

这个多平台项目由3个模块组成:

  • common :包含 kotlin 共同代码
  • android :包含 android 应用程序
  • appios :包含 xcode 项目

你可以直接从这些模块或公共模块的内部定义特定于平台的实现:这里 iosMain & jvmMain

生成 .frameworks

Kotlin 本地使用 Konan(一种LLVM编译器)从我们的通用模块生成 .framework。对于 Android 开发人员:.framework相当于 .jar

[译]我第一次体验Kotlin Native

必须在你的 XCode 项目中导入此框架:

[译]我第一次体验Kotlin Native

了解 Kotlin 类型

Kotlin 最初是为了生成 JVM 字节码而创建的。

但是只使用 Kotlin 类:Int,Double,List,Map 等,现在可以将这些对象与平台实现绑定。

[译]我第一次体验Kotlin Native

你可以看到当前实现看你的所产生的 .h .framework,使用该通用类:

[译]我第一次体验Kotlin Native

它将在 common.h 文件中生成这种代码:

[译]我第一次体验Kotlin Native

我可以将常用模块放入什么?

响应很简单:几乎所有不依赖于UI或平台的东西!

我正在为我的项目开发 MVP,我在我的公共模块中添加了 Presenter,它的视图,存储库,api 和模型:

[译]我第一次体验Kotlin Native
[译]我第一次体验Kotlin Native

这里唯一的平台特定层是 API,让我向您解释根据平台获得不同代码的不同方法:

特定于平台的库实施

在 Android 上的产品风格中使用相同的逻辑:所有风格应该公开相同的公共类(如果它们被我们的项目使用),你可以指定特定的 Gradle 依赖项,这里是我的 GithubAPI 中使用的 HTTP Ktor 库

[译]我第一次体验Kotlin Native

从我的 GithubApi,我可以使用 HttpClient 类,它在 Android 和 iO 上有不同的实现

[译]我第一次体验Kotlin Native

注意,你可以使用 kotlin 协同程序在我们的通用模块中执行异步方法!

使用 Ktor,我使用 kotlinx-serialization lib 将 json 解码为模型

用 Kotlin 写 iPhone 代码

Kotlin-Native 允许你将通用代码编译到框架,将类型绑定到平台类型,但它也允许你直接在 Kotlin 中编写 iPhone 代码!

我不是鼓励你在 Kotlin 中创建所有的 iOS 类,但是你可以直接在 Kotlin 中编写一些特定于平台的版本,让我给你看一个例子,如果我在公共模块中创建一个接口,用于简单的存储:

[译]我第一次体验Kotlin Native

您可以直接在生成的 .framework 中提供其 iOS 实现,只需在 iosMain 模块中创建一个文件,然后使用 ios 类在 Kotlin 中编写代码 :

[译]我第一次体验Kotlin Native

注入特定于平台的实现

你可以在公共模块内部进行接口,例如 PlatformLogger:

[译]我第一次体验Kotlin Native

然后我在每个平台上创建了实现,这里是android app模块:

[译]我第一次体验Kotlin Native

在我的 XCode 项目中,我创建了一个 PlatformLoggerIOS ,实现了 PlatformLogger 协议 :

[译]我第一次体验Kotlin Native

我们可以直接从构造函数提供这些 PlatformLogger 作为 G ithubRepository 的依赖项。我用来创建一个名为 DependencyManager 的类,进行一些惰性初始化,存储在 Android 上的 Application 中,以及 iOS 上的 AppDelegate 中:

[译]我第一次体验Kotlin Native
[译]我第一次体验Kotlin Native

在我的代码中,我可以使用 GithubPresenter!

创建 Android 应用程序

我只需要创建一个片段及其布局,使用我的 DependencyManager 我可以检索我的 GithubPresenter,然后收听 EditText 的内容以下载并显示 github 用户。

[译]我第一次体验Kotlin Native

最后,创建我的 XCode 应用程序

使用 storyboard 和一个简单的 ViewController,我实现了我的 GithubPresenter 的视图 :

[译]我第一次体验Kotlin Native

这里我的 GithubController 实现了 GithubView,并通过我的 DependencyManager 检索 presenter

我可以使用我的演示者从我的 TextField 的内容下载 github 用户,然后轻松地显示它

我对 Kotlin-Native 的看法

对于 kotlin 原生的未来,你能想象到的是惊人的!

想象一下,当我们使用的所有库都将在 core/jvm/ios 中实现时,我们可以在这个框架中编写所有架构代码,并且只在每个平台上开发 UI!

今天,创建一个多平台应用程序并不是一件容易的事,智能的自动完成是危险的,你在编译代码时遇到一些随机问题,你不能轻易地在你的共同代码中附加一个调试器。一些 kotlin 代码在 swift 中没有它们的等价物,例如我没有成功为我的记录器创建一个伴随对象(我试图从Jake Wharton 重现像Timber这样的概念)

但不要忘记这是一项非常年轻的技术!几个月前不可能!

我不耐烦地了解 Kotlin-Native,并创建一些与 Android 和 iPhone 兼容的新库

我再次给你我的 android/ios 应用程序的代码,不要犹豫,给我发一些评论!我的 GitHub


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

代码

代码

劳伦斯・莱斯格 / 李旭 / 中信出版社 / 2004-10-1 / 30.00元

劳伦斯·莱斯格的著作《代码》 问世便震动了学界和业界,被人称为“也许是迄今为止互联网领域最重要的书籍”,也被一些学者称为“网络空间法律的圣经”。 《代码》挑战了早期人们对互联网的认识,即技术已经创造了一个自由的环境,因而网络空间无法被规制——也就是说,网络的特性使它押脱了政府的控制。莱斯格提出,事实恰恰相反。 代码的存在证明,网络并不是本制拷贝 ,不可规制的,它并没有什......一起来看看 《代码》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具