[译]我第一次体验Kotlin Native

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

内容简介:随着最近发布的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


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

查看所有标签

猜你喜欢:

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

Introduction to Graph Theory

Introduction to Graph Theory

Douglas B. West / Prentice Hall / 2000-9-1 / USD 140.00

For undergraduate or graduate courses in Graph Theory in departments of mathematics or computer science. This text offers a comprehensive and coherent introduction to the fundamental topics of graph ......一起来看看 《Introduction to Graph Theory》 这本书的介绍吧!

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试