安卓游戏开发入门指南
立即解锁
发布时间: 2025-08-26 00:32:31 阅读量: 1 订阅数: 5 


Android游戏开发:从零开始构建经典射击游戏
# 安卓游戏开发入门指南
## 1. 安卓游戏开发简介
欢迎进入安卓游戏的世界!这里可以学习创建两种类型的游戏:纯 Java 游戏和混合游戏。混合游戏结合了 Java 的优雅设计与 C 语言的强大性能,能带来极致的游戏体验。虽然 Java 提供了构建任何类型游戏所需的 API,但有数千款用 C 语言编写的游戏可以通过编译 C 核心并使用 Java 本地接口(JNI)包装 Java 图形用户界面(GUI)移植到安卓平台。例如,将两款伟大的 PC 3D 射击游戏《德军总部 3D》和《毁灭战士》移植到安卓平台。
## 2. 所需技能
### 2.1 安卓开发基础
需要熟悉安卓开发的基础知识,包括活动(Activities)、视图(Views)和布局(Layouts)。以下代码片段定义了控制应用程序生命周期的主活动:
```java
public class MainActivity extends Activity
{
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
```
`onCreate` 方法在应用程序启动时调用一次,用于设置应用程序的内容布局或 GUI。
还需要了解如何使用 XML 创建 GUI。以下代码定义了一个相对布局:
```xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageView android:id="@+id/doom_iv"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/doom"
android:focusableInTouchMode="true" android:focusable="true"/>
<ImageButton android:id="@+id/btn_upleft"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:src="@drawable/img1" />
</RelativeLayout>
```
在相对布局中,小部件相对于彼此放置(有时会重叠)。此布局中有一个填充整个屏幕的图像视图,显示项目 `res/drawable` 文件夹中的 `doom.png` 文件作为背景,并接收按键和触摸事件。在屏幕左下角,重叠图像视图的位置将显示一个 ID 为 `btn_upleft` 的图像按钮。
如果需要安卓开发教程,可以访问:
- 安卓教程:[http://developer.android.com/](http://developer.android.com/)
- 安卓开发者终极指南:[http://developer.android.com/sdk/1.6_r1/index.html](http://developer.android.com/sdk/1.6_r1/index.html)
### 2.2 安卓 SDK 命令工具
需要清楚了解安卓软件开发工具包(SDK)命令工具,特别是安卓调试桥(adb),并掌握以下操作:
1. **创建安卓虚拟设备(AVD)**:AVD 封装了特定设备配置的设置,如固件版本和 SD 卡路径。可以通过集成开发环境(IDE)中的 AVD 管理器(点击工具栏中的黑色手机图标)创建。
2. **创建 SD 卡文件**:为节省空间,部分游戏文件存储在设备 SD 卡中。例如,在主目录下创建一个 100MB 的 SD 卡文件 `sdcard.iso`,使用命令:
```bash
$ mksdcard 100M $HOME/sdcard.iso
```
3. **连接到模拟器**:用于进行系统管理,如库提取。使用以下命令打开设备的 shell:
```bash
$ adb shell
```
4. **上传和拉取文件**:用于在设备和本地之间存储和提取游戏文件。使用以下命令:
```bash
$ adb push <LOCAL_FILE> <DEVICE_FILE>
$ adb pull <DEVICE_FILE> <LOCAL_FILE>
```
**注意**:在运行创建 SD 卡文件、连接到模拟器或上传和拉取文件的命令之前,确保将 `SDK_HOME/tools` 目录添加到系统 `PATH` 变量中。
### 2.3 Linux 和 shell 脚本基础知识
在开发混合游戏时,需要在 Ubuntu Linux 环境中工作,因此需要掌握基本的 shell 命令,如列出文件、安装软件组件和基本系统管理。了解 bash shell 脚本也会很有帮助。如果需要复习 Linux 和 shell 脚本知识,可以参考:[http://supportweb.cs.bham.ac.uk/documentation/tutorials/docsystem/build/tutorials/unixscripting/unixscripting.html](http://supportweb.cs.bham.ac.uk/documentation/tutorials/docsystem/build/tutorials/unixscripting/unixscripting.html)
## 3. 所需软件工具
为了编译混合(C/Java)游戏,需要安装以下软件:
| 软件名称 | 说明 | 下载地址 |
| ---- | ---- | ---- |
| VMware Player 或 Workstation | 用于运行 Linux 虚拟机(VM) | [http://www.vmware.com/products/player/](http://www.vmware.com/products/player/) |
| Ubuntu Linux VMware 应用程序 | 实际的 Linux 操作系统,所有开发将在此进行 | [http://www.vmware.com/appliances/](http://www.vmware.com/appliances/) |
| Eclipse | 开发 IDE,版本 3.3(Europa)、3.4(Ganymende)或 3.5(Galileo)均可 | - |
| 安卓 SDK,正确配置 | 最新版本为 1.6,使用安卓调试桥连接到设备 | - |
| Java JDK 5.0 或更高版本 | 运行 Eclipse 和安卓 SDK 所需 | - |
### mermaid 流程图
```mermaid
graph LR
A[VMware Player/Workstation] --> B[Ubuntu Linux VM]
C[Eclipse] --> B
D[Android SDK] --> B
E[Java JDK] --> C
E --> D
```
## 4. 机器设置
为了构建安卓游戏,需要在 Linux 桌面安装三个软件组件:
1. **安卓源代码**:包含整个安卓源代码,以及用于构建自定义共享库的 C/C++/JNI 头文件。
2. **安卓本地库**:包括 C 运行时、数学、XML、声音等库。
3. **ARM 处理器的 GNU C/C++ 工具链**:提供构建本地库所需的 C/C++ 编译器和链接器,以及调试器和分析器等有用工具。
### 4.1 获取安卓源代码
Google 使用名为 Gittool 的软件版本控制工具来存储源代码。根据 Ubuntu 版本,可能需要安装一些必需的软件包。在控制台中输入以下命令(所有内容在一行):
```bash
$ sudo apt-get install git-core gnupg
sun-java5-jdk flex bison gperf
libsdl-dev libesd0-dev libwxgtk2.6-dev
build-essential zip curl libncurses5-dev zlib1g-dev
```
还需要安装和配置 Google 提供的 `repo` 工具,以方便使用 Git。执行以下操作:
```bash
$ cd ~
$ mkdir bin
$ curl http://android.git.kernel.org/repo >~/bin/repo
$ chmod a+x ~/bin/repo
$ export PATH=$HOME/bin:$PATH
```
如果希望每次登录系统时都能使用该命令,可以将 `export PATH=$HOME/bin:$PATH` 添加到 `$HOME/.bashrc` 文件中。
创建一个名为 `mydroid` 的文件夹来存储源代码,并切换到该文件夹:
```bash
$ mkdir mydroid
$ cd mydroid
```
最后,下载代码:
```bash
$ repo init -u git://android.git.kernel.org/platform/manifest.git
$ repo sync
```
**提示**:`repo init` 命令将下载主分支。若要下载其他分支,使用 `repo init -u git://android.git.kernel.org/platform/manifest.git -b [BRANCH_NAME]`。
下载完成后,最重要的文件夹是 `bionic`,它是支持 ARM 和 x86 指令集的 C 库,用于在安卓设备上运行,其源代码是 BSD C 库和自定义 Linux 特定代码的混合,将提供构建共享库所需的大部分 C 头文件。
## 5. 提取安卓本地库
上一步获取的头文件库为代码编译提供了必要的文件,但在链接过程中还需要系统镜像共享库,即设备 `/system/lib` 目录下的 `.so` 文件。可以使用安卓调试桥(adb)连接到设备,运行 `df` 命令查看设备文件系统信息,使用 `ls` 命令查看 `/system/lib` 目录下的重要库,如 C 运行时(`libc.so`)、数学运行时(`libm.so`)等。
以下是查看设备文件系统和 `/system/lib` 目录下库的示例命令及输出:
```bash
user@ubuntu:~$ adb shell
# df
/dev: 47284K total, 0K used, 47284K available (block size 4096)
/sqlite_stmt_journals: 4096K total, 0K used, 4096K available (block size 4096)
/system: 65536K total, 43496K used, 22040K available (block size 4096)
/data: 65536K total, 43004K used, 22532K available (block size 4096)
/cache: 65536K total, 1156K used, 64380K available (block size 4096)
/sdcard: 40309K total, 34114K used, 6195K available (block size 512)
# ls -l /system/lib
-rw-r--r-- root root 9076 2008-11-20 00:10 libdl.so
-rw-r--r-- root root 227480 2008-11-20 00:10 libc.so
-rw-r--r-- root root 13368 2008-11-20 00:10 libthread_db.so
-rw-r--r-- root root 9220 2008-11-20 00:10 libstdc++.so
-rw-r--r-- root root 140244 2008-11-20 00:10 libm.so
-rw-r--r-- root root 79192 2008-11-20 00:10 libz.so
-rw-r--r-- root root 92572 2008-11-20 00:10 libexpat.so
-rw-r--r-- root root 767020 2008-11-20 00:10 libcrypto.so
-rw-r--r-- root root 155760 2008-11-20 00:10 libssl.so
[Other files...]
```
为了将这些库提取到本地系统进行链接,可按以下步骤操作:
1. 在主目录下创建一个文件夹来存储这些库:
```bash
$ mkdir -p $HOME/tmp/android/system/lib
$ cd $HOME/tmp/android/system/lib
```
2. 创建一个简单的脚本,将设备 `/system/lib` 目录下的库文件拉取到本地:
```bash
#!/bin/bash
# Device libraries for Emulator 1.5+
# These are located in/system/lib
libs="browsertestplugin.so libEGL.so libFFTEm.so
libGLESv1_CM.so libaes.so libagl.so libandroid_runtime.so
libandroid_servers.so libaudioflinger.so libc.so libc_debug.so
libcameraservice.so libcorecg.so libcrypto.so
libctest.so libcutils.so libdl.so libdrm1.so
libdrm1_jni.so libdvm.so libemoji.so
libexif.so libexpat.so libhardware.so libhardware_legacy.so
libicudata.so libicui18n.so libicuuc.so libjni_latinime.so
libjni_pinyinime.so liblog.so libm.so libmedia.so libmedia_jni.so
libmediaplayerservice.so libnativehelper.so libnetutils.so
libopencoreauthor.so libopencorecommon.so libopencoredownload.so
libopencoredownloadreg.so libopencoremp4.so libopencoremp4reg.so
libopencorenet_support.so libopencoreplayer.so libopencorertsp.so
libopencorertspreg.so libpagemap.so libpixelflinger.so
libpvasf.so libpvasfreg.so libreference-ril.so libril.so libsgl.so
libskiagl.so libsonivox.so libsoundpool.so libsqlite.so
libsrec_jni.so libssl.so libstdc++.so libsurfaceflinger.so
libsystem_server.so libthread_db.so libui.so
libutils.so libvorbisidec.so libwbxml.so libwbxml_jni.so
libwebcore.so libwpa_client.so libxml2wbxml.so libz.so"
# Loop thru lib names
for lib in $libs
do
# Pull the library into the local file system
adb pull /system/lib/$lib ./
done
```
## 6. 安装 ARM 处理器的 GNU 工具链
目前已经获取了安卓源代码和设备库,还需要一个 C 编译器。这里使用 Sourcery G++ Lite Edition for ARM 提供的工具链,它为安卓设备使用的 ARM 硬件提供了构建软件所需的 C 库、二进制实用程序、预处理器、编译器、调试器、分析器和链接器。
有两种安装方式可供选择:
1. **下载简易安装程序**:可参考相关界面进行操作。
2. **下载 tar 格式文件并解压**:这是更快捷的方式,使用以下命令在桌面解压:
```bash
$ cd $HOME/Desktop
$ tar zxvf arm-2008q3-72-arm-none-linux-gnueabi.tar.gz
```
无论选择哪种安装方式,都需要将 `bin` 文件夹添加到系统路径,以便从控制台调用工具链。将以下内容添加到 `$HOME/.bashrc` 文件中:
```bash
ARM_HOME=$HOME/Desktop/arm-2008q3
export PATH=$PATH:$ARM_HOME/bin
```
安装完成后,可以通过以下命令进行快速测试:
```bash
user@ubuntu:~$ arm-none-linux-gnueabi-gcc --version
arm-none-linux-gnueabi-gcc (Sourcery G++ Lite 2008q3-72) 4.3.2
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
```
### 6.1 工具链常用命令
工具链提供了一些非常有用的命令,如下表所示:
| 命令 | 说明 |
| ---- | ---- |
| `arm-none-linux-gnueabi-gcc` | C 编译器,类似于 Linux 的 `gcc` 命令,大部分选项与 Linux 版本相近。 |
| `arm-none-linux-gnueabi-g++` | C++ 编译器,在 `gcc` 命令基础上增加了 C++ 相关选项。 |
| `arm-none-linux-gnueabi-ld` | 链接器,用于构建最终的二进制文件,可以是静态的整体文件或动态的共享库。 |
| `arm-none-linux-gnueabi-objdump` | 显示二进制文件的信息,如存档头信息、文件头内容、可执行段的汇编内容等。 |
| `arm-none-linux-gnueabi-strip` | 从二进制文件中移除符号和节,包括符号和重定位信息、调试符号和节、非全局符号等,有助于减小最终可执行文件的大小。 |
例如,使用 `arm-none-linux-gnueabi-objdump` 命令查看从设备拉取到本地的 C 运行时库 `libc.so` 的符号表信息:
```bash
$ arm-none-linux-gnueabi-objdump -T ~/tmp/android/system/lib/libc.so
DYNAMIC SYMBOL TABLE:
00008560 l d .text 00000000 .text
0002c638 l d .rodata 00000000 .rodata
00032264 l d .ARM.extab 00000000 .ARM.extab
00035004 l d .data.rel.ro 00000000 .data.rel.ro
00035e58 l d .data 00000000 .data
000370e4 l d .bss 00000000 .bss
000195ec g DF .text 00000034 getwchar
0000d134 g DF .text 00000000 longjmp
...
```
这样的命令有助于检测程序使用但设备标准库中缺失的符号。
### mermaid 流程图
```mermaid
graph LR
A[下载安卓源代码] --> B[提取安卓本地库]
B --> C[安装 ARM 工具链]
C --> D[开发混合游戏]
```
通过以上步骤,就完成了安卓游戏开发环境的搭建,可以开始进行混合(C/Java)游戏的开发了。希望这些内容能帮助你顺利开启安卓游戏开发之旅!
0
0
复制全文
相关推荐








