Kotlin跨平台初探
在学习Kotlin的时候,发现它居然提供了移动跨平台解决方案。虽然目前还是个beta版本,但也引起了我的好奇心。想着如果Kotlin能够解决跨平台问题,那么不论从语言角度,还是从熟悉角度,都是首选。毕竟相比另外两大方案Flutter和React Native来说,它容易多了。Flutter使用了全新的开发语言Dart,不论是Framework层、View层,还是数据层,都是重新设计的一套。React Native则是在JS 库React基础上发展而来的,它使用JS来描述界面元素。这两者都有较大的学习成本。
(1)主要目录结构
在AndroidStudio或者IDEA上,根据官方文档步骤,可以创建Kotlin跨平台项目。下面是它的主要结构:
- androidApp目录:Android主项目,它和使用AndroidStudio创建的普通项目一样;
- iosApp目录:ios主项目,可以通过mac Xcode打开。如果要做一些配置,如开发者账户信息,需要通过Xcode来处理。AndroidStudio或者IDEA本身不支持配置;
- shared目录:跨平台的精髓,所有支持跨平台的代码都放在这里。对Android来说,它是作为一个lib导入到Android Project里。
(2)协程
跨平台的代码,是用kotlin语言编写的,它可以使用协程。对于Android来说,它最终是Java Class字节码。不论是Dalvik虚拟机,还是Art虚拟机,都不知道协程的存在。对于IOS来说,它最终会被实现为回调的方式。
(3)限制
Kotlin跨平台方案存在很大的限制。大体概括一下:只有数据层的可以跨平台,如网络请求、Json序列化和某些工具方法等;View层不能跨平台,UI绘制分别在各自的Project里;平台相关的如文件、数据库操作等,都不能跨平台,需要各自处理。以下是一些总结:
可以跨平台的:
- 网络请求及签名加密;
- 序列化数据层model;
- kotlin跨平台库;
- 某些特定工具方法。
不能跨平台的:
- View相关,及动画相关;
- 四大组件相关;
- 文件操作相关(SharePreference、File);
- 数据库操作相关(sqlite);
- 与js的交互相关;
- 屏幕信息相关;
- 资源相关;
- 国际化(多语言)相关;
- JNI相关;
- 多媒体(音频、视频)相关;
- 通知(Notification)相关;
(4)总结
基于上面的结论,就没有对Kotlin跨平台方案再深入下去。因为限制太多了,可以跨平台的很有限。但总的来说,Kotlin提供了诸多跨平台方案中的一种,对一些公共逻辑代码,提供了很大的方便。期待它能继续发展下去,创造更大的舞台。
Over !
网友评论