Android游戏开发书籍Pro Android Games翻译之第一章(节选)

来源:互联网 发布:phpqq教程网源码 编辑:程序博客网 时间:2024/06/05 10:19

作者:Android-Insight

 

书本的内容非常详细,我节选了里面的内容,可以让读者方便地作为教程一步一步地配置,要看完整版本,可以下载pdf文件。读者需要知道如何做以下几件事情:

  • 创建一个Android虚拟设备(AVD)。一个AVD封装了一个Android设备的配置,例如固件版本,SD卡路径。创建一个AVD非常简单,通过在集成开发环境(IDE)中通过AVD Manager就可以设置。
  • 创建一个SD卡文件。在后面的章节中有的游戏需要使用比较大的文件(5MB或者更多)。为了节省空间,代码将所有游戏文件存储在SD卡中,所以读者需要知道如何创建一个。例如,创建一个100MB的SD卡文件在home目录下,命名为sdcard.iso,使用如下命令                                         $ mksdcard 100M $HOME/sdcard.iso
  • 连接到模拟器(emulator),在很多系统管理操作中都需要用到,例如库的提取。打开设备的shell,使用如下命令:            $ adb shell
  • 从emulator上传和下载文件,在往设备存储游戏文件或者从设备提取游戏文件时都要使用到以下命令:       $ adb push <LOCAL_FILE> <DEVICE_FILE>                               $ adb pull <DEVICE_FILE> <LOCAL_FILE>

 Linux和Shell脚本的基础知识

  在解决混合编程的章节里,读者将在Ubuntu Linux操作系统下工作,所以需要知道一些基本的shell命令,例如显式文件裂变,安装软件和基本的系统管理。本书中有一些非常简单的shell脚本。Bash shell的一些基本知识常常是很有帮助的。

需要什么软件?

  这一章将着重介绍如何设置混合编译C/Java的环境。包括IDE(Eclipse)和Android SDK。一下软件假定已经安装好了:

  • VMware Player或者Workstation: 这是用来运行一个Linux虚拟机(Virtual Machine)。VMware可以在(http://www.vmware.com/products/player/) 上免费下载;
  • Ubuntu Linux:在这个系统上可以进行所有的开发,如果你没有,可以在VMware Virtural Appliance Marketplace(http://www.vmware.com/appliances/)下载,这个会比较大(600+MB);
  • Eclipse:这是开发Android应用程序的IDE,3.3(Europa), 3.4(Ganymende)或者3.5(Galileo)都可以;
  • Android SDK:在本书编写的时候最新版的SDK是1.6的。将SDK解压到合适的文件夹,通过命令行工具加入环境变量,编辑home目录下的.bashrc文件,修改PATH环境变量:PATH=[PATH_TO_SDK]/tool:$PATH。现在你可以通过命令行连接模拟器了。做一个简单的测试,打开终端输入adb,你可以看到工具的帮助文档。
  • Java JDK 5.0或者更高版本:这是运行Eclipse和Android SDK必须的。

   我们打开安装了以上软件的Ubuntu,然后开始配置。 

 

设置你的机器

  为了设置环境生成Android游戏,你需要在Linux上安装3个软件组件

  • Android源代码:这包含了完整的Android源代码,加上C/C++/JNI头文件来生产自定义共享库
  • Android原生库:包含了类似于C运行时库,数学库,XML,声音等。
  • ARM处理器的GNU C/C++ 工具集: 工具集提供了C/C++编译器和链接器,还有一些其他有用的工具,如调试器等。你也可以写两个自定义的shell脚本来编译混合代码,节省时间。

获取Android源代码

  为了存储源代码,谷歌使用一个版本工具Gittool(可以在http://git-scm.com/) 下载。根据你的Ubuntu版本,你可能需要安装包来使用它。为了确保万事具备,打开终端,输入命令: 

$ 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 

这条命令将安装运行Git所需要的包,执行它需要管理员权限。你需要安装和配置工具repo,这是谷歌提供的方便使用Git的工具。在home目录下创建bin目录,然后下载repo:  

$ cd ~

$ mkdir bin

$ curl http://android.git.kernel.org/repo >~/bin/repo

$ chmod a+x ~/bin/repo  

用以下命令将bin目录加入搜索路径 

 $ export PATH=$HOME/bin:$PATH 

如果想要每次登陆系统都可以使用,就将这条命令加入到$HOME/.bashrc文件中。下一步,在home目录下创建一个mydroid目录来存放源代码,并进入该目录: 

 $ mkdir mydroid

$ cd mydroid 

 最后,下载代码  

$ repo init -u git://android.git.kernel.org/platform/manifest.git

$ repo sync 

 泡上一杯咖啡,耐心等候,根据网速不同,花的时间不同,可能会用一个多小时。当源代码下载完毕后,文件夹应该像图1-1中显示那样。其中最重要的文件夹是bionic。Bionic是支持ARM和x86设备的C库,并且可以在Android设备上运行。该文件夹提供大部分我们用来生产共享库的C头文件。

 

android-insight-pro-android-games-figure-1-1

android-insight-pro-android-games-figure-1-1

提取原生Android库

  上一节提到的头文件库是用来编译代码的,然而,读者还需要用于链接进程的共享库系统映像;也就是需要存储在/system/lib目录下的.so文件。例如,在emulator shell中,你可以查看设备文件系统和部分系统库文件。使用Android Debug Bridge (adb),lianjie shebei ,然后运行df命令来检查设备文件系统,如下所示  

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...]

   

Df命令显示设备文件系统的信息,从列表中可以看存储在device/system/lib目录下的库文件。Ls命令显示最重要的库:C 运行时库 (libc.so),数学库 (libm.so), Gzip (libz.so),XML (libexpat.so),以及其他的库。

  

有一些文件需要提取到本地系统用于链接进程,为了提取,你可以创建一个简单的脚本,通过emulator工具adb pull命令来讲设备中的文件提取到本地文件系统中。

  

首先,在home目录下创建一个目录: 

$ mkdir -p $HOME/tmp/android/system/lib

$ cd $HOME/tmp/android/system/lib   

下一步,创建一个简单的脚本来获取设备上的文件,复制到$HOME/tmp/android/system/lib目录中。Bash脚本在列表1-1中。

 

列表1-1 从设备的/system/lib目录下将库复制到本地文件系统中的脚本

#!/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

安装ARM处理器GNU工具集

  到此为止,一切都进展顺利。你已经配置好了Android源代码和所需的库。最后需要安装的软件就是C 编译器。提供了C库,预处理器,编译器,调试器,分析器,链接器等用于在ARM硬件设备下建造软件的工具。你将使用Sourcery G++ Lite Edition for ARM提供的工具集(http://www.codesourcery.com/sgpp/lite/arm/portal/subscription?@template=lite)

 

你有两种选择

  • 下载简单的安装器;
  • 获取tar格式的工具,并简单地解压到你的系统,(我比较喜欢这种方式,因为它会比较快一些)。

如果你选择使用tar格式,你可以用以下命令将它解压到桌面  

$ cd $HOME/Desktop

$ tar zxvf arm-2008q3-72-arm-none-linux-gnueabi.tar.gz 

使用任意一种方法安装工具集,你都必须将bin文件夹加入到系统路径中,这样工具集才能在终端中被使用在$HOME/.bashrc文件中加入以下文本  

ARM_HOME=$HOME/Desktop/arm-2008q3

export PATH=$PATH:$ARM_HOME/bin  

现在工具集已经可以使用了。通过输入如下文本来进行快速的测试  

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.

   

下面看看工具集提供的最有用的一些工具:

  • arm-none-linux-gnueabi-gcc: 这是C编译器,等价于Linux下的gcc命令。大部分选项都跟Linux下的gcc很相近。
  • arm-none-linux-gnueabi-g++: 这是C++编译器;
  • arm-none-linux-gnueabi-ld: 链接器;
  • arm-none-linux-gnueabi-objdump: 用于显示二进制文件的信息;
  • arm-none-linux-gnueabi-strip: 它能移除字节文件中的符号和合代码分块,减小最后可执行程序的大小。

第一章未完待续…..

下一节将介绍一些编译、链接等脚本的编写。

原创粉丝点击