第一章 Android系统介绍

来源:互联网 发布:dns域名污染 编辑:程序博客网 时间:2024/06/05 00:16

第一章 Android系统介绍

星期二,06/08/2010 - 12:10 — william

Android系统是由Google主导的,由OHA(开放手机联盟,Open HandsetAlliance)开发的一个操作系统,最初它主要应用于手机设备。它设计之出就表现出了完全的开放性和强大的可扩展性,因此已经成为最为流行的潜入式设备操作系统之一,如上网本、机顶盒、全球定位设备、车载设备、电视机等。Android给设备带来了全新的网络应用体验。

1.1  Android系统框架

Android系统是基于Linux和Java技术,它在底层采用Linux内核和本地库,在上层提供Java支持框架和开发接口。它借助于Linux强大的稳定性、开放性和可移植性,Java语言开发的广泛性、简单性和可移植性,一经推出就受动广泛关注和欢迎,在嵌入式开发中产生比较深远的影响。

图1.1 Android系统架构

考虑到性能的问题,Google没有采用Sun的基于堆栈的虚拟机,而是开发了一个基于寄存器的Android虚拟机-Dalvik虚拟机。当然Android系统提供了一个工具用来把Java虚拟机格式转换为Daleik虚拟机格式。不过Android仅支持有限的Java运行库,因此不是所有的Java程序都可以在Android里直接编译运行。

当然任何一个系统都有其固有个缺点,而且它就隐藏在它的优点之中,Android也不例外。首先Android系统的开放性导致任何厂家都可以修改定制而推出自己的Android系统,这就导致了尽管设备运行的系统都是Android,但运行的程序就或多或少不兼容,这对第三方程序开发员人来说不是个好消息,标准的不统一势必会影响的Android程序的开发使用。其次,尽管Android系统是基于Linux和Java的,但由于它开发了一套独立的UI系统,它完全不兼容现有的Linux和Java应用程序,这不仅是浪费了现有的开发资源,而且是极大的浪费了未来的开发资源。不管Android社区有多大,比起Linux开源社区来说,它也是大海中的一点水,这是否会给对手以机会呢?如Intel的Moblin系统、Nokia的Maemo系统以及Ubuntu的上网本系统,还有最新的由Intel和Nokia联合开发的MeeGO系统。

回到Android系统本身,如图1.1,它主要包括五个部分,分别是Linux 内核(红色部分)、本地库(绿色部分)、Dalvik虚拟机(黄色部分)、应用程序框架和应用程序(蓝色部分)。

  • Android Linux内核

最初的Android内核是基于2.6.25的,但由于采用的同样的版本管理系统,Android内核紧跟Linux内核的进度,目前最新的开发版本是2.6.31,但版本其实已经不重要了,你只要记住Android内核基本上同步于Linux内核就可以了,在此基础上Android对Linux内核做了些修改和功能添加使之Android化,如著名的Binder、匿名共享内存(ashmem)等。

目前在Android的源代码仓库中有4个关于Linux的项目,他们分别是:

  • kernel/common.git:Common Android Kernel Tree
  • kernel/experimental.git :Experimental Kernel Projects
  • kernel/msm.git :Kernel Tree for MSM7XXX family on Android
  • kernel/omap.git :Kernel Tree for OMAP family on Android
  • 本地库

说到本地库,首先我们想到的一定是libc库。是的,Android也不例外,他支持c库,但不是glibc或其他常见的小型仓库,比如uclibc,而是一个额称为Bionic的C库。尽管它不是很强大,但足够用了。按照Google的说法,选择Bionic的原因是因为:

  • 尽量移除GPL License的模块
  • 更小的代码密度和更快的运行速度

但BionicC库也有它的局限性:首先,不完全支持posix标准;其次,不支持libm和libthread_db;第三,不能使用标准的Toolchain来编译Android本地应用。Android的编译链也是依赖于Bionic库的,它的动态链接库加载使用的是linker,而不是ld.so。它的prelink使用的是apriori(build/tools/apriori),strip工具使用的是soslim(build/tools/soslim)而不是strip。

Android的本地库基本上位于源代码树的external和system目录下。

  • Dalvik虚拟机

Dalvik是GoogleAndroid平台最重要的一个部分,是Google专门为Android开发的Java虚拟机,被称为Dalvik虚拟机。按照Google的说法,Dalvik具有高效、简洁、节省资源的特点,非常适合资源有限的嵌入式系统。

Dalvik是按照Apache License v2方式发布的,Google尽量把GPLLicnse的软件移除Android系统。这就避免了非免费的Java ME版权问题,也移除了GPLv2的Java SE。

以前也有些公司搞过Linux/Java平台,即底层支持Linux系统、上层采用Java技术,但都因为效率的问题而放弃。Google的Dalvik虚拟机很好的解决了这个问题,同其他的Java虚拟机相比,Dalvik虚拟机有如下特点:

  • Dalvik虚拟机采用了基于寄存器的虚拟机技术。与Java虚拟机不同,Dalvik采用了基于寄存器(registerbased)的技术,而不是基于堆栈(stackbased)的技术。我们不去争论基于寄存器的虚拟机是不是更好,如果有兴趣,你可以去比较他们的性能差异。
  • Dalvik虚拟机使用自定义的字节码格式(称为DEX文件,.dex),不兼容现有Java字节码格式。Android里的dx工具负责把Java字节码转换成Dalvik字节码。
  • Dalvik虚拟机运行效率高,同事代码密度小,节省资源。
  • Dalvik虚拟机常量池只使用32位的索引。
  • Dalvik虚拟机不支持JIT编译技术(Just In Time Compiler)。

对于Android应用程序开发者来说,我们必须清楚如何在AndroidDalvik虚拟机上使用内存,下面是内存使用上的一些限制:

  • Dalvik默认的栈大小是12K(3个页,每个页4K)。
  • Dalvik堆(heap)默认启动大小:2M,默认最大值16M。
  • Dalvik堆(heap)支持的最小启动大小:1M,支持的最大值1024M。
  • Dalvik的堆和栈参数可以通过–Xms 和–Xmx更改。

对于Android的Java应用程序来说,每一个应用对对应于一个独立的Dalvik虚拟机实例进程,当然每个AndroidJava应用程序的线程也对应于一个Linux线程。这相当于每个AndroidDalvik应用程序都运行在自己的沙盒里面从而保证Dalvik应用程序的安全性。当然Android系统也充分利用了这个特性,每个AndroidDalvik应用程序都被赋予了一个独立的Linux PID(app_*)。

  • 应用程序框架

Android应用程序框架完全使用Java语言编写,运行在AndroidDalvik虚拟机之上,它通过Java JNI接口调用本地库的接口。

Android应用程序框架向下封装了系统的各种系统服务及硬件的访问接口,向上提供统一的应用程序开发接口,即AndroidAPI。Android应用程序通过调用Android应用程序框架接口来实现各种功能。

Android应用程序框架封装了大部分的系统服务功能,它们包括:

  • Activity Manager
  • Windows Manager
  • Content Provider
  • View System
  • Resource Manager
  • Notification Manager
  • Packet Manager
  • Telephony Manager
  • Location Manager

对于Android开发者来说,Android应用程序框架是最重要的一部分,只有真正理解了这个框架说包含的内容,才能写出高效的Android应用程序。

  • 应用程序

Android是一个功能完全的移动设备操作系统,它自带了核心应用程序,这样你就不需要额外的开发而直接在你的设备上使用Android系统了,这些应用程序开起来中规中矩,如果你想要一个更加绚丽的操作界面,你可以修改他们来实现自己的应用程序。

很明显,Android应用程序都是用Java语言开发的,它依赖于Android应用框架(framework.jar),同时运行在AndroidDalvik虚拟机之上。

我们简单的介绍了Android系统的架构,有些地方也许你可能不是很理解,不要紧,这里我们仅近是粗略的介绍,在后面会有更加详尽的描述。下面的内容是为初学者准备的,以便让他们能容易的建立Android环境,从而对Android系统有个认识。如果你已经熟悉了这部分内容,请跳过下面1.2和1.3章节。

1.2  Android开发环境

Android为第三方Android应用程序开发者提供了完备的开发工具支持,即Android SDK,它包括开发工具(ADTEclipse插件)、调试工具(ADB、DDMS、Logcat等)、Android设备模拟器(Emulator)。在Google官方网站(developer.android.com)上有详细的SDK安装和使用手册,我们在这里简单对它作简单的介绍,以便读者可以很容易的上手。

  • 下载

