解析Android应用程序构成原理


  本文标签:Android应用程序

  Android应用程序是由java语言开发的也只能用java语言开发,Google对Android采用了一种全面霸权式的管理,完全不是其他开源软件的开发方式,一切都由Google说了算,很多地方是垄断形式的  。

  外界不得而知  。”没有想到,仅仅过了两天,担忧就变成了现实  。Linux Kernel的维护者Greg Kroah-Hartman宣布,将Android 代码从 Linux kernel 代码库中删除  。这意味着,Linux Kernel的开发小组不认可Android的贡献,两者产生了冲突  。消息公布以后  。

  外界普遍觉得惊讶和可惜  。好不容易,才有了一个这么受欢迎的开源手机系统,应该齐心协力、共同开发才对,为什么要“窝里斗”呢?到底是什么矛盾,使得Linux Kernel小组剔除Android代码呢?

  Greg Kroah-Hartman写了一篇详细的文章,解释这个决定  。下面就来看看,他是怎么说的,以及Android到底是一个什么样的系统  。在这之前,你最好知道Greg Kroah-Hartman是谁  。他是目前Linux Kernel的核心开发人员,负责stable软件包的发布  。

  就是说,每一个新版本的Linux Kernel,都是经过他的手流出来的  。此外,他还负责硬件驱动的部署  。而他的手机就是HTC G1,每天都在使用  。所以,他是绝对有资格谈论这个问题的,他的看法代表了Linux社区对Android的看法  。首先,他指出Android和其他的Linux发行版不一样:

  这就是说,与Ubuntu、Debian、Redhat这样的传统Linux发行版相比,只有系统的底层结构是一样的,其他东西在Android 里都不一样,尤其是程序员的编程接口是完全不同的  。因此,Android应用程序都必须重新写过,现存的Linux程序无法移植上去  。所以,从严格意义上说,Android是一种全新的系统,它与Linux的距离,比Mac OS与Linux的距离还要远  。

  它解决了长期令手机制造商头痛不已的问题:业界缺乏一个开源的Java虚拟机,以及统一的应用程序接口  。现在,程序员只要写一次程序,就能在各种手机硬件平台之上使用  。”

  这段话解释了,为什么Android应用程序,都必须用Java语言开发  。因为不这样做的话,没法让程序做到硬件无关  。且慢,这真的是理由吗?传统的Linux系统,也并不依赖特定的硬件啊!只要把源代码根据不同的平台,分别编译一下,同一个程序不也照样可以在不同的硬件架构、不同的Linux发行版中使用吗?

  这下问题来了:如果你是硬件厂商,希望你的硬件能在 Linux kernel 下运作,那么就必须要有驱动程序  。如果驱动程序的程序代码公开,等于硬件规格也公开的差不多了  。许多厂商不愿意这么做,所以就提供编好的驱动程序,但不提供原始码  。

  Android 的重点就是商业应用,Google采用了一些手法来绕过这问题  。他们把驱动程序移到 "userspace",也就是说,把驱动程序变成在 Linux kernel 上头跑,而不是一起跑的东西,这样就可以避过GPL  。然后,在 kernel 这边开个小门,让本来不能直接控制到硬件的 "userspace" 程序也可以碰得到,这样只要把"开个小门"的程序代码公布就行啦  。”