准备工作:
一、Android背景介绍
Android是一个开放的手机平台,为移动设备提供了一个包含操作系统、中间件及应用程序的软件叠层架构。Android SDK为开发人员使用Java语言编写Android平台下的应用程序提供了必要的工具和API。
1. Android的诞生
Android其实是一家公司的名称,这家公司的创始人名叫Andy Rubin。Andy Rubin原来是苹果公司的一名工程师,后来创办过几家公司。在创办Android公司时,Andy Rubin准备打造一个移动终端平台并将其对开发人员开放,后来Google收购了该公司,于是就有了今天如日中天的Android。
2. Android的特性
Android自推出以来如此受追捧不仅仅是因为网络巨头Google的大力扶持,Android自身所具有的特性才是吸引全球精英开发者的更重要原因。Android其主要特性如下:
- 应用程序框架:可以方便地重用和替换手机组件。
- Dalvik虚拟机:专为移动设备优化的虚拟机。
- 内部集成浏览器:基于开源的WebKit引擎。
- 优化的图形系统:其中自定义了2D图形库,3D图形库基于OpenGL ES 1.0,可选硬件加速。
- SQLite:集成了轻量级数据库管理系统。
- 多媒体支持:支持常见的音频和视频,以及各种图片格式,如MPEG4、H.264、MP3、AAC、AMR、JPG、PNG、GIF等。
- GSM技术、蓝牙、EDGE、3G和WiFi:需要硬件支持。
- 摄像头、GPS、罗盘、加速度计:需要硬件支持。
- 完备的开发环境:包括设备模拟器、调试工具、内存和性能分析工具,以及用于Eclipse开发环境的插件。
3. Android的优点
目前市面上的手机操作系统出了Android,还有Symbian、iPhone等,与这些手机操作系统相比,Android具有以下优点。
(1) 真正开放
Android平台提供了从底层操作系统到上层的程序界面的所有软件,使用这个平台无须缴纳任何授权许可费用,同时不同的厂商还可以根据自身需求修改和扩展Android平台。
(2) 应用程序相互平等
在Android平台下,除了应用程序运行的载体虚拟机之外,其它的软件是完全平等的。例如可以自己开发收发Email的应用程序来替换系统提供的相应软件。
(3) 应用程序之间沟通无限制
在Android平台下开发应用程序,可以方便地实现应用程序之间的数据共享,只需要经过简单的声明或操作,应用程序就可以访问或调用其他应用程序的功能,或者将自己的部分数据和功能提供给其他应用程序使用。
二、Android系统结构简介
![2.jpg 2.jpg](http://www.apkbus.com/data/attachment/forum/201104/23/125739r7do7ddo1g7uqz6h.jpg)
- Linux内核(Linux Kernel)
- Android运行在linux kernel 2.6之上,但是把linux内受GNU协议约束的部分做了取代,这样在Android的程序可以用于商业目的。
- Linux 内核是硬件和软件层之间的抽象层。
- 中间件
- 中间件包括两部分:核心库和运行时(libraries & Android runtime)
- 核心库包括,SurfaceManager 显示系统管理库,负责把2D或3D内容显示到屏幕;Media Framework 媒体库,负责支持图像,支持多种视频和音频的录制和回放;SQlite 数据库,一个功能强大的轻量级嵌入式关系数据库;WebKit 浏览器引擎等。
- Dalvik虚拟机:区别于Java虚拟机的是,每一个Android 应用程序都在它自己的进程中运行,都有一个属于自己的Dalvik 虚拟机,这一点可以让系统在运行时可以达到优化,程序间的影响大大降低。Dalvik虚拟机并非运行Java字节码,而是运行自己的字节码。
- 应用程序框架(Application Framework)
- 丰富而又可扩展性的视图(Views),可以用来构建应用程序, 它包括列表(lists),网格(grids), 文本框(text boxes),按钮( buttons), 可嵌入的web 浏览器。
- 内容提供者(Content Providers)使得应用程序可以访问另一个应用程序的数据(如联系人数据库), 或者共享它们自己的数据。
- 资源管理器(Resource Manager)提供非代码资源的访问,如本地字符串,图形,和布局文件( layoutfiles )。
- 通知管理器(Notification Manager) 使得应用程序可以在状态栏中显示自定义的提示信息。
- 活动管理器( Activity Manager) 用来管理应用程序生命周期并提供常用的导航回退功能。
- 应用程序 (Applications):Android 系统会内置一些应用程序包包括email 客户端,SMS 短消息程序,日历,地图,浏览器,联系人管理程序等。所有的应用程序都是使用JAVA 语言编写的。
三、AVD虚拟设备
—创建和启动虚拟设备名字( Name ):这个虚拟设备的名称,由用户自定义;目标 ( Target ):选择不同的 SDK 版本(依赖一目前 SDK 的 platform 目中包含 了哪些 版本的 SDK )SD 卡:模拟 SD 卡,可以选择大小或者一个 SD 卡映像文件, SD 卡映像文件 是用 mksdcard 工具建立的。皮肤 ( Skin ):这里皮肤的含义其实是仿真器运行尺寸的大小,默认的尺寸 有 HVGA-P ( 320x480 ), HVGA-L ( 480x320 )等,也可以通过直接指定尺寸的 方式 制定屏幕的大小。属性 :可以由用户指定仿真器运行的时候, Android 系统中一些属性
四、Android应用程序结构分析
1、src目录是源代码目录,所有允许用户修改的java文件和用户自己添加的java文件都保存在这个目录中2、gen目录是1.5版本新增的目录,用来保存ADT自动生成的java文件,例如R.java或AIDL文件注意:R.java文件(非常重要)a) R.java文件是ADT自动生成的文件,包含对drawable、layout和values目录内的资源的引用指针,Android程序能够直接通过R类引用目录中的资源b) R.java文件不能手工修改,如果向资源目录中增加或删除了资源文件,则需要在工程名称上右击,选择Refresh来更新R.java文件中的代码c) R类包含的几个内部类,分别与资源类型相对应,资源ID便保存在这些内部类中,例如子类drawable表示图像资源,内部的静态变量icon表示资源名称,其资源ID为0x7f020000。一般情况下,资源名称与资源文件名相同3、android.jar文件是Android程序所能引用的函数库文件,Android通过平台所支持API都包含在这个文件中:
android.app :提供高层的程序模型、提供基本的运行环境
android.content :包含各种的对设备上的数据进行访问和发布的类
android.database :通过内容提供者浏览和操作数据库
android.graphics :底层的图形库,包含画布,颜色过滤,点,矩形,可以将他们直接绘制到屏幕上.
android.location :定位和相关服务的类
android.media :提供一些类管理多种音频、视频的媒体接口
android.net :提供帮助网络访问的类,超过通常的java.net.*接口
android.os :提供了系统服务、消息传输、IPC 机制
android.opengl :提供OpenGL 的工具
android.provider :提供类访问Android 的内容提供者
android.telephony :提供与拨打电话相关的API 交互
android.view :提供基础的用户界面接口框架
android.util :涉及工具性的方法,例如时间日期的操作
android.webkit :默认浏览器操作接口
android.widget :包含各种UI 元素(大部分是可见的)在应用程序的屏幕中使用
4、assets目录用来存放原始格式的文件,例如音频文件、视频文件等二进制格式文件。此目录中的资源不能被R.java文件索引。,所以只能以资截流的形式读取。一般情况下为空5、main.xml文件,是界面布局文件,利用XML语言描述的用户界面6、Strings.xml文件是程序中的一些字符串的引用
7、AndroidManifest.xml是XML格式的Android程序声明文件,包含了Android系统运行Android程序前所必须掌握的重要信息,这些信息包含应用程序名称、图标、包名称、模块组成、授权和SDK最低版本等,而且每个Android程序必须在根目录下包含一个 AndroidManifest.xml文件注:AndroidMainfest.xml文件:1) AndroidManifest.xml文件的根元素是manifest,包含了xmlns:android、package、android:versionCode和android:versionName共4个属性2) xmlns:android定义了Android的命名空间,值为http://schemas.android.com/apk/res/android3) package定义了应用程序的包名称4) android:versionCode定义了应用程序的版本号,是一个整数值,数值越大说明版本越新,但仅在程序内部使用,并不提供给应用程序的使用者5) android:versionName定义了应用程序的版本名称,是一个字符串,仅限于为用户提供一个版本标识6) manifest元素仅能包含一个application元素,application元素中能够声明Android程序中最重要的四个组成部分,包括 Activity、Service、BroadcastReceiver和ContentProvider,所定义的属性将影响所有组成部分7) 第6行属性android:icon定义了Android应用程序的图标,其中@drawable/icon是一种资源引用方式,表示资源类型是图像,资源名称为icon,对应的资源文件为res/drawable目录下的icon.png8) 第7行属性android:label则定义了Android应用程序的标签名称8、default.properties文件记录Android工程的相关设置,该文件不能手动修改,需右键单击工程名称,选择“Properties”进行修改五、Android应用程序的运行和调试
—运行¡ Run As->AndroidApplication—调试¡ DDMS 的启动¡ Devices 面板¡ Emulator Control 面板¡ 信息输出面板¡ 日志输出— 传统方法: System.out.println ()— Log 类 :— Log.v (String tag,String msg ): 输出冗余信息— Log.d (String tag,String msg ) :输出调试信息— Log.i (String tag,String msg ) :输出普通信息— Log.w (String tag,String msg ) :输出警告信息— Log.e (String tag,String msg ) :输出错误信息
六、Android游戏与应用开发最佳学习路线图
—路线图概括:具体需要掌握的知识点:
具体知识点与目标:
如何成为一个Android高手:— 一、初级— 1. 拥有娴熟的Java基础,理解设计模式,比如OOP语言的工厂模式要懂得。— 2. 掌握Android UI控件、Android Java层API相关使用。— 迈向中级,最好再次更新下Java技术,掌握Java concurrent库、nio库,精通xml、json解析,做过socket c/s端的程序。— 二、中级— 1. 熟练掌握NDK JNI方式的开发,对Android framework十分了解。— 2. 移植一些开源项目,比如FFmpeg、Mplayer到Android上运行。— 迈向高级,熟悉android开源代码的结构,中间件下层的库,比如webkit、opencore、opengl。— 三、高级— 1. 熟练的Linux驱动开发,精通Linux内核结构。— 2. 掌握Android移植,比如常见的TI OMAP、Qualcomm MSM的硬件移植。— 迈向顶级,发现Android系统中的0day漏洞,可以轻松的找出Root系统的10种方法,帮助Google改进Android操作系统