Android游戏开发大全(第二版)
上QQ阅读APP看书,第一时间看更新

第1章 Android平台简介

Android是Google公司于2007年11月5日发布的基于Linux内核的移动平台,该平台由操作系统、中间件、用户界面和应用软件组成,是一个真正开放的移动开发平台。

本章将介绍Android系统的起源、特点、应用程序框架以及开发环境的搭建,让读者对Android平台有个初步的了解,之后将开发第一个Android程序Hello Android,并通过对该程序的简单分析,带领读者步入Android开发的大门。

1.1 Android的来龙去脉

Android的创始人Andy Rubin是硅谷著名的“极客”,他离开Danger移动计算公司后不久便创立了Android公司,并开发了Android平台,他一直希望将Android平台打造成完全开放的移动终端平台。之后 Android 公司被 Google 公司看中并将其收购。这样,号称全球最大的搜索服务商Google大举进军移动通信市场,并推出自主品牌的移动终端产品。

2007年11月初,Google正式宣布与其他33家手机厂商、软硬件供应商、手机芯片供应商、移动运营商联合组成开放手机联盟(Open Handset Alliance),并发布名为Android的开放手机软件平台,希望建立标准化、开放式的移动电话软件平台,在移动行业内形成一个开放式的生态系统。

1.2 掀起Android的盖头来

自从Android发布以来,越来越多的人关注Android的发展,越来越多的开发人员在Android系统平台上开发应用,是什么使Android备受青睐,什么使Android在众多移动平台中脱颖而出呢?

1.2.1 选择Android的理由

与其他手机平台上的操作系统相比,Android具有如下优点:

● 开放性;

● 平等性;

● 无界性;

● 方便性;

● 硬件的丰富性。

下面将对以上各个优点进行简单介绍。

1.开放性

提到Android的优势,首先想到的一定是其真正的开放,其开放性包含底层的操作系统以及上层的应用程序等。Google与开放手机联盟合作开发Android的目的就是建立标准化、开放式的移动软件平台,在移动产业内形成一个开放式的生态系统。

Android 的开放性也同样会使大量的程序开发人员投入到 Android 程序的开发中,这将为Android平台带来大量新的应用。

2.平等性

在Android的系统上,所有的应用程序完全平等,系统默认自带的程序与自己开发的程序没有任何区别,程序开发人员可以开发个人喜爱的应用程序来替代系统的程序,构建个性化的Android手机系统,这些功能在其他的手机平台是没有的。

在开发之初,Android 平台就被设计成由一系列应用程序组成的平台,所有的应用程序都运行在一个虚拟机上面。该虚拟机提供了系列应用程序之间和硬件资源通信的API。

3.无界性

Android 平台的无界性表现在应用程序之间的无界,开发人员可以很轻松地将自己开发的程序与其他应用程序进行交互,比如应用程序需要播放声音的模块,而正好你的手机中已经有一个成熟的音乐播放器,此时就不需要再重复开发音乐播放功能,只需简单地加上几行代码即可将成熟的音乐播放功能添加到自己的程序中。

4.方便性

在Android平台中开发应用程序是非常方便的,如果对Android平台比较熟悉,想开发一个功能全面的应用程序并不是什么难事。Android 平台为开发人员提供了大量的实用库及方便的工具,同时也将 Google Map等强大的功能集成了进来,只需简单的几行调用代码即可将强大的地图功能添加到自己的程序中。

5.硬件的丰富性

由于平台的开放,众多的硬件制造商推出了各种各样的产品,但这些产品功能上的差异并不影响数据的同步与软件的兼容,例如,原来在诺基亚手机上的应用程序,可以很轻松地被移植到摩托罗拉手机上使用,且联系人、短信息等资料更是可以方便地转移。

1.2.2 Android的应用程序框架

从软件分层的角度来说,Android平台由应用程序、应用程序框架、Android运行时库层以及Linux内核共4部分构成,本节将分别介绍各层的功能,分层结构如图1-1所示。

图1-1 Android平台架构图

1.应用程序层

本层的所有应用程序都是用Java编写的,一般情况下,很多应用程序都是在同一系列的核心应用程序包中一起发布的,主要有拨号程序、浏览器、音乐播放器、通讯录等。该层的程序是完全平等的,开发人员可以任意将Android自带的程序替换成自己的应用程序。

2.应用程序框架层

