您的位置:首页 > 移动开发 > Android开发

Android平台构架分析和应用程序目录结构分析

2011-04-27 22:42 393 查看
Android平台采用了整合的策略思想,包括底层Linux操作系统、中间层的中间件和上层的Java应用程序。下面我把Android的特性及其架构体系结构总结一下。

一、Android的平台特性

Android平台有如下特性:

1)应用程序框架支持组件的重用与替换。

这样我们可以把系统中不喜欢的应用程序删除,安装我们喜欢的应用程序。

2)Dalvik虚拟机专门为移动设备进行了优化。

Android应用程序将由Java编写、编译的类文件通过DX工具转换成一种后缀名为.dex的文件来执行。Dalvik虚拟机是基于寄存器的,相对于Java虚拟机速度要快很多。

3)内部集成浏览器基于开源的WebKit引擎。

4)优化的图形库包括2D和3D图形库,3D图形库基于OpenGL ES 1.0。强大的图形库给游戏开发带来福音。在3G最为重要的的应用莫过于手机上网和手机游戏。

5)SQLite用作结构化的数据存储。

6)多媒体支持包括常见的音频、视频和静态印象文件格式(如MPEG4、H.264、MP3、AAC、AMR、JGP、PNG、GIF)。

7)GSM电话(依赖于硬件)。

8)蓝牙(Bluetooth)、EDGE、3G、WiFi(依赖于硬件)。

9)照相机、GPS、指南针和加速度计(依赖于硬件)。

10)丰富的开发环境包括设备模拟器、调试工具、内存及性能分析图表和Eclipse集成的开发环境插件。Google提供了Android开发包SDK,其中包含了大量的类库和开发工具,并且针对Eclipse的可视化开发插件ADT。

还有的你可以上网找一找,看看Andriod平台更全面的特性。

二、Android平台架构



Android操作系统的体系结构可分为4层,由上到下依次是应用程序、应用程序框架、核心类库和Linux内核,其中第三层还包括Android运行时的环境。

1)程序应用

Android连同一个核心应用程序包发布,该应用程序包包括E-mail客户端、SMS短消息程序、日历、地图、浏览器、联系人管理程序等。所以的应用程序都是用Java编写的。

2)应用程序框架

开发者完全可以访问核心应用程序所使用的API框架。该应用程序框架架构用来简化组件的软件的重用,任何一个应用程序都可以发布它的模块功能并且任何其他的应用程序都可以使用其所发布的功能块(不过要遵循框架的安全性限制)。该应用程序重用机制使得组件可以被用户替换。

以下所有的应用程序都由一系列的服务和系统组成,包括:

1.一个可扩展的视图(Views)可以用来创建应用程序,包括列表(lists)、网络(grids)、文本框(text boxes)、按钮(buttons),甚至是一个可嵌入的Web浏览器。

2.内容管理器(Content Providers)使得应用程序可以访问另一个应用程序的数据(如联系人数据库),或者共享它们自己的数据。

3.一个资源管理器(Resource Manager)提供非代码资源的访问,如本地字符串、图形和分层文件(layout files)。

4.一个通知管理器(Notification Manager)使得应用程序可以在状态栏中显示客户通知信息。

5.一个活动类管理器(Activity Manager)用来管理应用程序生命周期并提供常用的导航回退功能。

3)Android程序库

Android包括一个被Android系统中各种不同组件所使用的C/C++集库。该库通过Android应用程序框架为开发者提供服务。

以下是一些主要的核心库:

1.系统C库:一个从BSD继承来的标准C系统函数库(libc),专门为基于Embedded Linux的设备定制。

2.媒体库:基于PacketVideo OpenCORE;该库支持录放,并且可以录制许多流行的音频视频格式,还有静态映像文件包括MPEG4、H.264、MP3、AAC、JPG、PNG。

3.Surface Manager:对显示子系统的管理,并且为多个应用程序提供2D和3D图层的无缝融合。

4.LibWebCore:一个最新的Web浏览器引擎,用来支持Android浏览器和一个可嵌入的Web视图。

5.SGL:一个内置的2D图形引擎。

6.3D libraries:基于OpenGL ES 1.0 APIs实现;该库可以使用硬件3D加速(如果可用)或者使用高度优化的3D软加速。

7.FreeType:位图(bitmap)和向量(vector)字体显示。

8.SQLite:一个对于所以应用程序可用、功能强劲的轻型关系型数据库引擎。

4)Android运行库

Android包括了一个核心库,该核心库提供了Java编程语言核心库的大多数功能。每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。Dalvik是针对同时高效地运行多个VMs实现的。Dalvik虚拟机执行.dex的Dalvik可执行文件,该格式文件针对最小内存使用做了优化。该虚拟机是基于寄存器的,所有的类都是经由Java汇编器编译,然后通过SDK中的DX工具转化成.dex格式由虚拟机执行。Dalvik虚拟机依赖于Linux的一些功能,比如线程机制和底层内存管理机制。

5)Linux内核

