Android手机开发专题博客

Android手机开发专题博客,为您精选安卓手机开发教程,助您手机开发愉快!

公告信息
欢迎光临Android手机开发专题博客,祝您手机开发愉快!
文章档案

Android入门基础介绍

Android 基础介绍,何为Android?

Android:它并非传统意义上Linux发行版或是规范,也不仅是一个可替换组件的集合,Android其实是一个用来连接设备的软件组团(块),正如下图所示:

Android与Linux

Android的底层是一个在合理地不断更新的Linux内核(在我现在运行在Nexus One上的Froyo的内核是版本2.6.32),并包括了一些我们编写的的电源管理扩展。但(我们)试图将这个模块合并至主流Linux的事情被放大并成为了公众事件,结果最后果断被和谐了(is byno means over)。

Android运行于Linux内核上,但我并不认为它能称为一个发行版,因为它并没有很多大家认为一个发行版该有的东西:如库,Shells,编辑器,GUI及编程框架等。事实上,当你第一次在一个Android设备上使用shell(?)的时候,你就会发现,它很明显是一个相当意义上的“裸核”。

如果它是一个发行版,它将是发行量相当大的版本之一,在2010年的晚些时候大概一天20万份。但是没人会去数这些东西,并且还有巨量的嵌入式Linux在难以计数的消费电子产品中被分发。所以它明显不像某些人所宣称的那样是“最流行的Linux发行版”。

Android与Dalvik

另一个重要部分则是Dalvik,包括虚拟机和整个的运行时基件(群)(basic runtime essentials),它们被设计得精巧独特。鉴于最近的测试,作为移动设备的应用底层,它们运行得相当良好。

所有你用于创建Android应用的标准API都是依照Dalvik类,接口,对象和方法等来定义的。实际上,它们中的一部分只是Dalvik码与本地执行中简单的中间层而已(thin layers of Dalvik code over native implementations)。

使用JNI(协议)来回调用Dalvik和本地代码是可行的并且是个惯例,由于运行在Dalvik上的东西与运行在Java虚拟机上的字节码并没有半丁点的相像,所以这就是一个灵巧的把戏(a neat trick)(译者:这句话没看很懂…)。

代码如何生成

目前本地代码或多或少只能靠编译C或C++代码实现,你不必知道太多。Dalvik码目前靠生成Java字节码并翻译它们产生,你也不必知道太多。

我再稍微强调一下这点,Android应用是被定义为运行在平台上并且调用系统API的的代码。只要一个应用做好这些事情,没人会关心它是如何生成的。

特殊程序

有的图片(应该是指官方手册里的那幅图)有点误导性,因为有些应用是由Google提供的并且有时被视为Android的一部分,如:拨号程序、电话、联系、日历和Gmail等。他们中的大部分是开源并且可替换的(有的已经被手机厂商替换了),其余的小部分是商业且私有的,如Google地图和电子市场等。

Android与开源

在上面那张大图里,大部分绿色的东西是基于Apache许可证的,其余的基于GPL、LGPL和BSD许可证,同时还包括了一些非开源底层设备驱动和非Google的软件(大部分不开源)。

Android框架

这是仅在Android里定义的东西,基本上所有东西都是Google编写的,所以就别指望在其他良好配置过的GNU/Linux系统里找到它们了。如何良好地调用这些库是developer.android.com上大量文章,无尽的mailinglists,样例站点和不断增长的图书们的主题。

(所以在这俺就不说了……)

标准库

“标准”这词在这里表示“对在一个开源环境下工作的程序员来说是通用的”,图片并不是很便于理解(这点)。

有相当部分的人,包括我,有些过于强调了Harmony类库的作用(,不过这是不对的)。首先,Android的选择里没有包含很多东西,如:AWT、Swing、OMG CORBA等,对于使用Android框架的应用来说,这些都是多余的。

并且,如果粗略估算一下这幅图里所有东西的代码量,Harmony库大约只占了一半不到。我并不是在无视Harmony类库,这是一个了不起的项目,并且我也是其拥趸之一。但这并不能说明Android就只是Dalvik和Harmony库的组合。




APP里有什么?

一个Android应用保存在一个被称为APK,但其实只是普通ZIP文档的文件里。一个特殊的内部文件配置使其能运行在合适的地方而无需解压。它们没什么神奇的,你可以email或把他们放到U盘里,也可以用解压工具解压它们。

Android Manifest是应用与系统之间的接口,这是我在这里唯一能说的。因为这是整个应用的关键,完全值得用巨大的篇幅来讨论。

(所以在这俺也不多说了……)

Resource bundle(资源簇)包含了应用所需要的音频、视频、图像等等文件,而不用从网络即时加载。

是否需要本地调用?

目前大部分程序是基于Dalvik的,这里的“大部分”是指“除了游戏外”。游戏开发者通常希望能使用C和C++进行编码。Dalvik提供了简单并且快速的方法来调用OpenGL及所有的手机硬件,但游戏开发者可不太喜欢虚拟机这玩意儿,所以他们使用Android NDK

如果你是用JAVA编程,你可以使用Eclipse和一系列相当不错的工具集,这些东西令入门门槛变得相当得低。如果你是用NDK编程,你就需要做亲自做大量的生成时的机械工作(build-time machinery),而且没有一些优秀的调试和配置工具,更别提移植代码到别的CPU架构上运行。不过游戏开发者们就是这样痛并快乐着。

总结:

读完以上内容,希望对于进入Android手机开发的开发者们,有个基础的认识!

新浪微博粉丝精灵,刷粉丝、刷评论、刷转发、企业商家微博营销必备工具"

2011/9/5 9:20:10 | android开发入门 | |

  • 发表评论