对于开发人员来说,接触最多的就是应用程序框架层。该应用程序的框架设计简化了组件的重用,其中任何一个应用程序都可以发布自身的功能供其他应用程序调用,这也使用户可以很方便地替换程序的组件而不影响其他模块的使用。当然,这种替换需要遵循框架的安全性限制。

该层主要包含以下9部分,如图1-2所示。

图1-2 应用程序框架

● 活动管理(Activity Manager)。用来管理程序的生命周期,以及提供最常用的导航回退功能。

● 窗口管理(Window Manager)。用来管理所有的应用程序窗口。

● 内容供应商(Content Providers)。通过内容供应商,可以使一个应用程序访问另一个应用程序的数据,或者共享数据。

● 视图系统(View System)。用来构建应用程序的基本组件,包括列表、网格、按钮、文本框,甚至是可嵌入的Web浏览器。

● 包管理(Package Manager):用来管理Android系统内的程序。

● 电话管理(Telephony Manager)。所有的移动设备的功能统一归电话管理器管理。

● 资源管理(Resource Manager)。资源管理器可以为应用程序提供所需要的资源,包括图片、文本、声音、本地字符串,甚至是布局文件。

● 位置管理(Location Manager)。该管理器是用来提供位置服务的,如GPRS定位等。

● 通知管理(Notification Manager)。主要对手机顶部状态栏的管理,开发人员在开发Android程序时会经常使用,如来短信提示、电量低提示,还有后台运行程序的提示等。

3.Android运行时库

该层包含两部分,程序库及Android运行时库。

程序库为一些C/C++库,这些库能够被Android系统中不同的应用程序调用,并通过应用程序框架为开发者提供服务。而Android运行时库包含了Java编程语言核心库的大部分功能,提供了程序运行时所需调用的功能函数。

程序库主要包含的功能库如图1-3所示。

图1-3 程序库框架

● libc。是一个从BSD继承来的标准C系统函数库,专门针对移动设备优化过的。

● Media Framework。基于PacketVideo公司的OpenCORE。支持多种常用音频、视频格式回放和录制,并支持多种图像文件,如MPEG-4、H.264、MP3、AAC、AMR、JPG、PNG等。

● Surface Manager。Surface Manager主要管理多个应用程序同时执行时,各个程序之间的显示与存取,并且为多个应用程序提供了2D和3D图层无缝的融合。

● SQLite。所有应用程序都可以使用的轻量级关系型数据库引擎。

● WebKit。是一套最新的网页浏览器引擎。同时支持Android浏览器和一个可嵌入的Web视图。

● OpenGLIES。是基于OpenGL ES 1.0 API标准来实现的 3D绘制函数库。该函数库支持软件和硬件两种加速方式执行。

● FreeType。提供位图(bitmap)和矢量图(vector)两种字体显示。

● SGL。提供了2D图形绘制的引擎。

Android运行时库包括核心库及Dalivik虚拟机,如图1-4所示。

图1-4 Android运行时库

● 核心库(Core Libraries)。该核心库包括 Java语言所需要的基本函数以及Android的核心库。与标准Java不一样的是,系统为每个Android的应用程序提供了单独的Dalvik虚拟机来执行,即每个应用程序拥有自己单独的线程。

● Dalvik虚拟机(Dalvik Virtual Machine)。大多数的虚拟机(包括 JVM)都是基于栈的,而Dalvik虚拟机则是基于寄存器的,它可以支持已转换为.dex格式的Java应用程序的运行。.dex格式是专门为Dalvik虚拟机设计的,更适合内存和处理器速度有限的系统。

4.Linux内核

Android平台中操作系统采用的是Linux 2.6内核,其安全性、内存管理、进程管理、网络协议栈和驱动模型等基本依赖于 Linux。对于程序开发人员,该层为软件与硬件之间增加了一层抽象层,使开发过程中不必时时考虑底层硬件的细节。而对于手机开发商而言,对此层进行相应的修改即可将Android平台运行到自己的硬件平台之上。

1.3 Android开发环境的搭建

本节主要讲述如何构建基于Eclipse的Android开发环境,之后对开发环境进行测试并创建第一个Android应用程序Hello Android。

1.3.1 SDK的下载及安装

前面已经对Android平台进行了简单的介绍,从本节开始,将带领读者逐步搭建自己的开发环境,具体的步骤如下。

(1)登录到SUN官方网站http://java.sun.com/javase/downloads下载最新的JDK安装程序。

(2)双击刚刚下载的JDK安装程序jdk-6u18-windows-i586.exe,根据提示将JDK安装到默认目录。

(3)用鼠标右键单击我的电脑,依次选择属性/高级/环境变量,在系统变量中新建一个名为JAVA_HOME,值为“C:\Program Files\Java\jdk1.6.0_18”的环境变量。

(4)再打开 Path环境变量,在最后加上“C:\Program Files\Java\jdk1.6.0_18\bin;”,单击“确定”按钮即可。

(5)到http://developer.android.com页面下载最新的SDK,本书使用的版本是2.1,其他版本的安装与配置方法基本相同。

(6)将下载好的SDK压缩包解压到C盘根目录下,如图1-5所示。

图1-5 Android SDK安装环境

(7)右键单击我的电脑,依次选择属性/高级/环境变量,打开Path系统环境变量,在其最后加上 SDK 的解压目录中的 tools 目录“C:\android-sdk-windows\tools”,单击“确定”按钮完成配置,如图1-6所示。

图1-6 SDK环境变量配置

1.3.2 Eclipse集成开发环境的搭建

上一小节已经讲解了SDK的安装与配置,本小节将带领读者构建基于Eclipse的集成开发环境,具体步骤如下。

(1)读者只需登录到http://www.eclipse.org/downloads/即可下载最新版本的Eclipse安装程序,本书采用的版本是3.5.1。

(2)将下载好的Eclipse安装程序解压到C盘根目录下,如图1-7所示。

图1-7 Eclipse安装目录

(3)双击C:\eclipse目录下的 eclipse.exe文件,运行Eclipse,再依次单击菜单Help/Install New Software项,如图1-8所示。

图1-8 Eclipse的软件安装

(4)单击弹出的Install界面中的“Add”按钮,在Name栏中输入任意的名字,并在Location栏中输入ADT的下载地址https://dl-ssl.google.com/android/eclipse/,如图1-9所示。

图1-9 填写 ADT地址

提示

如果输入的地址不能正常下载ADT,读者可以尝试将https://dl-ssl.google.com/android/eclipse/改为 http://dl-ssl.google.com/android/eclipse/。如果出现下载的 ADT与已经安装的 SDK 版本不兼容的情况,可以手动下载 ADT 压缩包,然后单击“Archive”按钮选择手动下载ADT压缩文件即可安装,如图1-10所示。

图1-10 选择 ADT压缩文件

(5)在 Install界面上选中“Developer Tools”并单击“Next”按钮,如图 1-11所示。

图1-11 选择 Develpoer Tools

(6)在弹出的界面中,直接单击“Finish”按钮,如图1-12所示。Eclipse将弹出提示窗口,单击“Yes”按钮,系统将自动重启Eclipse,到此为止已经完成ADT的安装。

图1-12 ADT安装完成界面

(7)重启Eclipse后,依次选择Window/Preferences项,如图1-13所示。

图1-13 选择“Preferences”菜单

(8)在弹出的窗口中选择左侧的“Android”,然后通过单击右侧的“Browse”按钮来选择SDK的安装目录,单击“OK”按钮完成配置,如图1-14所示。

图1-14 Preferences配置

1.3.3 虚拟设备的创建与模拟器的运行

前几小节已经完成了Eclipse集成环境的搭建工作,但在运行模拟器前还需要创建AVD(Android Virtual Device,Android虚拟设备)。AVD实质上是用来描述模拟器属性的,有了AVD开发人员可以为自己的模拟器进行必要的设置,如屏幕尺寸、内存等。本节将运用之前搭建好的 Eclipse环境创建虚拟设备并运行模拟器,具体步骤如下。

(1)在系统的开始菜单中单击“运行”按钮,在弹出的窗口中输入“cmd”进入命令行,如图1-15所示。

图1-15 启动cmd命令行

(2)通过 cd命令导航到 android的安装目录下的 tools下,并通过 android list target命令来显示当前可用的目标机,如图1-16所示。

图1-16 当前可用的目标机

(3)然后通过 android create avd--name android21--target 6命令创建一个名为 android21、目标机id为6的AVD,创建的AVD默认存放在我的文档下,而Android的AVD并不支持中文目录,可以通过配置ANDROID_SDK_HOME环境变量来指定所创建的AVD的存放位置。

提示

除了使用命令行方式来创建AVD外,还可以使用Eclipse自带的AVDManager来创建。在Eclipse中依次选择“Window/Android SDK and AVD Manager”打开AVD管理界面,如图1-17和图1-18所示;在AVD管理界面中不仅可以创建AVD,还可以对已经存在的AVD进行管理。

图1-17 打开 AVD管理器

图1-18 AVD管理界面

(4)在 cmd命令行中导航到Android的 tools目录后输入 emulator-avd android21命令启动Android模拟器,如果安装和配置正确的话,将出现如图1-19所示的模拟器界面。

图1-19 Android2.1模拟器效果图

提示

运行模拟器时可能会很慢,有时甚至可能达到几分钟时间,如果没有报错,请读者耐心等待。

1.3.4 第一个Android程序

前面已经对 Android 的开发环境和模拟器进行配置,本小节将带领读者构建第一个 Android程序并对该程序进行简单的讲解。

1.创建第一个Android应用程序

(1)启动Eclipse,依次选择“File/New/ Other…Eclipse”将弹出创建项目的窗口,如图1-20所示。

图1-20 创建项目界面

(2)选择“Android Project”,单击“Next”按钮,将弹出填写项目信息的界面,如图1-21所示。

图1-21 填写项目信息

(3)填写如图1-21所示的信息后单击“Finish”按钮即可完成项目的创建。创建后可在Package Explorer窗口中观察到项目的目录结构,如图1-22所示。

图1-22 HelloAndroid项目目录结构

(4)在项目名上单击鼠标右键,然后依次选择“Run As/Android Application”即可运行刚才创建的HelloAndroid项目,运行效果如图1-23所示。

图1-23 HelloAndroid项目竖屏效果图

提示

因为有很多程序或者游戏是横屏模式的,所以在程序调试过程中,可能需要将模拟器切换成横屏模式,读者可以通过使用快捷键Ctrl+F12来切换模拟器的横、竖屏模式,HelloAndroid程序在横屏模拟器中运行效果如图1-24所示。

图1-24 HelloAndroid项目横屏效果图

2.HelloAndroid的简单讲解

通过前面的学习,读者已经能够创建并运行简单的Android程序了,但可能对Android项目还不够了解,接下来将通过对HelloAndroid程序的详细介绍使读者了解Android项目的目录结构以及HelloAndroid的运行机理。

(1)先来看看HelloAndroid项目中各个目录和文件的作用。

● src目录,src目录用来存放应用程序中所有的源代码,代码的源文件一般是存放在相应的包下面,在开发Android应用程序时,大部分时间都是在编写src中的源代码。

● gen目录,该目录下一般只有一个文件,即R文件。该文件是由ADT自动产生的,存放的是应用程序中所使用的全部资源文件的ID,在应用程序开发过程中只是使用R文件,一般不需人工修改该文件。

● Android 2.1目录。该目录存放的是项目所需要的支持.jar包。

● assets目录。该目录存放应用程序中使用的外部资源文件,程序中可以通过输入/输出流对该目录中的文件进行读写。

● res 资源目录:该目录下有多个目录,分别用来存放程序中用到的图片、界面布局文件及XML格式的描述文件。

● AndroidManifest.xml。该文件是整个程序的系统控制文件,是每个应用程序都不可缺少的。其描述了应用程序有哪些组件、哪些资源、哪些权限等。

(2)AndroidManifest.xml文件是该项目的系统控制文件,该文件的代码如下。

代码位置:见随书光盘中源代码/第1章/Sample_1_1目录下的AndroidManifest.xml。

1 <?xml version="1.0" encoding="utf-8"?>  <!--XML的版本以及编码方式-->

2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"

3  package="wyf.ytl"

4  android:versionCode="1"

5  android:versionName="1.0"> <!--该标记定义了该项目的使用架构,所在的包以及版本号-->

6  <application android:icon="@drawable/icon" android:label="@string/app_name">

7          <!--定义了该项目在手机中的图标以及名称 -->

8   <activity android:name=".HelloAndroid"

9     android:label="@string/app_name"> <!-- 声明Activity组件 -->

10   <intent-filter>

11    <action android:name="android.intent.action.MAIN" />

12    <category android:name="android.intent.category.LAUNCHER" />

13   </intent-filter>     <!-- 声明Activity可以接受的Intent-->

14   </activity>

15  </application>

16  <uses-sdk android:minSdkVersion="7" /> <!-- 声明SDK的版本 -->