Android的核心系统服务依赖于Linux内核,如安全性、内存管理、进程管理、网络协议栈和驱动模型。Linux内核也同时作为硬件和软件栈之间的硬件抽象层。

三、Android应用程序分析

我们用HelloWorld这个经典例子来分析一下Android应用程序目录。

启动Eclipse,创建一个工程。选择File -> New -> Android Project;



在Project name中输入项目名称,这里我们输入HelloWorld;在Build Target中选择你使用的SDK版本,这里我们选择Android2.2;



在Application name中输入应用程序名称,这里我们输入Helloworld;在Package name中输入包的名称,这里我们输入helloworld.tet;在Create Activity中输入Activity名称,这里我们输入Helloworld;点击Finsh完成工程的创建。

我们把Eclipse左边工作区生成Helloworld工程全部展开,开始目录分析:



1)Helloworld.java程序代码

package helloworld.tet;

public final class R {
public static final class attr {
}
public static final class drawable {
public static final int icon=0x7f020000;
}
public static final class layout {
public static final int main=0x7f030000;
}
public static final class string {
public static final int app_name=0x7f040001;
public static final int hello=0x7f040000;
}
}


该类是一个资源索引类,由系统自动生成,无须修改。该类里面根据不同的资源类型又包含了不同的静态内部类,attr中声明属性;drawable中声明一些图片资源;layout声明布局文件;string中声明字符串。现在你应该setContentView(R.layout.main)这句话的意思了吧!它是通过访问资源类R的内部类layout的main属性来访问工程layout文件夹下的main.xml布局文件,在界面上展示视图组件。

3)string.xml文件代码

<?xml version="1.0" encoding="utf-8" ?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent">
<TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" />
</LinearLayout>


该文件也是一个XML文件,该文件中声明了程序中使用到的视图组件。Android通过巧妙的方法将程序的表现层和控制层分开,降低了程序的耦合性,提高了程序的可配置性。

文件的第一行是XML文件的版本和编码声明。第二行是一个线型布局,该布局以垂直或水平方式摆放视图组件。android:orientation="vertical"表明组件以垂直方式摆放; android:layout_width="fill_parent"属性表明布局的宽充满父组件;

android:layout_height="fill_parent"属性表明布局的高充满父组件。下面的是一个文本视图,android:layout_width="fill_parent"属性表明该组件的宽充满父组件;android:layout_height="wrap_content"属性表明该组件的高依靠自身内容的高;android:text="@string/hello"属性表明文本内容引用string.xml文件夹中的hello元素。

5)AndroidManfest.xml文件代码

<?xml version="1.0" encoding="utf-8" ?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="helloworld.tet" android:versionCode="1" android:versionName="1.0">
- <application android:icon="@drawable/icon" android:label="@string/app_name">
- <activity android:name=".Helloworld" android:label="@string/app_name">
- <intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>

每一个Android工程都有一个名为"AndroidManfest.xml ”的配置文件,在所有项目中该文件的名称不变。该工程是Android工程的一个全局配置文件,所有Android中使用到的组件(如Activity、Service、ContentProvider和Broadcast Receiver)都要在该文件中声明,并且该文件中还可以声明一些权限以及SDK的最低版本信息。

文件的第一行是XML文件的版本和编码声明。下面的是manifest根元素,该元素中指定了命名空间、包名称、版本代码号和版本名称等信息

application子元素中的两个属性分别指定程序的图标和标题。下面是Activity组件的声明,Activity有两个属性声明Activity的类名称和标题

<intent-filter>是找到该Activity的过滤器,这里的action表明该Activity是程序的入口。category属性声明在加载程序时运行。

<uses-sdk>表明使用的SDK最低版本。

6)Android.jar文件浅析

作为一个Java项目,通常情况下都会引入要用到的工具类,也就是Jar包,在Android开发中,绝大部分开发用的工具包都被封装到一个名叫Android.jar的文件里了。如果我们在Eclipse中展开来看,可以看到j2se中的包,apache项目中的包,还有Android自身的包文件。在这里我们简单浏览一下Android的包文件:

android.app :提供高层的程序模型、提供基本的运行环境

android.content :包含各种的对设备上的数据进行访问和发布的类

android.database :通过内容提供者浏览和操作数据库

android.graphics :底层的图形库,包含画布,颜色过滤,点,矩形,可以将他们直接绘制到屏幕上.

android.location :定位和相关服务的类

android.media :提供一些类管理多种音频、视频的媒体接口

android.net :提供帮助网络访问的类,超过通常的java.net.* 接口

android.os :提供了系统服务、消息传输、IPC 机制

android.opengl :提供OpenGL 的工具

android.provider :提供类访问Android 的内容提供者

android.telephony :提供与拨打电话相关的API 交互

android.view :提供基础的用户界面接口框架

android.util :涉及工具性的方法,例如时间日期的操作

android.webkit :默认浏览器操作接口

android.widget :包含各种UI 元素(大部分是可见的)在应用程序的屏幕中使用

我们通过对上述代码的分析,基本上了解了一个Android应用程序的基本结构和运行机制。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: