加入收藏 | 设为首页 | 会员中心 | 我要投稿 常州站长网 (https://www.0519zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

聊聊移动端跨平台开发的各种技术

发布时间:2016-07-29 11:18:06 所属栏目:语言 来源:百度Fex
导读:最近出现的 React Native 再次让跨平台移动端开发这个话题火起来了,曾经大家以为在手机上可以像桌面那样通过 Web 技术来实现跨平台开发,却大多因为性能或功能问题而放弃

Xamarin

Xamarin 可以使用 C# 来开发 Android 及 iOS 应用,它是从 Mono 发展而来的,目前看起来商业运作得不错,相关工具及文档都挺健全。

因为它在 iOS 下是以 AOT 的方式编译为二进制文件的,所以把它归到编译流来讨论,其实它在 Android 是内嵌了 Mono 虚拟机 来实现的,因此需要装一个 17M 的运行环境。

在 UI 方面,它可以通过调用系统 API 来使用系统内置的界面组件,或者基于 Xamarin.Forms 开发定制要求不高的跨平台 UI。

对于熟悉 C# 的团队来说,这还真是一个看起来很不错的,但这种方案最大的问题就是相关资料不足,遇到问题很可能搜不到解决方案,不过由于时间关系我并没有仔细研究,推荐看看这篇文章,其中谈到它的优缺点是:

  • 优点
    • 开发 app 所需的基本功能全部都有
    • 有商业支持,而且这个项目对 Windows Phone 很有利,微软会大力支持
  • 缺点
    • 如果深入后会发现功能缺失,尤其是定制 UI,因为未开源使得遇到问题时不知道如何修复
    • Xamarin 本身有些 Bug
    • 相关资源太少,没有原生平台那么多第三方库
    • Xamarin studio 比起 Xcode 和 Android Studio 在功能上还有很大差距

微软知道自己的 Windows Phone 太非主流,所以很懂事地推出了将 Objective-C 项目编译到 Windows Phone 上运行的工具,目前这个工具的相关资料很少,鉴于 Visual Studio 支持 Clang,所以极有可能是使用 Clang 的前端来编译,因此我归到编译流。

而对于 Android 的支持,微软应该使用了虚拟机的方式,所以放到下个章节介绍。

RoboVM

RoboVM 可以将 Java 字节码编译为可在 iOS 下运行的机器码,这有点类似 GCJ,但它的具体实现是先使用 Soot 将字节码编译为 LLVM IR,然后通过 LLVM 的编译器编译成不同平台下的二进制文件。

比如简单的 new UITextField(new CGRect(44, 32, 232, 31)) 最后会变如下的机器码(x86):

call imp___jump_table__[j]org.robovm.apple.uikit.UITextField[allocator][clinit]mov esi, eaxmov dword [ss:esp], ebxcall imp___jump_table__[j]org.robovm.apple.coregraphics.CGRect[allocator][clinit]mov edi, eaxmov dword [ss:esp+0x4], edimov dword [ss:esp], ebxmov dword [ss:esp+0xc], 0x40460000...

基于字节码编译的好处是可以支持各种在 JVM 上构建的语言,比如 Scala、Kotlin、Clojure 等。

在运行环境上,它使用的 GC 和 GCJ 一样,都是 Boehm GC,这是一个保守 GC,会有内存泄露问题,尽管官方说已经优化过了影响不大。

在 UI 的支持方面,它和 Xamarin 挺像,可以直接用 Java 调用系统接口来创建界面(最近支持 Interface Builder 了),比如上面的示例就是。另外还号称能使用 JavaFX,这样就能在 iOS 和 Android 上使用同一套 UI 了,不过目前看起来很不靠谱。

在我看来 RoboVM 目前最大的用途就是使用 libGDX 开发游戏了,尽管在功能上远不如 Cocos2d-x(尤其是场景及对象管理),但不管怎么说用 Java 比 C++ 还是方便很多(别跟我说没人用 Java 做游戏,价值 25 亿美元的 Minecraft 就是),不过本文主要关心的是 UI 开发,所以这方面的话题就不深入讨论了,

RoboVM 和 Xamarin 很像,但 RoboVM 风险会小些,因为它只需要把 iOS 支持好就行了,对优先开发 Android 版本的团队挺适用,但目前官方文档太少了,而且不清楚 RoboVM 在 iOS 上的性能和稳定性怎样。

Swift - Apportable/Silver

apportable 可以直接将 Swift/Objective-C 编译为机器码,但它官网的成功案例全部都是游戏,所以用这个来做 APP 感觉很不靠谱。

(编辑:常州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读