Android平台基本架构及Dalvik概述

         对于Android开发,小编觉得仅仅照着视频或者照着Android疯狂讲义上的例子照搬照抄是不够的,了解、熟悉Android平台的架构及基本原理,相关基本要素的运行机制是极为重要的,这将为从事android长远开发奠定基石作用。所以小编将在后续时间与大家分享小编学习的有关Android原理机制方面的知识,不足或错误的地方请批评指正。


一、Android平台架构

          首先请看下面一张图:

相信很多有都看过这张图。通过上面这张图,小编得出的信息如下:
Android平台的架构可以拆分成5个部分。它们分别是 Linux内核、Android Runtime、Libraries、Application Framework以及 Applications。
下面来一一了解各个部分到底是干嘛的,它们在Android体系中扮演着什么角色。

(一)、Linux Kernel

Linux内核主要是基于Linux2.6来作为核心,利用其基本功能,构建Linux内核来帮助Android系统完成最底层、最核心的功能服务。这些功能主要包括进程管理、安全管理、内存管理、堆栈管理及驱动管理。它主要完成与核心底层硬件的信息交互与处理。在Linux内核中,存在于许多硬件进行交互的驱动程序,如USB Driver、照相机Camera Driver、内部进程通信驱动、蓝牙、无限驱动等。曾经有过一个说法,当把Linux官网上的Linux内核移植到Android平台中会影响Android的运行,这就产生Android下的Linux内核与传统的Linux内核不一致的说法。有学者进行了分析实验,最后得出当把传统的Linux移植到Android中时,会影响手机的触摸屏等操作滞缓,以及一些硬件设备的使用出现一定的差异,最后发现Google在进行Linux开发的时候重写或重新构造了内核的驱动部分,使之与原有的驱动不一样,这些专为手机使用建立的内核驱动才方便手机的运行。所以这里的LInux内核是Google官方专门为手机使用开发的Linux内核,定制了手机专用的驱动程序。

(二)、Android Runtime

所谓的Android运行时,主要包括两部分,第一是Android基本核心库。第二个是Dakvik虚拟机。
其中Android基本核心库用来提供大部分在Java编程中需要使用的基本的核心的功能。第二部分是虚拟机,都知道Android应用程序的运行是基于虚拟机的,但是这里的虚拟机和Java虚拟机是不一致的,具体的差别是Java虚拟机处理的是Java的字节流,而Dalvik虚拟机是在Java字节流的基础上,通过dx工具经过一系列处理,将字节流打包成dex格式的文件,从而让Dalvik虚拟机使用,所以两者的本质是不一样的。在Android应用程序中,每个应用程序在虚拟机内部都是对应一个Dalvik虚拟机实例,有着自己独立运行的线程。而这些线程的管理,都通过Dalvik向Linux内核提供的接口,使得Linux内核可以有效的管理线程安全等因素。

(三)、Libraries

这里的Libraries是Android所包含的C/C++类库,这些类库可以供给Android的各个组件使用。这些类库所具有的功能是通过Android Framework来暴露给开发者的。
这些类可以包括如下:
libc、OpenCORE媒体库、SGL-基于2D图像的引擎、3D库、SurfaceView Manager-界面管理、SQLite--轻量级的关系数据库引擎、SSL--网络传输的安全控制等。

(四)、Application Framework

Framework 的主要功能就是为Android开发者提供一系列用于开发的服务APIs和接口。这些服务及接口包括:
View 丰富的、可扩展的视图集合
Content Provider 使应用程序可以访问其他应用程序的数据、或者使数据可以被共享
Resource Manager 资源管理器。这部分的资源是以非代码的形式、不被编译的方式被访问
Activity Manager  用来管理应用程序的生命周期
Notification 使应用程序可以在状态栏实现自定义的警告。

(五)、Applications

应用程序集合。通过Libraries和Framework开发的应用程序,每个应用程序的构建及运行主要依赖前4个部分。

二、Android平台中的库

该节主要来描述Android应用程序开发时主要会用到的库,了解每个库的具体职能。
(1)、Android util
该库主要用来包括Java中常用的核心功能,包括Java容器、字符串格式化、XML解析等基本功能。
(2)、Android os
提供消息传递、进程间通信等功能
(3)、Android graphic
通过提高图像API,完成低级的绘图功能。
(4)、Andorid text
提高文本处理和解析功能。
(5)、Android database
提供使用数据库的功能。
(6)、Android view
构造用户界面集合,提供与用户的交互行为
(7)、Android Content
内容API,管理数据的发布及访问
(8)、Android provider
为了方便开发人员对某些标注的内容提供器进行访问,该库提供了对所有android发行版中包含的标准数据库的访问、
(9)、telephony、webKit、bluttooth、location
提供对电话薄、网络、蓝牙、GPS的使用访问。
(10) Android Media
提供对媒体数据的访问,如图像、视频、音频。
(11)SSL
用来支持使用安全套接字加密协议的安全Internet通信。

三、什么是Apk文件

Android Apk文件实际上是一个压缩文件。当我们用解压缩工具对其进行解压时,我们可以看到如下的结构目录:
 