17 </manifest>

● 第1~5行定义了程序的版本、编码方式、用到的架构以及该程序所在的包与版本号。

● 第6行定义了程序在手机上的显示图标及显示名称。

● 第8~14行定义了一个名为HelloAndroid的Activity以及该Activity能够接受的Intent。

(3)main.xml是该项目的布局文件,其代码如下。

代码位置:见随书光盘中源代码/第1章/Sample_1_1/res/Layout目录下的main.xml。

1 <?xml version="1.0" encoding="utf-8"?> <!-- XML的版本以及编码方式 -->

2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

3  android:orientation="vertical"

4  android:layout_width="fill_parent"

5  android:layout_height="fill_parent"

6  >         <!--定义了一个线性布局,布局方式是垂直的-->

7 <TextView

8  android:layout_width="fill_parent"

9  android:layout_height="wrap_content"

10  android:text="@string/hello"

11  />         <!--向线性布局中添加一个TextView控件-->

12 </LinearLayout>

● 第2行定义了布局方式为LinearLayout,且左右和上下的填充方式为fill_parent。

● 第7行中向该布局中添加了一个TextView控件,其宽度和高度模式分别为fill_parent、wrap_content,在TextView控件显示的内容为string.xml中的hello的内容。

(4)项目的主类HelloAndroid.java的代码如下。

代码位置:见随书光盘中源代码/第1章/Sample_1_1/src/wyf/ytl目录下的Hel oAndroid.java。

1 package wyf.ytl;

2 import android.app.Activity;      //引入相关类

3 import android.os.Bundle;

4 public class HelloAndroid extends Activity {  //定义一个Activity

5  @Override

6  public void onCreate(Bundle savedInstanceState) { //重写的onCreate回调方法

7   super.onCreate(savedInstanceState);   //调用基类的onCreate方法

8   setContentView(R.layout.main);    //指定当前显示的布局

9  }

10 }

● 第4行是对继承自Activity子类的声明。

● 第6~9行重写了Activity的onCreate回调方法,在onCreate方法中先调用基类的onCreate方法,然后指定用户界面为R.layout.main,对应的文件为res/layout/main.xml。

1.3.5 Android程序的监控与调试

前面几个小节已经对 Android 应用程序的创建进行了详细讲解,本小节将介绍如何通过DDMS 来监控 Android 应用程序的运行以及如何调试 Android 程序。在调试过程中使用了android.util.log类,该类简单易用。监控与调试详细步骤如下。

(1)打开刚刚建立的项目,找到HelloAndroid.java文件,在第8行 super.onCreate (savedInstance State);之后添加“Log.d("TAG", "This is message!");”语句。

(2)在项目名上单击鼠标右键,然后依次选择“Run As/Android Application”运行该项目。

(3)依次单击Eclipse右上角的Open Perspective/Other,如图 1-25所示。Eclipse将弹出“OpenPerspective”对话框,如图1-26所示。

图1-25 打开Open Perspective窗口

图1-26 切换到DDMS视图

(4)单击“OK”按钮后将Eclipse切换到DDMS视角,如图1-27所示。LogCat显示在屏幕的下方,系统中所有的日志都将出现在LogCat中,通过对LogCat的观察可以详细了解Android程序运行的过程。

图1-27 LogCat界面

提示

在程序的开发和调试过程中,少不了对文本的输出,而在Android程序的开发中,建议使用Log类来打印需要打印的文本。

(5)在图1-27中可以看到在程序中添加的日志输出,这样在程序的开发过程中可以随时使用Log类来打印需要打印的信息,而当LogCat中日志过多时,可以使用过滤器Filter通过对tag进行过滤来筛选log。

1.4 小结

本章介绍了Android平台的来源及优点,并详细介绍了在Eclipse中如何构建Android的开发环境,最后创建了第一个Android的应用程序。通过本章的学习,读者应该已经对Android平台下应用程序的开发步骤有了初步的了解。

提示

由于本书的定位是对Android应用开发有一定基础的读者,故本书中对Android应用程序开发的基本知识并没有进行非常详细的介绍,主要的篇幅都是介绍和游戏开发相关的知识。若读者希望学习到Android平台开发的基本知识,可以参考由笔者编写,人民邮电出版社出版的《Android 应用开发完全自学手册——核心技术、传感器、2D/3D、多媒体与典型案例》一书。