增辉安卓进阶之旅系列学习笔记

移动设备开源平台 | Android 进阶之路


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:http://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:转储系统信息,这些信息包括,模拟器抛出错误时堆栈的运行过程以及日志信息。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容