android是什么意思(Android 进阶之路)

2024-11-21 11:00:58 百科

Android是什么

Android是一个针对移动设备的开源软件平台,该平台包括操作系统、中间件、用户界面和应用软件

Android历史

Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称。

Google还联合手机制造商、手机芯片厂商、移动运营商,共同于2007年11月组建一个全球性的联盟组织,称作开放手机联盟(Open Handset Alliance),共同来开发Android。

Android SDK(Software Development Kit, 即软件开发工具包)

Android SDK提供了在Android平台上使用Java语言进行Android应用开发必须的工具和API接口。

Android能干什么

下面罗列了一些Android的特性,包含但不限于:

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

2:Dalvik虚拟机 专门为移动设备做了优化

3:内部集成浏览器,该浏览器基于开源的WebKit引擎

4:优化的图形库:包括2D和3D图形库,3D图形库基于OpenGL ES(硬件加速可选)

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

6:多媒体支持 包括常见的音频、视频和图片文件格式 (如 MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF)

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

8:蓝牙Bluetooth, EDGE, 3G, and WiFi (依赖于硬件)

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

10:丰富的开发环境 包括设备模拟器,调试工具,内存及性能分析图表,和Eclipse集成开发环境插件

Android有什么

Linux内核

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

本机库

在linux内核上面是Android本机库,就是libraries,这些本机共享库都是由c/c++编写的,针对硬件进行了编译,并由手机制造商预先安装到手机上。

这些库能被Android系统中不同的组件使用,它们通过 Android 应用程序框架为开发者提供服务。

以下是一些核心库:

1:界面管理器(surface manager):它并不是将显示内容直接绘制到屏幕缓冲区,而是将绘制命令传递给屏幕外的位图,然后将该位图和其他位图组合起来,形成用户看到的内容,这种方法允许系统实现所有有趣的功能,如透明窗口和奇特的过渡效果。

2:2D和3D图形:使用Android的时候,二维和三维图象可以结合到一个用户界面上,库将使用3D硬件(如果有的话)或者快速软件渲染器。

3:多媒体编解码器:Android可以播放视频内容,并可以使用各种格式录制和播放音频:如AAC、AVC(H.264)、H.263、MP3、MPEG-4

4:sql数据库:SqlLite,一个轻量级的关系数据库引擎,firefox和iphone中也是使用的它。

5:浏览器引擎:webkit , Google的chrome,苹果的Safari浏览器,iphone,诺基亚的s60平台都是用的它

6:系统 C 库:一个从 BSD 继承来的标准 C 系统函数库( libc ), 它是专门为基于 embedded linux 的设备定制的。

7:SGL:底层的2D图形引擎

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

9:FreeType:位图(bitmap)和矢量(vector)字体显示。

运行时环境

运行时环境包括:java的核心类库,虚拟机Dalvik,Dalvik与传统的Java虚拟机不同在于:

1:Dalvik 基于寄存器,而JVM 基于栈。,基于寄存器的虚拟机对于更大的程序来说,在它们编译的时候,花费的时间更短。

2:Dalvik运行.dex文件,编译时会将class和jar文件转换成为.dex,.dex文件比class文件更紧凑更高效,这是针对Android设备内存有限且通过电池供电,能耗要低的特点作出的重大改进。

3:Dalvik 经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik 应用作为一个独立的Linux 进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭.

4:Android附带的Java库与传统的java库也有很多的不同,当然也有很大一部分相同,做了很多改进。

应用程序框架

应用程序框架提供了应用程序开发所需要的大部分基础功能,包括:

1:活动管理器(Activity Manager):用来控制应用程序生命周期,同时维护一个公共的后退栈(back stack)供用户使用

2:内容提供者(Content Providers):用来封装需要在应用程序之间共享的数据,如联系人信息等

3:资源管理器(Resource Manager):资源是指的程序中涉及的任何非代码的内容

4:位置管理器(Location Manager):用来处理关于位置的功能,比如GPS

5:通知管理器(notification Manager):像收到短信、邻近预约时间、临界状态报警、异常入侵等事件都可以以友好的方式通知用户

6:视图系统(View System),丰富而又可扩展的视图组件,可以用来构建应用程序, 它包括列表(lists),网格(grids),文本框(text boxes),按钮(buttons),甚至可嵌入的web浏览器等。

7:窗口管理器(Window Manager):用来管理窗口的一些状态、属性、view增加、删除、更新、窗口顺序、消息收集和处理等。

8:包管理器(Package Manager):用来封装所有基于加载信息的数据结构,安装卸载应用查询permission相关信息;查询Application相关信息(application,activity,receiver,service,provider及相应属性等)

9:电话管理器(Telephony Manager):用来管理所有与电话相关的操作以及相应事件的管理

