解析Android应用程序构成原理

移动开发 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发行版不一样:

[[8939]]

这就是说,与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" 程序也可以碰得到,这样只要把"开个小门"的程序代码公布就行啦。”

【编辑推荐】

  1. 新一代的Android手机介绍 
  2. 深度剖析Android SDK版本介绍 
  3. 谷歌Android手机能否站稳中国 
  4. PythonAndroid深度剖析Android应用程序的四种构 造块 
  5. 探秘与众不同的Android系统? 
责任编辑:chenqingxiang 来源: 和讯博客
相关推荐

2010-02-04 10:17:38

Android应用程序

2010-02-06 15:26:11

Android应用程序

2010-02-07 10:21:27

Android应用程序

2010-01-25 17:14:44

Android应用程序

2011-06-09 09:12:12

QT symbian

2022-12-25 18:03:13

Debug原理软件

2011-09-01 10:01:35

PhoneGap应用程序GoodDay

2009-12-21 15:48:29

WCF应用程序

2010-01-25 13:29:53

Android本地应用

2011-08-12 14:54:45

iPhone委托

2011-11-03 09:41:35

Android签名安全性

2009-06-10 11:47:32

Android应用程序模块

2011-05-10 13:56:27

Android应用程序Android MarAndroid

2011-05-27 10:13:39

Android 签名

2010-02-05 18:21:24

Android应用程序

2017-03-02 11:10:39

AndroidMVVM应用程序

2010-02-07 10:25:11

Android

2011-08-17 16:12:20

iPhone应用程序

2011-07-08 13:44:08

Xcode 打包

2009-10-29 13:16:15

ADO.NET应用程序
点赞
收藏

51CTO技术栈公众号