分享

Xamarin团队(原Mono团队)发布XobotOS源码,C# 实现的Android系统

 看见就非常 2012-05-16
Xamarin团队(前身为Mono团队)近来一直在尝试使用C#移植Android操作系统,并完全替代其中的Java代码。之前,该团队推出了Mono for Android,使得开发者可以使用C#来开发Android应用,提高已有.Net代码的重用率。

Xamarin团队称:
引用
Java并不是Android平台上开发原生应用的唯一方法,甚至不是最好的方法,我们为Android开发者带来了一个新的实现方式(Mono for Android)来替代Java,这是一个开源的.NET实现,可以让开发者使用C#创建更高效、更省电的Android应用程序,并能充分利用C#和.NET开发平台上的资源,跨平台共享除界面之外的代码,减少开发成本。

现在Xamarin在此基础上更进了一步,完全移除了Android中的Java/Dalvik虚拟机,用“更为成熟”的C#/Mono虚拟机替换,带来了XobotOS 操作系统。

XobotOS

XobotOS是Xamarin的研究项目,目的是探索将Android 4.0从Java/Dalvik移植到C#,并探索移植后的性能和内存占用情况。

Xamarin称,经过长时间的努力,目前已经将大部分的Android层完全改写为C#。下图是XobotOS在Linux工作站上的运行截图,完全没有Java的存在。



实现方式

Android的核心代码由数百万行Java代码构成,而XobotOS项目还需要和Android的新版本保持同步(事实上,XobotOS的工作从Android 2.x已经开始),工作量之巨大,只能通过机器自动转换来实现。

该团队利用了一个自动转换Java到C#的工具——Sharpen,并进行了许多改进,使该工具更加成熟,目前Sharpen的源码已随XobotOS发布。

性能对比

运行于Mono上的Android,与Dalvik相比,性能究竟如何?Xamarin团队称:

引用
一直以来,微软不断改进C#,使其代码优化更加容易。通过引入值类型,使得小型对象耗能更低。另外,虚拟方法现在是选择性加入,使得虚拟机性能优化更加容易。

在泛型实现上,Java和C#分道扬镳,Java采用了完全向后兼容,而C#在运行时上提供了支持,C#的做法更简单易用、高效和完善。

再则,Java和C#在语法和执行环境上都在不断改进,增加了大量的新特性,如动态编程、异步支持、迭代器、函数式编程组件、并行化等,而其中大量的特性来自于Don Syme(微软F#项目负责人)的研究。

另外,在过去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。
源代码

Xamarin团队已经将XobotOS的源代码发布在Github上。

XobotOS中各组件的源码基于这些组件上游供应商规定的许可协议,C#版本的Android基于Apache 2许可协议。XobotOS中还包含了Java/C#转换工具Sharpen的源代码,基于GPL许可协议。

地址:https://github.com/xamarin/XobotOS

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多