登录Android SDK官方网站(http://developer.android.com/sdk)下载最新版本的AndroidSDK。

登录Eclipse官方网站,下载Eclipse(支持的版本是3.3/3.4/3.5),推荐你下载最新的版本

  • 安装

AndroidSDK安装包是一个zip压缩包,直接解开就可以使用了,一般需要把SDK目录下的/tools目录添加到系统目录中,这样你在任何目录下都可以运行SDK命令了。

安装ADTEclipse插件:以Eclipse3.4/3.5为例:

  • 进入Help → Software Updates....
  • 选择Available Software标签,
  • 单击Add Site...
  • 输入https://dl-ssl.google.com/android/eclipse/
  • 单击OK
  • 选择安装Developer Tools插件

这里要注意的就是,如果你位于公司防火墙的后面,请在Eclipse的网络设置里面设置好代理服务器,否则Eclipse会由于找不到以来的插件而安装失败。

  • 设置使用

AndroidADT插件安装好后,Eclipse会重新启动,在windows->选项->Android里面设置好AndroidSDK的安装路径,好了创建一个Android项目并运行它吧...

1.3  从源代码编译Android系统

Android是一个开源的移动设备操作系统,你可以从Android的官方网站上下载Android的源代码。Android采用GIT源代码版本管理系统。请到http://source.android.com/了解更多信息。为了获取源代码,你首先需要安装GIT和REPO系统。

由于Kernel跟硬件设备关系十分紧密,Android也提供了多个针对不同设备的Linuxkernel项目,如没有特别说明,本书中我们主要针对应用于模拟器的Android commonkernel和Goldfish平台。

准备工作:(以Ubuntu904和Ubuntu910为例)

  • 安装JDK,需要安装JDK 1.5_12以上版本
  • 安装以来包:sudo apt-get install git-core gnupg sun-java5-jdk flexbison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essentialzipcurl libncurses5-dev zlib1g-dev
  • 安装repo:curl http://android.git.kernel.org/repo>~/bin/repo & chmod a+x~/bin/repo

同步代码:(以Eclair为例)

  • repo init -u git://android.git.kernel.org/platform/manifest.git-b eclair
  • repo sync

编译:

  • make(生成的映像位于out/target/product/generic/)
  • make sdk (生成的sdk位于out/host/linux-x86/sdk/)

获取common kernel代码:

  • mkdir android_kernel
  • cd android_kernel
  • git clone git://android.git.kernel.org/kernel/common.git

由于Android的文档并不是很丰富,因此浏览源代码是深入的掌握Android系统的一个有效途径,我们已经把Android源代码同步到本地了,好好利用它吧!这些代码在下面的介绍中还会用到的

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 神经损伤小便少尿不出来怎么办 手指夹伤出血了怎么办 手指夹破流血了怎么办 喂了宝宝熊胆粉怎么办 不小心擦伤了皮怎么办 吃了减肥药拉肚子怎么办 遇到他心通的人怎么办 被茅山术害了怎么办 鱼缸鱼身上烂了怎么办 鳄鱼龟皮肤烂了怎么办 墨水渗透进皮肤里了怎么办 中药渗透到皮肤里怎么办 甘露醇渗透到皮肤下怎么办 水银弄到眼睛里怎么办 水银粘到皮肤上怎么办 榴莲和虾同吃了怎么办 吃榴莲和虾中毒怎么办 榴莲和虾一起吃怎么办 狗被别人下毒了怎么办 大掌门2没存元宝怎么办 大掌门2转换阵容怎么办 率土之滨s2绝版怎么办 异界气息的装备怎么办 vivo电板没电了怎么办 门套拼接有缝隙怎么办 公司如果一直没有上税收入怎么办 赛车输了俩百万怎么办 交pk金员工不交怎么办 员工不想交pk金怎么办 心悦光环领错角色怎么办 心悦光环领错了怎么办 扑克牌1到13洗后怎么办 南通长牌没钱了怎么办 镇魔曲手游阵营人数已满怎么办 镇魔曲忘记在哪个区怎么办 登录镇魔曲卡在实名验证怎么办 电脑玩联盟花屏怎么办 优盘文件或目录损坏怎么办 苹果下吃鸡设备不兼容怎么办 龙之谷账号忘了怎么办 不花钱的排风除湿怎么办