先看两则新闻。
 
一则来自新浪科技:
 
大意是说,针对谷歌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. WP8.1 RSA 加解密实例(导入公钥私钥)

    因项目上需要用到,之前在WP8.0的环境上调试通过,现在在开发8.1时发现已不支持原来的加密库,所以无法使用以前的方法,不得已,去寻找windows命名空间下RSA的加解密方法,经过几天的尝试,将解决 ...

  2. ASP.NET中处理异常的几种方式

    1.程序中使用try catch 对于预知会发生异常的代码段使用try catch主动捕获异常,适用于提示给用户或跳转到错误页面,或者通过其它方式处理异常(日志.通知等). int i = 10; i ...

  3. NUI相关术语

    分享一下微软资深企业架构师.应用开发专家余涛先生书中所谈到的相关术语,以便查阅,部分术语根据个人理解加入了细化内容: 1.波束形成算法(BeamformingAlgorithm) 基于现行阵列的阵列信 ...

  4. android之回调函数的意义

    本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/17483273) 看完这篇文后大家可以看看这个http://blog. ...

  5. android NDK 开发步骤

    NDK开发一般分为一下几个步骤:(默认你已经安装好了NDK和android开发环境) 1.创建一个项目 2.创建JNI目录 3.编写nativejava层方法 4.生成JNI头文件 (1)编写java ...

  6. iOS - 文件与数据(File & Data)

    01 推出系统前的时间处理 --- 实现监听和处理程序退出事件的功能 //视图已经加载过时调用 - (void)viewDidLoad { [super viewDidLoad]; // Do any ...

  7. Cocos中的观察者设计模式与通知机制

    观察者(Observer)模式也叫发布/订阅(Publish/Subscribe)模式,是 MVC( 模型-视图-控制器)模式的重要组成部分.天气一直是英国人喜欢讨论的话题,而最近几年天气的变化也成为 ...

  8. iOS 网络 -- cocoaPods 安装和使用教程

    Code4App 原创文章.转载请注明出处:http://code4app.com/article/cocoapods-install-usage CocoaPods 是什么? 当你开发iOS应用时, ...

  9. Android的SharedPreferences实用技巧

    转自:http://blog.csdn.net/jingfeizhu/article/details/10017779 SharedPreferences也是一种轻型的数据存储方式,它的本质是基于XM ...

  10. 方法:怎么用ionic命令行调试你的ionic app

    官网上有很详细的解说  http://blog.ionic.io/live-reload-all-things-ionic-cli/ 下面说说我自己的调试过程(android版): 首先用命令行进入你 ...