第1章 什么是Android

Android是一个移动设备的软件栈,它包含操作系统,中间件和一些关键的应用。Android SDK提供工具和必要的API用来在Android平台上使用java程序语言来开始开发应用程序。

以上↑是官方的解释,但我们需要理解几个关键点。

(1)什么是软件栈:首先栈在数据结构中大家应该都明白,它是先进后出(或者后进先出)的数据结构。软件栈就是一种这样的结构,但它里面装的不单单是数据那么简单。

Android软件栈它的最底层是Linux内核,然后中间是一些库文件,最上层则是应用程序框架(或者可以叫应用程序接口俗称API)。

(2)java:开发android程序一般都是用java语言开发的,但某些特殊的情况可以用到C/C++,以后可能还会添加脚本语言也说不定。这里大家只需要了解就可以了,如果某人说Android只能用java开发,你可以完全否定他的说法。至少目前也有用C/C++开发底层来提高性能的

1.1 特性

下面我们看一下表格1-1,了解一下Android的特性

应用框架

允许组件的重用和更新(通俗来说就是符合面向对象的原则设计)

Dalvik虚拟机

专为移动设备最优化而设计(以后会有详细的Dalvik虚拟机原理与参数介绍)

浏览器

基于开源的WebKit引擎

图形优化

技术支持:一个自定义的2D图形库;基于OpenGL ES 1.0规格的3D图形 (可选择的硬件加速功能,ES版本不仅仅只有1.0还有其他版本,以后会详细说明)

SQLite

为数据存储服务的一个结构(SQL大家都知道把,大部分相似但不是完全一样)

多媒体支持

支持一般的音频,视频和一些图片格式(MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF)

蓝牙,EDGE,3G, WiFi

以及附属的一些硬件支持(EDGE是一种从GSM到3G的过渡技术,它主要是在GSM系统中采用了一种新的调制方法)

摄像机, GPS, 指南针, 加速器

以及附属的一些硬件支持

丰富多样化的开发环境

包含模拟器, 调试工具, 内存和性能概要, 和一个和基于Eclipse IDE的插件(ADT)

表格1-1 Android的特性

1.2 Android 架构

这就是我们上面说的软件栈的详细架构(大家可以看到底层是linux内核,中间层是库文件与运行时库文件还有虚拟机,蓝色部分我们可以看成API体系,下面讲述每个部分),如图1-1所示

图1-1 Android架构图

1.2.1 Applications(应用层)

这一层包含Android一整套核心的应用,它们分别包括email客户端,短信程序,日历,地图,浏览器,联系人和其他。这里所有应用程序都是用java语言实现的。

1.2.2 Application Framework(应用程序框架层)

Android通过提供一个开源的平台让开发者开发出极为丰富和创新功能的应用程序。我们可以自由充分的利用硬件设备,访问本地信息,执行后台服务,设置闹钟,通知状态栏

,等等。我们可以和核心应用程序(短信,日历等)使用同样的框架API。应用架构的设计可以简化组件的重用(面向对象又来咯);任何应用程序可以发布其功能,任何其他的应用程序都可以使用这些功能(必须遵守框架的安全限制,以后会说到的权限问题)。框架中的所有内容都会让我们很方便的替换任何组件。

下面的一些内容是一套应用程序的服务和系统,它们可用于所有应用程序,了解一下它们,有个印象会对以后的学习很有帮助,它们包括:

(1)一套丰富和可扩展的Views(请记住View这个概念,你需要显示界面就必须用到它)用来构建一个应用程序, 包含lists, grids, text boxes, buttons, 一个嵌入式的web浏览器.

(2)Content Providers:允许A应用从B,C,D应用中访问数据 (作为第三方中介), 或者共享自己的数据

(3)Resource Manager:提供非代码资源,如本地化字符串,图形,和布局文件(以后会详细描述android的资源使用与定义)