其实从这个图上,我们可以明显感觉到该图和我们进行开发时的工程目录树十分相似。Apk的文件主要组成部分有如下几个:
(1)、Manifest文件
这个XML文件是整个Apk最为核心的文件,它是用来描述整个Apk是什么的。在该文件中,定义了 应用程序的名称、图标、权限、sdk使用的最低版本号、以及应用程序所使用的Activiy、service、receiver等子元素。其根元素是只允许唯一存在的applicaion元素。Root标签是manifest标签。因此,整个Manifest.xml文件表述了整个应用程序的 全局信息。
(2)、META-INF元数据信息。
META-INF文件中需要值得一提的是校验码。当应用程序开发完成进行打包的时候,根据所有的文件信息、权限信息等会由系统自动生成一个检验码A。而当Apk安装到手机上时,Android系统也一样会对当前的文件信息等计算一个校验码B,当校验码B与存储在META文件中的校验码A比较时,若完全无误则完成安装,否则,不进行安装。所以在Apk获取之后如果对其进行解压,替换里面的数据资源,重新打包,一样不会完成安装,这是出于对apk文件的安全性及完整性进行的设置。
(3)、classes.dex
之前说过,Java虚拟机处理的是Java程序的字节流,而Dalvik虚拟机则通过dx工具将Java的Class打包封装成可供Dalvik虚拟机执行的.dex文件。其实这个过程 是一个优化的过程,我们知道每一个类都有一个常量池(有关常量池的具体概念会在别的文章中具体描述,可以参加Java目录下的文章)。而一个应用程序往往会有很多的classes,如果每个类都独立有一个常量池,在类与类之间的数据处理上会降低一定的效率,所以为了提高应用程序之间的紧凑度,提高文件读写数据传输的效率,DEX文件将所有的类的常量池提到了同一个常量池中,将所有的class进行了整合。
(4)、res文件
可以看出这里的res文件分为了两个部分。其中不带.arsc后缀的res文件是不被编译的res文件,里面可以包括jpg、png、js、html、css、xml等。而resource.arsc则是被编译后的资源文件,以字节流的方式进行存储与获取。

将android应用程序进行打包成apk文件使用的是 aapt工具

四、Dalvik

关于Dalvik虚拟机,前面已经提及。它实际上是区别于Java虚拟机的,同时,内部的线程管理是通过底层的Linux内核来实现与完成管理(这其实是层次结构的一个优势,我只负责管理我的内部,我只提供一个接口为你提供服务,我内部的事情我自己管理,其他人不用管)。那么,每一个android应用程序实际上都在Dalvik内部有一个实例和线程,其代码在虚拟机的解释下执行。
Java虚拟机与Dalvik虚拟机的不同地方在于:
(1)、Java虚拟机运行Java字节流,Dalvik虚拟机运行DEX格式文件。
(2)、Java类在被编译成字节码文件.class之后进行打包到Jar中,此时虚拟机从class文件和jar文件中获取字节码信息来执行。而Dalvik会直接从处理好的DEX文件中读取指令和数据。
(3)、Java虚拟机是基于 堆栈的,而Dalvik虚拟机是基于 寄存器的。寄存器的虚拟机在代码执行上具有高效率,而在指令分发上却比较耗时。
总而言之,每一个Android应用程序都运行在一个Dalvik虚拟机实例中,而每一个虚拟机的实例都是一个独立的进程空间,虚拟机的线程机制、内存分配和管理都是依靠底层Linux内核来实现。所以Android的应用程序线程其实对应了Linux内核的一个线程,不同线程之间独立运行可以保护应用程序的安全执行。

这里需要提及一个叫做Zygote的进程。它是一个虚拟机进程,同时也是一个虚拟机实例的孵化器。它可以通过复制自身完成一个进程派生。Zygote在系统开启时就完成了虚拟机的初始化,配置了库的加载等一系列的设置。当有一个Android应用程序运行时,Zygote接收到了请求消息,就会复制自身,完成虚拟机实例的产生。这样做可以大大的提高效率,同时,复制自身会共享内存中的只读区域,节省了内存的开销。

再次之处,Dalvik是Android平台特有的,支持手机应用程序效率执行的虚拟机,与Java虚拟机有许多不同之处。

Android虚拟机Dalvik完整源码,宝贵资源,欢迎下载! This directory contains the Dalvik virtual machine and core class library, as well as related tools, libraries, and tests. A note about the licenses and header comments --------------------------------------------- Much of the code under this directory originally came from the Apache Harmony project, and as such contains the standard Apache header comment. Some of the code was written originally for the Android project, and as such contains the standard Android header comment. Some files contain code from both projects. In these cases, the header comment is a combination of the other two, and the portions of the code from Harmony are identified as indicated in the comment. Here is the combined header comment: /* * Copyright (C) The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * ---------- * * Portions of the code surrounded by "// BEGIN Harmony code" and * "// END Harmony code" are copyrighted and licensed separately, as * follows: * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ Native SH call bridge --------------------- Native SH call bridge is written by Shin-ichiro KAWASAKI and Contributed to Android by Hitachi, Ltd. and Renesas Solutions Corp.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值