惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

P
Proofpoint News Feed
V
V2EX
WordPress大学
WordPress大学
Google DeepMind News
Google DeepMind News
Martin Fowler
Martin Fowler
小众软件
小众软件
Blog — PlanetScale
Blog — PlanetScale
月光博客
月光博客
The Cloudflare Blog
T
Tailwind CSS Blog
H
Help Net Security
腾讯CDC
爱范儿
爱范儿
人人都是产品经理
人人都是产品经理
H
Hackread – Cybersecurity News, Data Breaches, AI and More
The GitHub Blog
The GitHub Blog
Microsoft Security Blog
Microsoft Security Blog
Stack Overflow Blog
Stack Overflow Blog
D
DataBreaches.Net
C
Check Point Blog
量子位
酷 壳 – CoolShell
酷 壳 – CoolShell
美团技术团队
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com

少数派

派早报:Google 发布 Fitbit Air 等 - 少数派 「新人报到」確認需求,再開始 - 少数派 从 SOLO 独立开发者社区,我看到了越来越多开发者开始做自己的产品 - 少数派 我怎么管理那些"不常做,但总会忘"的生活事项 - 少数派 人形机器人量产元年,数据才是具身智能的“生死线” - 少数派 BuhoLaunchpad 高度还原 Mac 启动台:开发历程与思考 - 少数派 五年陪伴依然不舍,DIY 换壳后让罗技 MX Master 3 继续服役 - 少数派 新玩意 240|少数派的编辑们最近买了啥? - 少数派 一日一技|为什么你应该关闭 iOS 的键盘声音 - 少数派 我做了个插件和 Skills,一键提取任何网站的设计规范 Design.md - 少数派 住在三四线城市的你,该开始录播客了 - 少数派 甘南秘境,大白高国 - 少数派 AI的审美:谁让把我变成川内倫子 - 少数派 返工怎能不烦恼,打工人片单总有一部是你的「嘴替」 - 少数派 为了让「上厕所」更健康,我做了一个小工具 - 少数派 AI + Skill,能够让生成的文章去除 AI 味吗? - 少数派 新玩意|韶音OpenDots ONE 耳夹式耳机 - 少数派 《美满》| 在每一个春天的晚上相爱(362) - 少数派 新玩意|优篮子 PS01 MagSnap 磁吸支架 - 少数派 自我整合手记 | 我开始早睡了:用稳定规则,为自由托底 - 少数派 用龙虾(OpenClaw)两个多月,我最深的12个体会 - 少数派 听歌时间到,12 张你可能错过的 2025 华语乐坛好专辑 - 少数派 承诺能追吗 - 少数派 macOS 26启动台没了? 我做了个不一样的App启动器 - Keboard - 少数派 《四海为家的人》| INTJ对话INTJ(361) - 少数派 你发过的那些黑历史,是时候一次清干净了 - 少数派 新玩意:安安静静玩,越玩越专注:计客密码机 - 少数派 iPad 用户首次体验 Android 平板:vivo Pad6 Pro - 少数派 数据逻辑强 - 少数派 极北行+ | 一路向北,探访日本至北之地 | 001 - 少数派
我为什么选择Xamarin - 少数派
2017-02-26 · via 少数派

上一篇文章向大家介绍了我开发的岁寒输入法,今天就向大家介绍一下我用来开发岁寒输入法的工具。目前,岁寒输入法已有Android和iOS两个版本,其中Android在前,iOS在后。早年开发Android应用使用的是Eclipse,前几年Google力推Android Studio之后也就迁移了过来。相信关于这个工具的介绍在网上已是俯拾皆是,我这里就不多做介绍了,而是着重向大家介绍我用于开发iOS版岁寒输入法的工具——Xamarin Studio.

Xamarin是一项跨平台开发技术,之前是收费的,而且据说收费不菲,所以使用的人数比较少,在国内几乎无人问津。后来Xamarin被微软收购,现已免费开放,相信今后国内的使用人群会大幅地增长,一方面是因为免费的东西总是受人欢迎的,另一方面是Xamarin确实提供了一种比较强大的技术来支持跨平台开发(这里所指主要是Android和iOS上的开发,但其实不止于此)。

如今市面上号称可以提供跨平台开发的方案很多,比如React Native、PhoneGap、IONIC等,这些方面大多数都是基于HTML和JavaScript等技术实现的跨平台开发,在开发效率上自然是没话说,但是这些技术在性能上则逊色于原生的开发技术,而这恰恰是Xamarin得以生存的空间。

