Android系统构架分析和应用程序目录结构分析
一、Android系统构架
Linux内核(Linux Kernel)
Android运行在linux kernel 2.6之上,但是把linux内受GNU协议约束的部分做了取代,这样在Android的程序可以用于商业目的。
Linux 内核是硬件和软件层之间的抽象层。
中间件
中间件包括两部分:核心库和运行时(libraries & Android runtime)
核心库包括,SurfaceManager 显示系统管理库,负责把2D或3D内容显示到屏幕;Media Framework 媒体库,负责支持图像,支持多种视频和音频的录制和回放;SQlite 数据库,一个功能强大的轻量级嵌入式关系数据库;WebKit 浏览器引擎等。
Dalvik虚拟机:区别于Java虚拟机的是,每一个Android 应用程序都在它自己的进程中运行,都有一个属于自己的Dalvik 虚拟机,这一点可以让系统在运行时可以达到优化,程序间的影响大大降低。Dalvik虚拟机并非运行Java字节码,而是运行自己的字节码。
应用程序框架(Application Framework)
丰富而又可扩展性的视图(Views),可以用来构建应用程序, 它包括列表(lists),网格(grids), 文本框(text boxes),按钮( buttons), 可嵌入的web 浏览器。
内容提供者(Content Providers)使得应用程序可以访问另一个应用程序的数据(如联系人数据库), 或者共享它们自己的数据。
资源管理器(Resource Manager)提供非代码资源的访问,如本地字符串,图形,和布局文件( layoutfiles )。
通知管理器(Notification Manager) 使得应用程序可以在状态栏中显示自定义的提示信息。
活动管理器( Activity Manager) 用来管理应用程序生命周期并提供常用的导航回退功能。
应用程序 (Applications)
Android 系统会内置一些应用程序包包括email 客户端,SMS 短消息程序,日历,地图,浏览器,联系人管理程序等。所有的应用程序都是使用JAVA 语言编写的。
Activity是Android中的视图部分,负责界面显示。复制代码
package android.basic.lesson2.helloworld;import android.app.Activity;
import android.os.Bundle;public class MainHelloWorld extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
可以看到MainHelloWorld是Activity的子类,子类要重写onCreate方法。setContentView(R.layout.main)方法是给Activity设置可以显示的视图(View),视图由R类负责寻找。2、R文件浅析
/* AUTO-GENERATED FILE. DO NOT MODIFY.
*
* This class was automatically generated by the
* aapt tool from the resource data it found. It
* should not be modified by hand.
*/package android.basic.lesson2.helloworld;public final class R {
public static final class attr {
}
public static final class color {
public static final int red=0x7f050000;
}
public static final class drawable {
public static final int icon=0x7f020000;
}
public static final class id {
public static final int TextView01=0x7f060000;
}
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;
public static final int tagline=0x7f040002;
}
}
从R文件中可以看到每一个资源都会有一个整数和它相对应。
<?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”
android:gravity=”center”
>
<TextView
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:textColor=”#0f0″
android:textSize=”30px”
android:text=”@string/hello”
/>
<TextView
android:text=”@string/tagline”
android:id=”@+id/TextView01″
android:layout_width=”wrap_content”
android:textSize=”14px”
android:textColor=”@color/red”
android:layout_height=”wrap_content”>
</TextView>
</LinearLayout>
在每个应用程序的根目录都会有一个AndroidManifest.xml文件,该文件向Android操作系统描述了,本程序所包括的组件,所实现的功能,能处理的数据,要请求的资源等等。学过Java Web开发的同学可以用Web应用程序里的web.xml来类比这个AndroidManifest.xml文件。复制代码
<?xml version=”1.0″ encoding=”utf-8″?>
<manifest xmlns:android=”http://schemas.android.com/apk/res/android”
package=”android.basic.lesson2.helloworld”
android:versionCode=”1″
android:versionName=”1.0″>
<application android:icon=”@drawable/icon” android:label=”@string/app_name”>
<activity android:name=”.MainHelloWorld”
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>
<uses-sdk android:minSdkVersion=”8″ />
</manifest>
我们看到Manifest是根节点,节点属性里有versionCode和versionName来表示应用程序的版本;里面可以包含0个或1个application元素,application可以包含多个activity组件等等,具体的内容我们在接下来的课程里详细讲解。
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 元素(大部分是可见的)在应用程序的屏幕中使用