先看两则新闻。
 
一则来自新浪科技:
 
大意是说,针对谷歌Android操作系统侵犯甲骨文Java知识产权的指控,美国法院最近做出了有利于甲骨文的裁决。如果裁决生效的话,谷歌今后要继续在Android中使用Java的话很可能得向甲骨文交保护费了。
 
 
另一则消息来源于CNBeta:
 
有好事者在最新的Win10预览版里发现了完整的Android子系统。再联系Visual Studio 2015内置支持Android开发的消息,看起来微软是打算转向彻底拥抱Android的战略了,甚至为此牺牲自己的亲儿子WP也在所不惜。
 
 
这两则都算是不大不小的新闻,单独看的话也不算太意外,但恰好几乎发生在同一时间点,连起来想一想,接下来会发生什么?就有点意思了。
 
众所周知,谷歌和甲骨文之间关于Java的官司来来回回已经拉了多年的锯,一直悬而未决。虽说惟利是图的甲骨文在整个业界口碑都谈不上好,但毕竟打官司的本事不是说着玩的,谷歌当然不希望总有这么一把达摩克利斯之剑吊在自己头上, 因此公司内部寻找Java替代品的工作其实已经进行了很久了。谷歌并不缺技术,麾下几种语言(Python, Go, Dart)都先后传出过有望即位的传闻, 但谷歌自己的态度却颇为暧昧。笔者冒昧猜想一下谷歌对这几种语言的看法:Python做快速工具很不错,但作为系统级语言还是差点火候,这几年的发展也算是差强人意,甚至有逐渐被取代的趋势;Go和Dart潜力是有的,奈何毕竟年轻,基础设施还相当不足,生态方面也还没形成足够强大的社区,继续培养可也,上位还言之过早。
 
在过去,谷歌尚可秉持物竞天择适者生存的态度,听凭让这些技术自由生长,最后胜出者就是新的太子。但时间不等人,小阿哥们嘴上毛还没长齐,那壁厢甲骨文已经占住大门口,敲碗只等收钱了。就算现在不见得马上大出血,尽快采取应对措施也是刻不容缓了。谷歌,你将为之奈何?
 
于是,一个意外的选择项出现了:如果从谷歌之外寻找一个相对成熟的方案来替代Java呢?放眼业界,要找一个Java替代品的话,那么答案呼之欲出:C#。
 
如果单看本身的特性,那么C#对Android开发来说几乎是完美的答案。C#在绝大多数语言特性上可以毫无问题地取代Java;在GUI开发方面有多年积累;有着还不错的社区和相当庞大的开发者群体;有完善的开发包和工具链;甚至有类似ikvm这样的神器可以直接把Java程序转过来。更不用说Xamarin已经支持用C#开发Android程序有年了,比起其他工具还需要大量的底层适配工作,用C#简直就是开箱即用的解决方案。何乐而不为呢?
 
 
当然问题也有,而且很多。
 
微软和谷歌在过去很长一段时间里都是死敌,当然最主要的原因是老鲍统治下的微软有着浓厚的Windows情结,一切影响到Windows生存的都是敌人。因为搜索快速蹿红、甚至看起来有望称霸整个网络的谷歌当然就成了微软的眼中钉肉中刺,而在少年气盛的谷歌眼里,微软无非是头笨重点的恐龙罢了。不过这些年业界风云变幻,大家以为已经垂死的苹果忽然之间风云际会,Facebook等一干新贵纷纷蹿红,后面还要提防甲骨文这些老油条暗地下绊子,谷歌这些些年的日子也绝对不好过。再说微软,既然主动拥抱Android,那自然已经不再视谷歌为敌人了。微软未来的主要发展方向将在于云端,不再将Bing和WP作为主要目标,自然和谷歌的利益冲突少了很多。换言之,两家现在虽然偶尔还是要干上一架,不过早已不是你死我活的关系了。
 
更何况,它们两个现在有着共同的死敌:苹果。谚语说,敌人的敌人就是朋友。如果能够对抗苹果的话,为什么谷歌和微软不能走到一起?
 
另一个问题在于企业文化。谷歌喜欢Linux,喜欢开源,拥抱工程师文化,排斥层级管理,这些都是和(老)微软恰恰相反的。当然微软现在也有所转变,主动开源了多项技术,甚至纳德拉说出了“微软喜欢Linux”这样的话,这在以前是不可思议的。比较有把握的是,微软不太可能象甲骨文那样为使用C#语言而收费(应该说微软从Android收的专利费其实也不少了)。但C#语言的控制权毕竟是掌握在微软手上,只要一天尚未彻底开源,谷歌对之心存疑虑也是可以想见的。这一点上就看两家公司如何博弈了。
 
最后还有一点技术问题。由于历史原因,微软的开发平台和类Unix平台(包括Linux和Mac)的API差异极大,再加上微软服务器系统需要授权费、深度定制困难、没有好用的包管理机制等原因,造成很多开源技术根本不鸟Windows,让微软平台和开源平台无缝融合也是不那么容易的。由于思想分歧和语言圣战的影响,微软社区和开源社区彼此之间一贯存在相互敌视的态度,这个隔阂不是那么容易消除的,让从前的Java开发者转移到C#恐怕也有相当的难度。不过话说回来,对于开源支持者而言,现在的微软看上去应该要比嗜财如命的甲骨文似乎形象还要好上一些。不是吗?

