写点什么

Xamarin:使用 C#移植 Android 操作系统

  • 2012-05-02
  • 本文字数:2421 字

    阅读完需:约 8 分钟

Oracle 和 Google 针对 Android 中 Java 的专利问题鏖战正酣,与此同时 Xamarin 正在尝试使用 C#移植 Android 操作系统,完全替换其中的 Java 代码。虽然这 Xamarin 表明这不会是公司的主要业务,但这依然会是一个十分有趣的尝试,并且对于其拳头产品之一,Mono for Android 的进一步发展也会有很好的帮助。

Xamarin 的前身是 Novell 公司的 Mono 团队,去年从 Novell 中剥离出来,并拥有关于 Mono 所有的专利及知识产权,其主营业务也是围绕 Mono 进行的跨平台应用开发,覆盖 iOS(iPhone/iPad),Android 等主流移动设备。使用 Mono 以及 Xamarin 的产品,开发人员能够使用 C#和.NET 开发各平台上的原生应用程序,并能够跨平台共享除界面之外的代码,减少开发成本。

Xamarin 表示,Java 并非是 Android 上开发原生应用的唯一方法,甚至也不是最好的方法,Xamarin 的主力产品 Mono for Android 可以让开发人员创建更高效,更省电的应用程序。与 Sun 的做法不同,微软从一开始就将 C#.NET 虚拟机提交为ECMA 标准,这些标准遵循ISO 的专利承诺,也受到微软自身发布的,具有法律效力的社区承诺覆盖,微软承诺不会追究这些标准中涉及的专利问题。

Xamarin 团队在博客里写到:

去年 7 月,当 Xamarin 刚成立的时候,我们在 Boston 召集了整个团队一起商讨 iOS 和 Android 上 Mono 的演进计划。某日,在结束了一天的查理士河上的皮艇活动之后,我们在饭桌上讨论如何改进 Android 应用程序的性能和耗电,以及如何让 Mono for Android 变得更好。

最后我们回到了底层问题上:Dalvik 还是个年轻的虚拟机,它没有经过 Mono 那样的性能调优,在受限于 Java 的许多性能限制的同时,也缺少如 Oracle HotSpot 那样强大的后端优化能力。在那次晚餐中,我们的团队迸发出了一个疯狂的念头:不如将 Android 源代码翻译成 C#吧。这样 Android 就可以得益于 C#的高效功能,例如结构体,P/Invoke,真正的泛型,还有我们更为成熟的运行时作为后盾。

虽然那年 7 月最终什么都没有发生,但这个念头深深地印在了我们的脑海里。

把时钟快速向后拨几个月:Mono for Android 已经获得了令人瞩目的成果,于是我们再一次开始思考如何改进产品在 Android 上的性能。如果我们把 Java 替换成更快的 C#,以此避免 Dalvik 带来的各种限制又会怎么样呢?我们可以让一个 Android 手机完全摆脱 Java,摆脱 Dalvik 虚拟机的限制吗?

我们觉得这个点子已经疯狂到值得一试了。于是,从一个小项目开始,我们以完整翻译 Android 中的 Java 部分至 C#为目标开始前进。我们把这个项目称为 XobotOS。

目前 XobotOS 的绝大部分 Android 层已经完全改写为 C#,Xamarin 还公开了一幅 XobotOS 在 Linux 工作站上运行的截图,其中完全没有 Java 的存在。

Android 的核心代码包含数百万行 Java 代码,同时 Xamarin 团队希望可以保持同步更新——事实上 XobotOS 项目是从 Android 2.x 开始的,直到今年在 Google 开源了 Ice Cream Sandwish 之后才升级至 Android 4.0。因此,唯一可靠的做法似乎只有 Java 到 C#的自动翻译了,在这个过程中还需要创建维护各种所需的工具。一开始 Xamarin 团队使用了 Sharpen,它的著名案例之一,便是由 Frank Krueger 将一个 Java Applet 程序自动翻译为 C#代码,基于 MonoTouch 打造出一款著名的 iOS 应用 iCircuit ,并得到了苹果官方的推荐。Xamarin 团队对 Sharpen 进行了许多改进,让这个 Java 至 C#的代码转化工具变得更为成熟。目前新版的 Sharpen 已经随 XobotOS 一起发布,Xamarin 团队希望更多的人能从中获利,并贡献出自己的力量。

对于 Android 是如何从 Mono 上面获得比 Dalvik 更好的性能,Xamarin 团队谈到:

微软对 C#进行了一些改进,大大简化了代码优化的难度。例如它引入了值类型,降低了小型对象带来的开销;同时虚方法不再默认启用,这降低了虚拟机的性能优化难度。更进一步的是, Java 和 C#在泛型实现方式上分道扬镳,Java 采用了完全向前兼容的做法,而 C#在运行时上构建了支持。C#的做法更为易懂易用,也更为高效和完备。

从那时起,两种语言和执行环境都在不断改进。C#原本只是一门“稍稍优于”Java 的语言,如今两者的差距何止以千里计。从动态编程,到引入异步支持,还有迭代器,函数式编程组件,拥抱并行化,乃至泛型的优秀实现。其中大量的功能来自于 Don Syme 的的研究,他的 F#小组还在继续引领语言发展的新思路。

更重要的是,Mono 作为一个虚拟机也更为成熟,在过去的十年里进行着不断地改进,现在可谓经历了第八代的优化了。

