Android 系统framework 概述【转载】

Android 系统framework 概述

一、android 是什么?

二、android 的开发工作

Android 的开发分为三个类型:移植开发移动设备系统;android 系统级开发和应用程序

开发。

1、移植开发移动设备系统

2、Android 系统级开发,指的是扩展android 的框架或者是修改bug,这方面比较少,

除非有些开发移动设备的厂商,比如做gps,可以往里面加入一些自己的特定系统东西,这

可能导致一些不兼容。当然也可能是简单的修复bug,详细的内容后面还有说。

3、开发应用程序,这应该是比较主流的开发,也就是给android 系统写应用程序。当然

我们这里主要是研究android 的framework 如何给这些应用程序提供服务的。

总结一下,我们可以把android 分为四个层次,从底层往上依次为:linux 内核、C/C++

库、java 框架和java 应用程序。移植开发移动设备涉及到linux 内核(包括其驱动);android

系统级开发涉及到C/C++库的开发及给上层java 框架;android 应用程序开发就是调用java

的框架写应用程序。

简单的从上到下,android 应用程序需要有java 框架支持,比如它要发送短信,就需要java

框架,java 框架其实就是将C/C++库包装成为了一个JNI,而实现具体的功能是C/C++库,

最后驱动硬件完成功能,这也就是linux 内核部分。

三、开发工作入门

根据上面所述,android 开发就分为居于sdk 开发和源代码开发。

1、SDK 开发,主要是应用程序开发,这里不做详细分析。

2、源代码的开发,涉及到的知识有linux 操作系统基础知识、android 底层库等知识,

后面将更加详细的介绍。

四、android 系统级开发概述

所谓framework,也就是系统级开发,这将是本文的重点,虽然android 的framework

开发比较少,但是对其了解后更有利于整体开发的进行,当然很多设备厂商还是非常需要这

些的。

1、android 系统架构

Linux 内核及驱动、C/C++框架、java 框架、java 应用程序。

1)、Linux 内核及驱动

其中linux 内核及驱动是内核层的(本人对linux 内核也有过痴迷的时候,就像现

在android 痴迷一样),系统总是需要操作系统的支持的,比如内存管理、进程管理、网

络协议栈等。

2)、android 的C/C++框架

系统C 库:用的是libc,没什么好说的,C 程序员都知道。

多媒体库

SurFace Manager:显示子系统的管理器

LibWebCore:web 浏览器引擎,支持android 浏览器

SGL:skia 图形库,底层的2D 图形引擎

3D 库:OpenGL

FreeType:字体显示

Android 的运行环境,这个也应该属于这个框架里面的,android 的虚拟机叫做

Dalvik,运行环境就是由这个虚拟机和基础的java 类库组成。

3)、android 应用框架

提供一系列的服务和系统,包括视图、内容提供器、资源管理器、通知管理器、活

动管理器。

视图非常丰富:list、grid、text box、button 等。

内容提供器是使得应用程序可以访问另一个程序的数据。

资源管理器是提供访问非代码的资源访问,如布局文件。

通知管理器,使得程序可以在状态栏中显示自定义的提示信息。

活动管理器,用来管理程序生命周期。

4)、android 应用程序

Android 所有的应用程序都是用java 写的,当然现在好像也支持一些脚本语言,如

ruby,但是不支持C 开发,所谓支持C 开发是指jni 的形式。

五、android 源码获取及编译

通过上面的讲解,相信大家对android 的framework 有了大致了解,绝对是大致,

否则后面的内容拿来做什么? :)

1、源码获取

建议比较新的系统,我使用的是fc12,当然可能缺点东西,到时候缺啥补啥吧。

A、安装repo

$ cd ~

$ mkdir bin

$ echo $PATH

确保PATH 中有bin 这个目录,如果没有?PATH=~/bin:$PATH

$ curl http://android.git.kernel.org/repo >~/bin/repo

$ chmod a+x ~/bin/repo

B、初始化repo 客户端

1、建一个目录用于放代码文件

$ mkdir mydroid

$ cd mydroid

2、

$ repo init -u

git://android.git.kernel.org/platform/manifest.git

C、获取文件

$ repo sync

2、编译代码

$ cd ~/mydroid

$ make

如果编译失败,一般都是缺了什么库之类的,yum 一把。

我编译的时候出现了一个现象是:

make: *** No rule to make target `development/data/etc/apns-conf_sdk.xml',

needed by `out/target/product/generic/system/etc/apns-conf.xml'. Stop

每次都是错误,最后我把developement 给删除了,重新git 了:

git clone git://android.git.kernel.org/platform/development

编译结果,所有的输出都在out 目录下。

Out 下有host 和target 目录,注意我们这里只是编译了framework,而kernel

部分没有,而且你也可以看到你git 下了的部分也没有kernel 这个文件夹,这是需

要你自己独立git 下来的。

我们这里可以使用默认使用内核镜像,

Prebuilt/android-arm/kernel/kernel-qemu

模拟器运行前配置环境变量:

Declare -x ANDROID_PRODUCT_OU="out/target/product/generic"

./out/host/linux-x86/bin/emulator -shell

等着吧,跑起来了

总结

这是我的读书笔记,到这里我们的概述也告一段落了,后续我们将继续按照android 的

framework 从下往上写一些东西,但愿我有时间。

深南大盗(573832399)

2010 白色情人节

转载于:https://www.cnblogs.com/nickLu/archive/2013/02/27/2935652.html

更多相关文章

  1. 实现Android(安卓)Studio JNI开发C/C++使用__android_log_print
  2. Android开发工具和资源精选
  3. Android、iOS系统架构
  4. 使用Android(安卓)adb命令来启动Android应用程序
  5. Android(安卓)经典资料分享大家一起顶
  6. 分享两本android电子书
  7. 【Android(安卓)应用开发】Android资源文件 - 使用资源存储字符
  8. Android应用程序窗口(Activity)的运行上下文环境(Context)的创建过程
  9. Android(安卓)Studio Mac下载安装使用教程

随机推荐

  1. android 退出全部activity的方法
  2. android之回退直接退出到主页面
  3. android App冷启动优化
  4. android中Connection.hangup()和Call.han
  5. 三十、Google Map导航应用
  6. Android(安卓)5.0 API变化
  7. Android(安卓)video streaming and encod
  8. android 清理缓存
  9. WIFI名字为特殊字符显示乱码(MTK)
  10. Android中Log机制