Android的HelloWorld

构建环境

1:安装JDK6以上

2:下载Android的SDK Manager,通过这个软件来进行初次的Android的SDK下载和管理。 安装完SDK后,要把sdk\tools设置到path里面去。

3:安装Eclipse,最好安装最新版

4:安装ADT插件,在插件安装后,要设置SDK的位置,在window—〉preference—〉android选项里面,右边有一个SDK Location的配置。

5:创建Android虚拟设备,也就是AVD,在window—〉Android SDK and AVD Manager里面创建一个新的AVD。

SDK下包的说明

1:add-ons:Android开发需要的第三方文件和软件库

2:docs:Android的文档。包括开发指南、API参考、资源等

3:extras:扩展的附加包

4:platforms:你安装下载的所有Android平台,分版本存放

5:platform-tools:平台相关的工具

6:samples:所有的样例程序

7:system-images:系统使用的图片

8:temp:临时操作或缓存的目录

9:tools:应用Android平台进行开发所需要的一些开发工具

常见的api包说明

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

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

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

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

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

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

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

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

9:android.opengl :提供OpenGL 的工具

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

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

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

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

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

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

创建一个Android工程

项目的目录结构说明如下:

1:assets :存放原生文件,这个目录保存的文件可以打包在程序里。和res的不同点是,android不为assets下的文件生成ID,如果使用assets下的文件,需要指定文件的路径和文件名。

2:bin : Java编译输出的路径

3:gen :存放android编译资源文件自动生成的R文件。

4:res :存放程序所需要的资源文件,也就是非Java的文件。常见的目录有:

(1)res/animator/ :XML文件,定义动画属性

(2)res/anim/ :XML文件,它们被编译进逐帧动画(frame by frame animation)或补间动画(tweened animation)对象

(3)res/color/:XML文件,定义颜色状态的列表

(4)res/layout/:存放被编译为屏幕布局(或屏幕的一部分)的XML文件

(5)res/menu/:XML文件,用来定义应用的菜单

(6)res/drawable/:存放图片文件,如.png, .9.png, .jpg, .gif等。放在这里的图像资源可能会被aapt(android assert packaging tool,android资源打包工具)自动地进行无损压缩优化。如果你不想图片被压缩改变,请把图像文件放在 res/raw/目录下,这样可以避免被自动优化。

(7)res/raw/:直接复制到设备中的任意文件,它们无需编译

(8)res/values/:存放可以被编译成很多种类型的资源文件, XML 格式的。常见的文件有:

array.xml :定义数组 colors.xml :定义color drawable和颜色的字符串值。 dimens.xml 定义尺寸值(dimension value)。 strings.xml 定义字符串(string)值。 styles.xml定义样式(style)对象。

(9)res/xml/:任意的XML文件,在运行时可通过调用Resources.getXML()读取。

5:src : 存放Java源代码

项目的清单文件AndroidManifest.xml :这个清单给Android系统提供了关于这个应用程序的基本信息,系统在能运行任何程序代码之前必须知些信息。AndroidManifest.xml主要包含以下功能:

(1)命名应用程序的 Java 包,这个包名用来唯一标识应用程序

(2)描述应用程序的组件:活动,服务,广播接收者,以及组成应用程序的内容提供器;对实现每个组件和公布其能力(比如,能处理哪些意图消息)的类进行命名。这些声明使得 Android系统了解这些组件以及在什么条件下可以被启动;

(3)决定应用程序组件运行在哪个进程里面

(4)声明应用程序所必须具备的权限,用以访问受保护的部分 API,以及和其它应用程序交互;

(5)声明应用程序其他的必备权限,用以组件之间的交互;

(6)列举测试设备Instrumentation类,用来提供应用程序运行时所需的环境配置和其他信息,这些声明只是在开发和测试阶段存在,发布前将被删除

(7) 声明应用程序所要求的Android API的最低版本级别;

(8)列举application所需要链接的库

在strings.xml修改hello对应的字符串

启动模拟器开始测试运行

认识模拟器和DDMS

DDMS:Dalvik Debug Monitor Server ,Dalvik调试监视器服务,它支持端口转换(因此你可以在IDE中给你的代码下端点),支持抓取模拟器屏幕,线程和堆栈信息,以及许多其他功能。

logcat:转储系统信息,这些信息包括,模拟器抛出错误时堆栈的运行过程以及日志信息。

最后这里放上我耗时两个月,将自己8年 Android 开发知识笔记整理成了一份系统学习资料笔记技术相关的知识点笔记中都有详细的解读并且把每个技术点整理成了 PDF 文档(知识脉络 + 诸多细节)有需要的小伙伴:可以私信发送"笔记"就可以免费领取