-
2011-10-24
学习Android-了解Android(二) - [Android]
Android 通用架构
Android 有一个通用的展示软件栈的架构,即是如此图:
简单介绍:
Applications 层:主要是 Android 自带的 GMS(Google Mobile Service) 应用和应用开发者开发的应用;
Application Framework :主要是为 Application 开发者提供各种功能、服务和开发 API 。
Android Runtime(Core libraries and Dalvik Virtual Mache) :为应用运行提供运行环境的 Java 虚拟机和运行时库。
Libraries :主要是 Android 系统运行库和工具集;
C/C++ 库:
a) 标准 C/C++ 库 bionic : BSD 许可证,可以修改而无需公开源代码。提供 C/C++ 标准库绝大部分的功能,是一个专为嵌入式系统设计的轻量级标准库实现。相对于传统的 glibc ,其体积和内存占用很小。
b) C 语言工具库 libcutils :是 Android 系统中的基石库,基本上 Android 中所有的本地库和程序都链接了这个库。
c) init 进程:此进程是 Android 设备启动后,系统执行的第一个用户空间的可执行程序,由内核缺省直接启动,以守护进程的形式后台运行。提供以下功能:设备管理、解析并执行初始化脚本 init.rc 。
d) shell 工具: sh 和 toolbox 、 busybox 。
e) C++ 语言工具库 libutils :属于 Android 的底层库。以 C++ 实现,提供的 API 也是 C++ 接口规范。提供基本头文件、 Binder 框架以及使用 Binder 机制的相关库。
通过 Android 应用程序框架为开发者提供服务的 C/C++ 库 :
a) 系统 C 库:一个从 BSD 继承来的标准 C/C++ 系统函数库, 是专门为基于嵌入式 Linux 系统的设备定制的。即 bionic libc 库。
b) 媒体库:基于 PacketVideo OpenCORE 。该库支持多种常用的音频、视频格式回放和录制,同时支持静态图像文件。编码格式包括 MPEG4, H.264, MP3, AAC, AMR, JPG, PNG 。
c) Surface Manager :对显示子系统的管理,并且为多个应用程序提 供了 2D 和 3D 图层的无缝融合。
d) LibWebCore :一个最新的 web 浏览器引擎用,支持 Android 浏览器和一个可嵌入的 web 视图
e) SGL - 底层的 2D 图形引擎
f) 3D libraries :基于 OpenGL ES 1.0 APIs 实现;该库可以使用硬件 3D 加速(如果可用)或者使用高度优化的 3D 软加速。
g) SQLite :一个对于所有应用程序可用,功能强劲的轻型关系型数据库引擎。
系统工具集 :
a) 主要以 busybox 为主,链接 bionic libc 库,为大多数嵌入式 Linux 所采用。主要包含一些系统管理工具,全为文本命令行工具。
b) 另外 Android 官方也提供了专门的调试守护进程,如 adbd 等。
HAL :一个对硬件访问虚拟化的中间抽象层,接着我们详细介绍;
Linux Kernel :基于开源 Linux kernel 经过修改的支撑整个软件栈的基础操作系统内核,当前主要是依赖于 Linux kernel 2.6 。驱动主要分为两类,一类是 Android 专用驱动,其并不是硬件驱动,而主要是一些为上层提供服务的辅助功能层,比如 ashmem 、 logger 、 binder 、 power manager ;另一类则是设备驱动则,其多是硬件驱动,属于 Linux 内核标准的驱动,比如 fb 显示驱动 (LCD) 、输入设备驱动 ( 游戏杆、鼠标、键盘、触摸屏 ) 、视频驱动 (Camera) 、音频驱动、 MTD 存储设备驱动、网络驱动 ( 蓝牙、 WiFi 、 Ethernet) 等。驱动在内存映射的时候也分为 kernel space 和 user space ,放在 kernel space 都是需要遵循 GPL 开源的;放在 user space 中的驱动,是遵循 Apache/MIT 许可证的,可以不开源,其运行在 kernel space 之上。
Hardware Abstraction Layer:
HAL 是 Google 为了解决 Linux 开源许可证 GPL 和 Android 本身的 Apache 许可证冲突的一个硬件抽象层,主要原则是把控制硬件的动作都放到了 Android HAL 中,而 linux driver 仅仅完成一些简单的数据交互作用,甚至把硬件寄存器空间直接映射到 user space 。
HAL 存在的原因:
1. 快速适配硬件设备中非 linux kernel 标准的接口;
2. 解决 Linux 开源许可证 GPL 与硬件设备厂商驱动的专利不兼容;通过 Android 的 Apache 许可证和 HAL 技术实现来解决这一难题;
3. 开放的满足设备厂商开发开与之驱动对应的特定需求的要求;
HAL 层具备如下特点:
1. 在用户空间 (user space) 而不是内核空间 (kernel space) ,可以是 c/c++ 库;
2. 将 Android platform 部分和系统硬件完全的进行了隔离开;
3. 向上层提供 Android platform 操作硬件的接口,向下要求硬件驱动对其功能进行实现; ( 比方说上层应用对于 Graphics, Audio, Camera, Bluetooth, GPS, Radio(RIL), Wifi 等的操作。 )
在编程方式上,上层应用通过 HAL 对硬件的操作有两种方式:
1. 通过 Java->JNI->*.so 库 (c/c++) ;
2. 通过 Java app->ApplicationManager->Service(java)->service(jni)->HAL->HAL stub->System Call 方式进行调用;
注:一般 HAL 动态库放在位置 /system/lib/hw 目录。
一般开发类型
1. Android 手机产品:构建硬件系统,移植 Android 软件平台系统;主要涉及设备驱动程序,以及在硬件抽象层实现标准接口等。
2. Android 应用程序:基于 Application Framework 和其他应用,开发应用程序;
3. Android 系统开发:主要是增强或者完善 Android 平台系统的功能,开发中主要包含如下部分:
a) 开发 c 或者 c++ 库;
b) 定义将要通过 JNI 提供的上层 Java 的系统 API 接口;
c) 封装 JNI ;
d) 通过 JNI 封装 Java 类和接口 API ,提供给 Android 应用使用;
Android 开发社区
Cyanogenmod 社区: http://www.cyanogenmod.com/
涉及开发语言: C/C++/Java 等。
-
2010-06-21
2009年的Eclipse社区调查结果 - [开源]
文章《Eclipse社区调查结果发布》是Elcipse Community的一个使用调查报告,参入调查者53.8%是Programmer,17.7%是System Architect,11.5%是Development Manager。
在这个数据里面,可以分析:
1.在开发工具方面,Windows/Linux/Mac OS X + Subversion/CVS + Bugzilla/Atlassian Jira + Oracle/MySQL + Tomcat/JBoss是主流选择。说明这些工具已经和广大Eclipser们朝夕相处了,这些产品或者是商用的,或者是开源的,都已经在广大开发者中间实践并大幅推广了;(产品/工具)
2.使用开源、贡献开源代码的人大幅度增加:48.2%的参入调查者所在的公司允许使用OSS并反馈回OSS社区(而2007年是37%);46%的参入调查者所在的公司仅仅允许使用OSS而不能反馈回OSS社区(而2007年是27%);其中15.6%的参入调查者所在的组织把OSS作为商业模式(their organation relies on OSS as a business model),而2007年这个数据是10%;(社区)
3.89.1%用户对Eclipse满意或者很满意。(声望) -
2010-06-18
读《Geek and Penguin》(开源的路) - [读书]
文章《Geek and Penguin》(原文)论述了融入到开源中去的八种步伐。
给人印象深刻的两句话:
To truly embrace open-source is not just to read about it, but to apply it to everyday life.
open-source doesn't necessarily mean cheaper- in a lot of ways, it means better.
这八种步伐分别是:
1.Install LINUX on your computer.
2.Use free, open-source software.
3.If you're a developer, contribute to an open-source project.
4.Start a blog. Tell people HOW you achieved your accomplishments.
5.Join an open source community.
6.Promote Open Source. Preach the Gospel.
7.Create your own open source project.
8.Become an Open Source expert.
其中:
Open Source User通过1,2方式使用开源。
Open Source Participator通过3,4,5方式参入开源。
Open Source Expert通过6,7,8方式为开源布道。
也许每一天你都在使用开源,那参入、布道呢? -
NoSQL是一个易于误解的名词,其在技术社区是全称not only sql的缩写。
它主要是来源于人们对于下一代数据库的发展和定位思想:non-relational,distributed,open-source,horizontal scalable。这场全新的数据库革命运动在2009年告诉增长,同时希望具备更多特性:schema-free,easy replication support,simple API,eventulally consistent/BASE。
NoSQL的整体架构主要可被分为四层(原图来源):
1. 接口层(Interfaces):这层主要是为应用层次或者客户层提供API接口,主要包括:REST,Map Reduce,Get/Put,Thrift和语言特定的API等。
2. 逻辑数据模型层(Logical Data Model):这层主要是提供数据的逻辑表现形式,其逻辑模型主要有:Key-Value,列式,文档形式和图式等。
3. 数据分布模型层(Data Distribution Model):这层主要是实现了数据分布功能,主要有:CAP支持,多数据中心支持和动态部署支持等多种形式。
4. 数据持久化层(Data Persitence):这层主要是定义了数据的存储/持久化形式,主要有四种形式:基于内存,基于硬盘,内存和硬盘兼容存储等。
NoSQL在市场上的产品可以按其提供的逻辑数据模型来划分,主要分为:
Wid Column Store/Column Families
Document Store
Key Value/Tuple Store
Eventually Consistent Key Value StoreGraph Databases
Object Databases
Grid Database Solutions
XML Dababases
others等等。
不同的逻辑数据模型的产品,也会适用于不同的行业业务,具体的NoSQL系统请参考http://nosql-databases.org/参考:
http://www.infoq.com/articles/nosql-in-the-enterprise
http://nosql-databases.org/ -
2010-04-29
Caching Architecture for Web Scaling Out - [架构]
OSCON 2009大会Joaauin Ruiz在Controlling the Addiction:Best Practices for Scaling with Memcached&the LAMP Stack主题演讲中探讨的Caching Architecture for Scaling Out:

从这个图的层次可以看到,Web架构在物理上可能至少需要关注的Layer层次:
1.Client客户端
2.Internet CDN
3.Net Interface
4.Web Stack(包含Memcached的缓存所在的层次)
5.Storage Interface和Storage









