先看两则新闻。
 
一则来自新浪科技:
 
大意是说,针对谷歌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. 开始学习css

    今天开始学习css:应用一本<HTML5与CSS3网页设计基础> 先学习css样式规则声明. Body{ color:blue} 对应:选择符:{声明属性:声明值}: Background ...

  2. Lombok(1.14.8) - @Getter, @Setter, @ToString, @EqualsAndHashCode & @Data

    @Getter / @Setter @Getter 和 @Setter,分别实现了 Gette r和 Setter 方法. package com.huey.hello.bean; import ja ...

  3. asp.net常见面试题(一)

    1.索引器 class Player { ]; public int this[int index] { get { || index >= ) { ; } else { return arr[ ...

  4. Javascript之响应式相册

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...

  5. Commons-logging + Log4j

    一.Commons-logging能帮我们做什么? 1.提供一个统一的日志接口,简单了操作,同时避免项目与某个日志实现系统紧密耦合 2.自动选择适当的日志实现系统 a.classpath下查找comm ...

  6. 第一篇、微信小程序_01计算器

    官方文档地址:https://mp.weixin.qq.com/debug/wxadoc/dev/index.html 一.计算器的首页布局 第一部分WXML: <view class=&quo ...

  7. Swift内存管理-示例讲解

    具体而言,Swift中的ARC内存管理是对引用类型的管理,即对类所创建的对象采用ARC管理.而对于值类型,如整型.浮点型.布尔型.字符串.元组.集合.枚举和结构体等,是由处理器自动管理的,程序员不需要 ...

  8. Caching和Purgeable Memory (译)

    Caching和Purgeable Memory对于开发者来说是一个至关重要的资源,尤其是当我们需要处理那些需要超大内存以及计算时间的对象或者是当计算机向磁盘写入数据时导致应用程序陷入停滞时特别有用处 ...

  9. XMPP登录应用

    一.导入框架 1.XMMP框架,写入头文件,设置XMPPStreamDelegate代理,定义 XMPPStream *_xmppStream; 2.libresolv.dylib 3.libxml2 ...

  10. Tab 防刷新

    今天发现项目中有个小毛病,就是tab老是刷新,就上网Copy了一份防止刷新的Tab例子,谢咯. 贴上来参考一下: <!DOCTYPE html PUBLIC "-//W3C//DTD ...