Xamarin 认为这些都是影响性能的因素。例如,由于结构体和泛型的影响,一个简单的二叉树性能测试便可以看出Java 和C#两者间存在显著的性能差别:

Xamarin 宣布,他们已经在 GitHub 上公开了 XobotOS 的源代码,任何人可以自由尝试。不过他们也谈到,公司的目标是提供最好的移动应用开发平台,因此 XobotOS 不会是公司的重心,不过这依然是一次十分有趣的体验,一些技术产出也可以融入未来的产品之内,例如:

  • 直接访问 Skia 图形引擎:目前 Mono for Android 通过 Java 来访问下层图形类库,而通过 XobotOS 中的代码,便可以跳过这个中间人,使用 Mono 的 P/Invoke 技术直接访问 Skia 的原生渲染代码。
  • Java 到 C#的转换工具:新版 Sharpen 已经随 XobotOS 一起发布
  • 将 Java 代码替换为 C#代码:对于一些性能敏感的部分,可以使用 C#来代替 Java 以换取更好的效率,这个研究项目的一些特性将会融入未来的产品当中。

Xamarin 创建 XobotOS 研究项目的目的,一是好玩,二是对产品有实实在在的收益。他们表示:

对于一个创业公司来说,专注固然重要,但有时候也需要尝试一些疯狂的想法来推动自身前进——说不定有一天,Google 也会感谢我们呢!

更多有关 Mono 的信息,请访问 InfoQ 上的详细内容


给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2012-05-02 20:1011604
用户头像

发布了 157 篇内容, 共 58.8 次阅读, 收获喜欢 6 次。

关注

评论

发布
暂无评论
发现更多内容

FC红白机游戏600合集 for mac(小霸王游戏) 单机离线版

Rose

Mac游戏下载 FC 红白机游戏 任天堂游戏下载 小霸王游戏

mac电脑如何远程控制win?微软远程桌面连接工具来帮你!

Rose

Mac远程控制软件 mac电脑如何远程控制win microsoft remote desktop 微软远程桌面连接工具

Django笔记四十之运行Django环境的python脚本

Hunter熊

Python django 脚本

Photoshop2023beta常见问题|ps 2023测试版智能AI功能不能用如何解决?

Rose

Photoshop2023beta FireflyAI

Waves 14 Complete(Waves混音效果全套插件)安装激活教程

Rose

Waves 14破解教程 Waves 下载 Waves 14 最新版 Waves混音效果全套插件

Waves 14 Complete Mac激活最新版(Waves混音效果全套插件) v31.05.2023

真大的脸盆

Mac 软件 Waves 14破解教程 混音软件 混音套件 waves

挖掘算力产业的创新力量和新型机遇|2023开放原子全球开源峰会先进计算分论坛即将启幕

开放原子开源基金会

开源 算力 先进计算

一文回顾 Boundless Hackathon at Stanford 首期 Workshop

股市老人

AI实战营第二期_OpenMMLab概述

IT蜗壳-Tango

OpenMMLab

又是供应链安全:GUAC项目0.1版释出

sender_is_sender

网络安全 开源软件 供应链安全 GUAC

鲲鹏DevKit助力南京信息工程大学高效开发

说山水

自媒体行业红利衰退,大部分自媒体作者将生存艰难

石头IT视角

鲲鹏DevKit助力深圳财富趋势高效开发行情分析系统,行情揭示快人一步

说山水

解锁软件工程新角色——平台工程师

SEAL安全

DevOps 平台工程 平台工程师

植物大战僵尸mac版下载

Rose

植物大战僵尸 mac 植物大战僵尸中文版 植物大战僵尸下载 mac塔防游戏

一文回顾 Boundless Hackathon at Stanford 首期 Workshop

BlockChain先知

ps 2023 v24.6beta激活版下载 支持AI功能

Rose

Photoshop 2023下载 PS测试版下载 FireflyAI

乘云而上,山西软件行业CXO思享会在晋起航

说山水

鲲鹏DevKit助力海通证券高效开发互联网行情系统,性能提升26%

说山水

鲲鹏DevKit助力通付盾Web应用防火墙产品开发,性能提升45%+

说山水

模块二:微信朋友圈高性能复杂度

家有两宝

架构实战营 微信朋友圈高性能复杂度

如何在大学校园内合作运营共享电单车

共享电单车厂家

校内共享电单车 共享电动车投放 共享电单车合作 共享电单车厂家

Qcon 广州主题演讲:融云实时社区的海量消息分发实践

融云 RongCloud

通信 IM 社交 融云 Discord

华为教育中心:奇趣“童”行庆六一 多彩儿童应用助成长

科技热闻

C语言编程-结构体

芯动大师

数组 函数参数 6 月 优质更文活动

支持M1的苹果电脑视频下载器-Downie 4 Mac中文版

Rose

Mac 视频下载工具 Downie 4许可证 Downie 4中文版 Downie mac破解版

2023 重新开始

HoneyMoose

Android File Transfer for mac(强大的安卓文件传输工具)

Rose

安卓文件传输工具 Android File Transfer Android和mac互通

abaqus有限元仿真常见问题(一):数值仿真在产品研发中的作用

思茂信息

CAE abaqus abaqus软件 abaqus有限元仿真

提升您的 MQTT 云服务:深入探索 BYOC

EMQ映云科技

物联网 云服务 mqtt

Xamarin:使用C#移植Android操作系统_C#_赵劼_InfoQ精选文章