Xamarin 开发组

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

必赢56.ne娱乐 1

  原文链接

甲骨文和谷歌正就谷歌在Android中使用Java一案展开一场10亿美元的大较量。但是Java并非在Android中建立本地应用的唯一方法。事实上,它甚至不是最好的文法:Xamarin 开发组已经将C#提供给Android开发者作为一个高性能、低功耗的Java的替代语言。Xamarin 的平台,Mono,是.Net框架的一个开源的实现。它使得开发者用C#写成的程序,能运行在带有Java的操作系统上,然后与iOS和Windows Phone共享同一代码。

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

Xamarin团队近来一直在尝试使用C#移植Android操作系统,并完全替代其中的Java代码。之前,该团队推出了Mono for Android,使得开发者可以使用C#来开发Android应用,提高已有.Net代码的重用率。Xamarin团队称:引用Java并不是Android平台上开发原生应用的唯一方法,甚至不是最好的方法,我们为Android开发者带来了一个新的实现方式来替代Java,这是一个开源的.NET实现,可以让开发者使用C#创建更高效、更省电的Android应用程序,并能充分利用C#和.NET开发平台上的资源,跨平台共享除界面之外的代码,减少开发成本。现在Xamarin在此基础上更进了一步,完全移除了Android中的Java/Dalvik虚拟机,用“更为成熟”的C#/Mono虚拟机替换,带来了XobotOS 操作系统。XobotOSXobotOS是Xamarin的研究项目,目的是探索将Android 4.0从Java/Dalvik移植到C#,并探索移植后的性能和内存占用情况。Xamarin称,经过长时间的努力,目前已经将大部分的Android层完全改写为C#。下图是XobotOS在Linux工作站上的运行截图,完全没有Java的存在。实现方式Android的核心代码由数百万行Java代码构成,而XobotOS项目还需要和Android的新版本保持同步,工作量之巨大,只能通过机器自动转换来实现。该团队利用了一个自动转换Java到C#的工具——Sharpen,并进行了许多改进,使该工具更加成熟,目前Sharpen的源码已随XobotOS发布。性能对比运行于Mono上的Android,与Dalvik相比,性能究竟如何?Xamarin团队称:引用一直以来,微软不断改进C#,使其代码优化更加容易。通过引入值类型,使得小型对象耗能更低。另外,虚拟方法现在是选择性加入,使得虚拟机性能优化更加容易。在泛型实现上,Java和C#分道扬镳,Java采用了完全向后兼容,而C#在运行时上提供了支持,C#的做法更简单易用、高效和完善。再则,Java和C#在语法和执行环境上都在不断改进,增加了大量的新特性,如动态编程、异步支持、迭代器、函数式编程组件、并行化等,而其中大量的特性来自于Don Syme的研究。另外,在过去10年时间中,Mono作为一个虚拟机已经逐渐成熟,现在已经是第8代产品了。以上这些都是影响性能的因素。下图通过一个简单的二叉树实现,来对比Java/Dalvik和C#/Mono在结构体和泛型影响下的性能差别。未来计划Xamarin称,公司的目标是提供最好的移动应用开发平台,因此XobotOS不会是工作重心,不过这是一项非常有趣的实验,其中一些技术也可以用于未来的产品中。这些技术包括:直接访问Skia图形库:目前Mono for Android通过Java访问底层图形库,通过XobotOS中的代码,可以使用Mono的P/Invoke直接访问Skia的原生渲染代码。Java/C#转换工具:新版Sharpen已经作为XobotOS的一部分发布。使用C#代码替换Java代码:对于一些性能瓶颈的地方,可以使用C#来代替Java。源代码必赢56.ne娱乐 ,Xamarin团队已经将XobotOS的源代码发布在Github上。XobotOS中各组件的源码基于这些组件上游供应商规定的许可协议,C#版本的Android基于Apache 2许可协议。XobotOS中还包含了Java/C#转换工具Sharpen的源代码,基于GPL许可协议。地址: xamarin

  Xamarin 宣布它利用机器翻译将 Android 中的 JAVA 部分必赢官网 ,移植到了C#,创造出 XobotOS。开发者声称,运行在 Mono 上的 Android 的性能远胜于运行在 Dalvik 上的 Android。Mono 是微软 .NET 开源实现,Xamarin 是 Mono 创始人 Miguel de Icaza 成立的公司。开发者表示,XobotOS 只是一个实验性的研究项目,但结果令人鼓舞,他们计划将部分技术应用于 Mono for Android。

不同于Sun对Java的做法,微软向ECMA提交了C#和.NET VM标准化申请,并一路保证这些标准完全符合ISO牢固专利承诺。.NET框架同样也为微软受法律约束的社区承诺所覆盖。

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

必赢56.ne娱乐 2

去年七月,Xamarin 开发组在波士顿小聚,讨论Mono在iOS和Android中的成长。查尔斯河一天的荡舟过后的晚宴席间,开发组将注意力转向了如何提升Android上应用的性能并降低能耗,使他们的Mono更加适合于Android。

Xamarin团队在博客里写到:

相关链接:

一次次地,开发组回到最根本的话题:Dalvik是个年轻的虚拟机,它不如Mono那么高效与协调,并受制于Java的许多性能极限,而且享受不到来自甲骨文的热点的高端优化。那次晚宴开发组冒出的一个疯狂的想法,是将Android的源码翻译成C#。Android将能从C#的性能特性如结构体、P/调用、真实泛型以及他们更加成熟的运行时中受益。

去年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。

  [博文]Android Ported to C#

虽然七月什么也没有发生,但这一想法深深扎根在了开发组的心里。

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

  [源代码]XobotOS - Android ported to C#

快进几个月:专用于Android的Mono做得非常好,开发组开始再次考虑提升自己产品在Android上的性能。如果扫除Java,使用更快的 C#并同时去除Dalvik的极限,结果将会怎么样?Xamarin 能否创造出一个完全不含Java,并且突破Dalvik VM极限的Android电话?

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团队希望更多的人能从中获利,并贡献出自己的力量。

它如此疯狂,Xamarin 开发组决定尝试。于是他们开始了一个小型的专案工作组项目,致力于做一个从Android到C#的机器翻译工作。他们称这一项目为XobotOS。

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