如果Android和C#在一起?

先看两则新闻。

一则来自新浪科技:

谷歌上诉遭拒绝 需向甲骨文支付Java使用费

大意是说,针对谷歌Android操作系统侵犯甲骨文Java知识产权的指控,美国法院最近做出了有利于甲骨文的裁决。如果裁决生效的话,谷歌今后要继续在Android中使用Java的话很可能得向甲骨文交保护费了。

另一则消息来源于CNBeta:

微软无间道?Windows 10预览版内藏完整Android子系统

有好事者在最新的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#恐怕也有相当的难度。不过话说回来,对于开源支持者而言,现在的微软看上去应该要比嗜财如命的甲骨文似乎形象还要好上一些。不是吗?

时间: 2024-12-27 13:35:31

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

android开发之onCreate( )方法详解

onCreate( )方法是android应用程序中最常见的方法之一,那么,我们在使用onCreate()方法的时候应该注意哪些问题呢? 先看看Google Android Developers官网上的解释: onCreate(Bundle) is where you initialize your activity. Most importantly, here you will usually call setContentView(int) with a layout resource d

如何用 Android Studio 导入开源项目以及常见错误的解决办法

声明:这篇文章完全来自这篇文章,感谢大神的相助.这篇文章纯粹是为了备份. 本篇以Github上最热门的MaterialDesign库,MaterialDesignLibrary来介绍怎样使用Android Sudio导入开源项目的,如果你和我一样刚刚从Eclipse转到AS,那本篇文章非常适合你. 如果不引入任何第三方库,不做自动化分渠道打包等操作,那可以在完全不了解Gradle的情况下进行Android项目的开发.但如果要想导入Github上的热门项目,必须首先熟悉Gradle. 1. Gra

Android——调用高德地图API前期准备

1.登陆高德开放平台注册账号http://lbs.amap.com/ 2.创建自己的应用并且添加新key 获取发布版安全码获取方法: 在AndroidStudio的Terminal中编译: 输入如下图: 开发版安全码获取: 开发版获取的另一种方法:(和获取发布版本一样在AndroidStudio的Terminal中编译 只是keystore的路径改成debug.keystore    密钥库口令默认是android) 创建key成功 得到key: 前期准备完成 下一篇文章是开发配置 备忘 ,也希

Android小例子:使用反射机制来读取图片制作一个图片浏览器

效果图: 工程文件夹: 该例子可供于新手参考练习,如果有哪里不对的地方,望指正>-< <黑幕下的人> java代码(MainActivity.java): package com.example.imageswitchtest; import java.lang.reflect.Field; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.v

Android Studio 安装及常见问题

今年放假比去年早了一些,就提前回来了.感觉挺爽,结果教研室电脑没有带回来,悲剧是导师让我维护一下以前的项目,只能屁颠屁颠的搞起呀.只能用自己的笔记本搭建android开发环境.由于前阶段听说Android Studio用着爽歪歪,于是尝试在超卡的笔记本上跑Android Studio.哇咔咔,费了九牛二虎之力终于将Android Studio玩转了.先上个图,快过年了,祝大家新年快乐! Android官网也开始推广Android Studio了,以前官网好像提供Eclipse和ADT打包下载,现

Android 导航条效果实现(六) TabLayout+ViewPager+Fragment

TabLayout 一.继承结构 public class TabLayout extends HorizontalScrollView java.lang.Object ? android.view.View ? android.view.ViewGroup ? android.widget.FrameLayout ? android.widget.HorizontalScrollView ? android.support.design.widget.TabLayout 二.TabLayou

Android Studio 连接真机不识别

本人也是初学..写错的请大神多多批评指正! 不胜荣幸!! 强烈推荐使用真机测试..除非是最后关头要测试各个Android系统版本.. 本人遇到的连不上的原因有以下几种: 1  --   手机设置问题.开USB调试   方法:  手机设置 - 开发人员选项 - USB调试  - 勾选 2  --   数据线问题.  有的数据线只能用来充电,有的可以连接存储.识别方法很简单..插上机器有USB存储设备的提示的就可以用.另外数据线如果都露线皮了..就赶紧扔了.十块八块的总比你为这个破问题纠结一下午的好

android Activity 的生命周期 以及横屏竖屏切换时 Activity 的状态变化

生命周期Android 系统在Activity 生命周期中加入一些钩子,我们可以在这些系统预留的钩子中做一些事情.例举了 7 个常用的钩子:protected void onCreate(Bundle savedInstanceState)protected void onStart()protected void onResume()protected void onPause()protected void onStop()protected void onRestart()protecte

谈谈-Android中的接口回调技术

Android中的接口回调技术有很多应用的场景,最常见的:Activity(人机交互的端口)的UI界面中定义了Button,点击该Button时,执行某个逻辑. 下面参见上述执行的模型,讲述James对Android接口回调技术的理解(结合前人的知识和自己的实践). 使用一个比喻很形象地说明:客户端有个疑问打电话请教服务端,但服务端无法现场给出解答,相互之间约定:服务端一旦有答案,使用电话的方式反馈给客户端. 以上有三个主体:客户端.服务端和接口(方式). 接口回调的原理框图说明: Demo界面

修改Android Studio默认的API Level(SDK版本)

原文:修改Android Studio默认的API Level(SDK版本) Android Studio(2.1.2)新建工程的时候只会让你选择最低支持的SDK版本,默认的目标编译SDK版本会以系统当前SDK中最新SDK platform作为目标的API Level.但是很多时候我们并不需要最新的SDK版本,如何修改呢? 方法是:修改工程目录中的Gradle Scripts->build.gradle(Module:app)中的相关行,具体见下图: 当然也可以图形化操作,右键工程目录选择"