(4)Notification Manager:允许所有应用在状态栏中显示一个自定义的通知(这是一个很方便的功能)

(5)Activity Manager:管理应用的生命周期并且提供一个通用的导航回退功能(Activity是一个很重要的概念,后面会详细介绍的,留个印象)

Applicateion framework简单来说是一套比较完善的框架系统,它可以很好的为我们开发应用程序来服务,google把它开发出来的目的就是让你方便的使用它,在第二章我们将详细学习。现在还不着急!

1.2.3 Libraries(库文件集)

Android有一套C/C++库文件,它被各种各样的系统组件所使用,这些库文件越过android应用程序框架,在它的底层并暴露了一些功能给我们使用。

下面我们看一下表格1-2看看一些核心的库文件:

System C library

一个BSD(BSD:http://baike.baidu.com/view/209692.htm)衍生出的标准C库的实现, 使之与嵌入式基于Linux的设备相互协调

Media Libraries

基于视屏软件的开源内核;它支持目前主流音频,视频格式的播放,录音,以及静态图像文件,包括MPEG4,H.264,MP3,AAC,AMR,JPG,PNG

Surface Manager

管理访问子系统的显示和多应用无缝地整合到2D,3D。

LibWebCore

一个现代的web浏览器引擎,支持android浏览器和一个嵌入式的webView

SGL

基于SDL的2D图形引擎

3D libraries

基于OpenGL ES 1.0API的3D库; 这个库使用3D硬件加速(如果有的话)或者使用高度优化的3D软件光栅器

FreeType

位图与矢量格式渲染

SQLite

个强大的轻量级关系型数据库引擎

表格1-2 Android核心的库文件

1.2.4 Android Runtime(Android运行时)

Android平台大多数核心库功能是用java语言写的。每一个Android应用在其自己的进程中执行,并且在Dalvik虚拟机中都有一个自己的实例。一个设备能执行多个有效的虚拟机。Dalvik 虚拟机执行的是一种.dex格式的文件 。它经过优化以让它最低限度的内存占用。虚拟机的寄存器由java语言编译器执行编译并打包到.dex格式中

1.2.5 Linux Kernel(Linux内核)

Android 是以2.6版的Linux为核心的系统服务,如安全,内存管理,进程管理,网络协议栈,驱动模型 。这里的内核可以理解为一个在硬件和软件栈之间的桥梁(比较抽象的桥梁)

1.3 本章小结

本章是从比较大的方向来总体介绍android体系,读者需要有个大概的认识,然后才能层层深入。就好像一个软件项目的架构,好的架构会让你扩展起来更方便

本文来自jy02432443,QQ78117253。转载请保留出处,并保留追究法律责任的权利

第一部分:开发前的准备-第一章 什么是Andorid的更多相关文章

  1. Android开发艺术探索笔记——第一章:Activity的生命周期和启动模式

    Android开发艺术探索笔记--第一章:Activity的生命周期和启动模式 怀着无比崇敬的心情翻开了这本书,路漫漫其修远兮,程序人生,为自己加油! 一.序 作为这本书的第一章,主席还是把Activ ...

  2. C语言探索之旅】 第一部分第四课第三章:变量的世界之显示变量内容

    内容简介 1.课程大纲 2.第一部分第四课第三章:变量的世界之显示变量内容 3.第一部分第五课预告:基本运算 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用 ...

  3. 解析iOS开发中的FirstResponder第一响应对象

    1. UIResonder 对于C#里所有的控件(例如TextBox),都继承于Control类.而Control类的继承关系如下: 代码如下: System.Object System.Marsha ...

  4. [原创].NET 业务框架开发实战之十 第一阶段总结,深入浅出,水到渠成(后篇)

    原文:[原创].NET 业务框架开发实战之十 第一阶段总结,深入浅出,水到渠成(后篇) .NET 业务框架开发实战之十 第一阶段总结,深入浅出,水到渠成(后篇) 前言:接着上篇来. 系列文章链接: [ ...

  5. 第一部分 CLR基础:第3章 共享程序集和强命名程序集

    第一部分 CLR基础:第3章 共享程序集和强命名程序集

  6. C#开发学习人工智能的第一步

    前言 作为一个软件开发者,我们除了要学会复制,黏贴,还要学会调用API和优秀的开源类库. 也许,有人说C#做不了人工智能,如果你相信了,那只能说明你的思想还是狭隘的. 做不了人工智能的不是C#这种语言 ...

  7. 《 OO第一作业周期(前四周)总结 》

    作为一名软件工程的大学生,很高兴能够以这样一种方式,实现对博客编写零的突破.专业课老师也介绍了编写博客给我们带来的帮助,听了以后,我感觉到了培养出写博客的习惯,是一件多么有意义的事! 话不多说,让我们 ...

  8. OO第一单元(前四周)作业总结

    OO第一单元(前四周)作业总结 OO第一单元(前四周)作业总结要求(第四次作业) 0.前言 本次博客针对的是本人学习Java的第一阶段的三次作业的作业总结 第一次作业的内容是:7-1 计算税率 (20 ...

  9. Newbe.Claptrap 框架入门,第一步 —— 开发环境准备

    Newbe.Claptrap 框架依托于一些关键性的基础组件和一些可选的辅助组件.本篇我们来介绍一下如何准备一个开发环境. Newbe.Claptrap 是一个用于轻松应对并发问题的分布式开发框架.如 ...

随机推荐

  1. 【Java】 剑指offer(38) 字符串的排列

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 输入一个字符串,打印出该字符串中字符的所有排列.例如输入字符串ab ...

  2. CSS3 根据屏幕大小显示内容(@media)

    @media (min-width: 993px) {  .footer .addZ1{display:none;}  .footer .addZ2{display:none;}  .footer . ...

  3. C++语言实现-拓扑排序

    1.拓扑排序的概念 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则 ...

  4. 一步一步写数据结构(二叉树的建立和遍历,c++)

    简述: 二叉树是十分重要的数据结构,主要用来存放数据,并且方便查找等操作,在很多地方有广泛的应用. 二叉树有很多种类,比如线索二叉树,二叉排序树,平衡二叉树等,本文写的是最基础最简单的二叉树. 思路: ...

  5. window下mongodb安装和配置

    mongodb安装和配置 1.下载:https://www.mongodb.com 2.解压到盘的根目录下,本人解压到D盘根目录 3.在软件根目录下新建一个文件夹data 4.再新建两个文件夹db.l ...

  6. Angular 个人深究(二)【发布与订阅】

    Angular 个人深究(二)[发布与订阅] 1. 再入正题之前,首先说明下[ 发布与订阅模式](也叫观察者模式) 1) 定义:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个 ...

  7. vue 解决双向绑定中 父组件传值给子组件后 父组件值也跟着变化的问题

    说明: 近日开发中碰见一个很诡异的问题,  父组件动态的修改对象 data 中的值, 然后将这个对象 data 传给子组件, 子组件拿到后将 data 中的值 乘以 100 ,发现父组件中的值也跟着变 ...

  8. Web大前端面试题-Day11

    86.如何获得高效的数据库逻辑结构? 从关系数据库的表中 删除冗余信息的过程 称为数据规范化, 是得到高效的关系型数据库表的逻辑结构 最好和最容易的方法. 规范化数据时应执行以下操作: 1.将数据库的 ...

  9. CF915E Physical Education Lessons 动态开点线段树

    题目链接 CF915E Physical Education Lessons 题解 动态开点线段树 代码 /* 动态开点线段树 */ #include<cstdio> #include&l ...

  10. Educational Codeforces Round 47 (Div 2) (A~G)

    目录 Codeforces 1009 A.Game Shopping B.Minimum Ternary String C.Annoying Present D.Relatively Prime Gr ...