首先,问题就不对,安卓是一种基于Linux的自由及开放源代码的操作系统。
在被谷歌收购前不过在那之前的一年,Rubin计划为数码相机开发了Android操作系统(比如三星Galaxy NX)。不过他后来似乎意识到,智能手机才是未来的趋势而并非是数码相机,并且相应的调整了该平台的发展方向,提出了一个“开源手持设备系统解决方案”。
Android操作系统使用了Linux核心的一个分支,内存调度机制、文件存储机制均与后者一致,系统底层使用C语言编写。由于移除了GNU库,Android无法Linux的应用,其多数应用使用Java编写(也能用C语言编写使用NDK的APP),运行与Dalvik虚拟机或ART运行环境中。
Android 是运行于Linux kernel上,但并不是GNU/Linux。因为在一般GNU/Linux 里支持的功能,Android 大都没有支持,包括Cairo、X11、Alsa、FFmpeg、GTK、Pango及Glibc等都被移除掉了。Android又以Bionic 取代Glibc、以Skia 取代Cairo、再以opencore取代FFmpeg等等。Android 为了达到商业应用,必须移除被GNU GPL授权证所约束的部份,例如Android将驱动程序移到 Userspace,使得Linux driver 与 Linux kernel彻底分开。Bionic/Libc/Kernel/ 并非标准的Kernel header files。Android 的 Kernel header 是利用工具由 Linux Kernel header 所产生的,这样做是为了保留常数、数据结构与宏。
Android 的 Linux kernel控制包括安全(Security),存储器管理(Memory Management),程序管理(Process Management),网络堆栈(Network Stack),驱动程序模型(Driver Model)等。
所以,正确的提问应该是:
为啥安卓开发者选是java而不是C#?Java语法相对简单,与C语言和C++语言很接近,但却丢弃了C++很少使用的、很难理解的、令人迷惑的那些语言特性,虽然有时可能会出现运行效率不佳,但是开发效率比较高。其垃圾回收,异常处理,无指针等特性,让即便是一般的程序员也能较为容易的开发出相对健壮的程序。
如果想让App在各种不同的平台设备上运行,那么所采用的开发语言就必须跨平台,通过跨平台屏蔽底层硬件的差异,避免让开发者为了考虑底层硬件的不同写不同的代码。而跨平台是Java语言最大的特点,它能在任何安装了Java虚拟机的设备运行,不管目标平台是什么架构,甚至日常的机顶盒、洗衣机,只要有JVM就能运行。
完美注释Sun说的 “一次编写,到处运行”。总结,选择java主要为了省事。