Xamarin声称可以获得不差于原生技术的性能,甚至在某些方面还有可能超越原生,我想这指的应该在是Android方面。我个人分析,原因可能是这样的。Xamarin使用C#进行开发(好像用F#也可以,不过我没有试过,据说F#也是一门非常不错的语言,以后有时间会学习学习),C#默认方法是非虚的,即在子类中要重写方法,必须在父类中声明为virtual,而java默认所有方法都是虚方法,所以C#可以减少这方面的开销。其次的话,可能是微软毕竟也是老牌的IT公司,在系统软件方面的优化能力不容小觑,手里的黑科技也是不少,敢说这话应该是有底气的。当然这不是最重要的,只要能够在大多数情况获得近似于原生的性能,便已是非常不错了。

Xamarin主要有这么几项技术,Xamarin.Android、Xamarin.iOS和Xamarin.Forms,此外还有Xamarin.UWP、Xamarin.Windows、Xamarin.WinPhone等,但鉴于目前的市场占有率,后面几项可以暂时不去理会。

无论是Xamarin.Android还是Xamarin.iOS,本质都是对原生API做了一层C#的封装,因此在使用上与原生API会十分相似。这种封装会结合一些C#的语法特性,让开发者可以享受C#的语法糖。其中Xamarin.iOS是直接编译成ARM的二进制代码,因此执行效率肯定是非常高的。与此不同,Xamarin.Android被编译成中间语言,Xamarin在APK安装包中会包含一个mono的运行时,代码是在mono运行时和安卓本地的运行时上完成工作的,可想而知,这中间需要付出一些开销,而且会使安装包体积增大许多,但是考虑到设备的运行空间和存储空间都在高速增长,这也不能算是一个特别致命的缺点。

而Xamarin最为关键的技术还不是上面的两项,而是Xamarin.Forms。这项技术把IOS、android、UWP等平台的GUI进行了一统地抽象,开发者只需要写一套代码,编译器会在编译时将界面映射到原先控件上,从而获得原生平台的外观和性能。这种做法对于开发者应该是最喜闻乐见的,至少我是如此,相比于那种运行的虚拟层上的跨平台方式,这种做法性能损耗最少。当然,损耗小并不代表没有,官方也表示,Xamarin.Forms不适合用于开发图形界面操作特别复杂且频繁的应用。遇到这种情况,我们可以用Xamarin.IOS或Xamarin.Android来解决,也就是说Xamarin.Forms可以与Xamarin.IOS或Xamarin.Android在同一个项目结合使用。就以我准备使用Xamarin做输入法为例,根据Xamarin的特点,我用Xamarin.Forms来做输入法的设置界面,节省重复开发一套界面和业务逻辑的精力;而用Xamarin.IOS和Xamarin.Android来做输入法界面,以发挥最大的性能。实践证明,这个想法是可行的。虽然我最开始的想法是连输入法界面也用Forms来做,但发现在输入法界面无法使用Forms编写的界面(根据我的实验,Forms的界面应该只能用于制作Activity的界面,而不能做Service的界面,也可能是我不知道应该怎么实现),所以只好退而求其次,不过现在这个结果也是不错的,毕竟输入法界面本身对性能的要求就比较高,使用更接近原先代码的技术自然要好一些。

至此,我使用Xamarin的意图已经很明显了,就是想要用于它实现一个跨平台的移动输入法,具体的说就是岁寒输入法。现在首先做的是iOS版的,然后再反过来重写Android版本,如果日后WindowPhone能有起色,并且开放第三放输入法的权限,那么基于这些代码实现一个WindowPhone就不会是一件再起炉灶又大费周章的事情。而如果使用原生语言开发的话,那每个平台都得重写一套代码,代价实在太大了,尤其对于个人开发者而言,不堪重负,这也是为什么Xamarin对我来说特别有吸引力的原因。

跨平台有跨平台的方便,自然也有跨平台的难处,Xamarin也仅仅提供了一种跨平台开发的手段而已,想要将这个手段发挥好,最大限度地实现对代码的重用,则需要更高的技巧和更多的思考。因此我不推荐初入开发门道的人选择Xamarin,在此之前,最好对其中一个平台及其开发过程有较深的理解。

Xamarin现在免费开放,显然这是微软的移动战略的一部分,由于自身操作系统在生态环境上的欠缺,迫使微软去推动跨平台技术的发展,以希望从其它平台上借势,从而反哺自身。在我看来,微软的移动操作系统不太可能会有转机,但这不意味着Xamarin作为一项技术没有希望。“有心栽花花不开,无心插柳柳成荫”的事情从不鲜见,只要抓住开发者这帮猢狲,微软这棵大树便不会倒,相信微软明白这个道理,作为开发者也不必过于担心微软过河拆桥。

这篇文章的目的不纯粹在于宣传Xamarin技术,毕竟微软没有给我发盒饭,但免费用着人家提供的技术,投桃报李,顺便给人家宣传宣传的好事也是值得做的。如果你也是移动互联网的开发者,那么了解一下这个工具也许对你今后的道路选择大有禆益,从我个人的开发体验来讲,Xamarin已经相当成熟了,虽然在某些方面仍有不足,但瑕不掩瑜,值得一试。