如果Android和C#在一起?的更多相关文章

  1. 【原】Android热更新开源项目Tinker源码解析系列之三:so热更新

    本系列将从以下三个方面对Tinker进行源码解析: Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Android热更新开源项目Tinker源码解析系列之二:资源文件热更新 A ...

  2. 配置android sdk 环境

    1:下载adnroid sdk安装包 官方下载地址无法打开,没有vpn,使用下面这个地址下载,地址:http://www.android-studio.org/

  3. Android SwipeRefreshLayout 下拉刷新——Hi_博客 Android App 开发笔记

    以前写下拉刷新 感觉好费劲,要判断ListView是否滚到顶部,还要加载头布局,还要控制 头布局的状态,等等一大堆.感觉麻烦死了.今天学习了SwipeRefreshLayout 的用法,来分享一下,有 ...

  4. Android Studio配置 AndroidAnnotations——Hi_博客 Android App 开发笔记

    以前用Eclicps 用习惯了现在 想学学 用Android Studio 两天的钻研终于 在我电脑上装了一个Android Studio 并完成了AndroidAnnotations 的配置. An ...

  5. Android请求网络共通类——Hi_博客 Android App 开发笔记

    今天 ,来分享一下 ,一个博客App的开发过程,以前也没开发过这种类型App 的经验,求大神们轻点喷. 首先我们要创建一个Andriod 项目 因为要从网络请求数据所以我们先来一个请求网络的共通类. ...

  6. 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新

    [原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...

  7. 【原】Android热更新开源项目Tinker源码解析系列之二:资源文件热更新

    上一篇文章介绍了Dex文件的热更新流程,本文将会分析Tinker中对资源文件的热更新流程. 同Dex,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方 ...

  8. Android Studio 多个编译环境配置 多渠道打包 APK输出配置

    看完这篇你学到什么: 熟悉gradle的构建配置 熟悉代码构建环境的目录结构,你知道的不仅仅是只有src/main 开发.生成环境等等环境可以任意切换打包 多渠道打包 APK输出文件配置 需求 一般我 ...

  9. JS调用Android、Ios原生控件

    在上一篇博客中已经和大家聊了,关于JS与Android.Ios原生控件之间相互通信的详细代码实现,今天我们一起聊一下JS调用Android.Ios通信的相同点和不同点,以便帮助我们在进行混合式开发时, ...

  10. Android UI体验之全屏沉浸式透明状态栏效果

    前言: Android 4.4之后谷歌提供了沉浸式全屏体验, 在沉浸式全屏模式下, 状态栏. 虚拟按键动态隐藏, 应用可以使用完整的屏幕空间, 按照 Google 的说法, 给用户一种 身临其境 的体 ...

随机推荐

  1. linq检索带命名空间的xml

    XElement el = XElement.Load(fil); XNamespace ns = "http://schemas.microsoft.com/ado/2009/11/edm ...

  2. javascript事件学习笔记

    事件冒泡 并不是所有的事件都支持事件冒泡,比如submit ,focus,blur不支持事件冒泡,mouseover,mouseout虽然支持冒泡,但是一般不用,因为需要经常计算元素的位置,消耗比较大 ...

  3. Tomcat发生异常

    The Apache Tomcat Native library which allows optimal performance in production environments was not ...

  4. Apache Commons 简述

    Apache Commons 是一个关注于可复用的 Java 组件的 Apache 项目.Apache Commons 由三部分构成: Commons Proper - 一个可复用的 Java 组件库 ...

  5. 为EditText设置OnTouchListener事件监听

    在项目中需要在EditText输入前,判断某个值是否已经有值,有才可以输入,为NULL值则提示不让输入,先填写指定的编辑框 自己试过监听获取焦点事件,来设置setFocusable(true)或者se ...

  6. SQLSERVER2012数据库还原

    (1)还原已存在数据库 还原时提示失败,因为数据库正在使用,无法获得独占访问权.解决办法,先分离已存在的数据库,再执行还原操作. 确定后居然成功了,因为我是先使用(2)还原数据库后直接尝试(1)方法还 ...

  7. [转]WCF 4 安全性和 WIF 简介

      转自:http://www.cnblogs.com/WizardWu/archive/2010/10/04/1841793.html 本帖简介 .NET 新一代的 Windows Identity ...

  8. iOS开发——model类模板(过滤null和ID)

            说明:model类模板已默认过滤null值,附加特殊情况的关键字ID名的冲突(需手动去掉注释代码).MyMessageModel为示例的名字.可以自己随便起. 1.自己创建一个继承与N ...

  9. 【墙裂推荐】大学生如何学习WEB开发

    每天网络上有上万条Web招聘职位,招聘要求很简单: 会JavaScript,会CSS,能开发网页,能设计网页. 但我们真正面试时才发现:都是些很小很小的知识点! 我们没有实践过,没有碰到过,头脑一片茫 ...

  10. Script 代码段

    script代码段 1.script代码段的执行 在Javascript代码中,可以使用script作为基本标识,script代码段在运行过程中是分段解析与执行的. 2.script代码段执行流程 在 ...