先看两则新闻。
 
一则来自新浪科技:
 
大意是说,针对谷歌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. discuze回放提示“抱歉,您的请求来路不正确或表单验证串不符,无法提交”

    不知从哪里看到文章,但是实用: 背景:discuze就单纯的录制一个注册脚本,日志中没有报错,在报告中就提示"抱歉,您的请求来路不正确或表单验证串不符,无法提交"",以下 ...

  2. 在 CentOS 里安装 BIND-UTILS 以使用 DIG、HOST 和 NSLOOKUP

    想用一下 dig 指令来进行域名设置的查询,结果 CentOS 提示没有此指令,然后想当然的以为就需要安装 DIG 软件包,可是查了查才知道实际上 dig.host.nslookup 这几个指令都在 ...

  3. (转).net项目技术选型总结

    原文作者:mcgrady 原文地址:.net项目技术选型总结 做.net开发已经几年了,也参与开发了很多大大小小的项目,所以现在希望总结出一套开发.net项目的常用技术,也为以后做项目技术选型的时候作 ...

  4. 一步步搭建自己的轻量级MVCphp框架-(一)什么是PHP框架以及MVC设计模式

    PHP框架 php框架对很多新手而言可能会觉得很难攀越,其实不然 ,只要知道一个框架的流程,明白原理了,基本类似框架都可以看懂,php框架真正的发展要从php5开始了,其实php4时代就有一些框架,但 ...

  5. Spring(3.2.3) - Beans(1): Spring 容器

    BeanFactory & ApplicationContext org.springframework.beans.factory.BeanFactory 是最基本的 Spring 容器接口 ...

  6. C# 4 dynamic 动态对象 动态类型转换

    public class User { //使用省缺参数,一般不需要再为多态做各种静态重载了 public User( string name = "anonym", string ...

  7. bootstrap学习起步篇:初识bootstrap之html5语法构建hello篇(一)

    目前选择使用bootstrap作为前端页面模板,是件很省心的事情.官网上给出的实例和教程也很多.在实际使用过程中,我们也许还要借助文档去了解它的元素和样式.但也不能减少我们使用他的兴趣. 我准备将其整 ...

  8. Aliyun OSS SDK 异步分块上传导致应用异常退出

    问题描述: 使用Aliyun OSS SDK的BeginUploadPart/EndUploadPart执行异步分块上传操作,程序出现错误并异常退出! 原因分析: Using .NET Framewo ...

  9. css笔记--web端小于1px设计的处理方法

    HTML代码 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UT ...

  10. StringBuilder和StringBuffer

    StringBuilder java.lang 类 StringBuilder java.lang.Object java.lang.StringBuilder 所有已实现的接口: Serializa ...