65.9K
CodeProject 正在变化。 阅读更多。
Home

在 Mac 上使用 C++ 为 Android 编写游戏 - 设置

2014 年 7 月 29 日

CPOL

17分钟阅读

viewsIcon

34042

一份循序渐进的初学者指南,介绍如何在 Mac 上使用 Cocos2d-X 3.2 为 Android 设置开发环境来编写游戏。

引言

如果您能编写一个程序,然后让它在 Android、Windows Phone、Windows 桌面、Mac 和 iOS 上运行,那不是很棒吗?

借助 Cocos2d-x(撰写本文时为 V3.2),现在可以开发真正的原生跨平台 C++ 游戏。

虽然代码库可以跨平台使用,但开发环境必然不同——通常 Windows 上的 Visual Studio 用于 Windows Phone,Mac 上的 XCode 用于 i-Devices,以及几乎所有平台上的 Eclipse 用于 Android。

在 Mac 上设置用于开发 iOS 的开发环境非常简单。

在 Mac 上设置用于开发 Android 的开发环境并不那么简单,而且文档也不完善。因此,本文应运而生!

背景

移动应用开发中一个常见的问题是跨平台开发。您是用 Objective-C、C++(或 C#)和 Java 编写相同的内容吗?您坚持使用 HTML 和 Javascript 吗?

我选择专门研究 Cocos2d-X,因为它允许我编写一个单一的代码库,使用 C++,可以在几乎所有平台上运行。

由于我平时使用 Mac,我首先在 Xcode 中使用了 Cocos2d-X,为 iOS 编译——整个过程很简单(创建项目,在 XCode 中打开,构建项目,部署项目)。

然而,设置用于构建 Android 的开发环境比预期的要困难得多。我的意思是,困难到我一度放弃了。

因此,当我最终弄好时,我认为有义务为其他开发者记录下这个过程。

如何使用本文

我写这篇文章是为了给像我一样不熟悉 Android 开发的人提供一个循序渐进的指南。有一些窍门对新手玩家来说很有用,也有一些陷阱需要避免,我已尽力指出。

在跟随本文进行操作时,您需要输入的一些信息将涉及 Mac 上的路径名。因为您的用户名几乎肯定不是 Maxxx,所以您无法直接复制文章中的文本。相反,我建议使用 Terminal 的一个很棒的功能:您可以将文件或文件夹从 Finder 窗口拖放到 Terminal 窗口,它会自动插入路径。

关注点

在我设置好开发环境的过程中,我经常咒骂——主要是因为可用的帮助和建议往往来自经验丰富的 Android 开发者,他们会用“只需安装驱动程序即可”来回答千言万语的问题,而不解释是哪个驱动程序,或者应该将它们安装在我的 Android 设备上还是我的 Mac 上!

事实上,您不需要在任何地方安装任何驱动程序!

希望您不会如此困惑——但如果您确实感到困惑,请随时给我发送消息,我会*尽力*克制住直接告诉您“安装驱动程序”的诱惑:)

历史

发布 1.

下载次数

要设置您的 Mac 以便为 Android 进行开发,您需要下载一些东西。

最简单的方法是将它们全部下载到一个您将为 Android 进行开发的文件夹中。我正在使用一个名为 AndroidDevelopment 的文件夹。

不包括 XCode,这里有近 1GB 的下载内容,所以您可能想先开始下载,然后去喝杯茶(伯爵红茶。不加糖,如果您问的话),然后再继续。 

** 在使用的任何路径名中都不能有空格 **

Cocos2d-X 3.2

http://www.cocos2d-x.org/download

我建议下载最新的稳定版 3.x 版本(目前是 3.2)

** 确保您下载的是 cocos2d-x 而不是 cocos2d-JS **

Eclipse ADT 和 Mac 版 Android SDK

https://developer.android.com.cn/sdk/index.html

ADT 是 Android Development Tools 的缩写——所以我们这里得到的是一个配置用于 Android 开发的 Eclipse 版本(一个开源的通用 IDE)。

有些人不喜欢 Eclipse。我不敢说我了解得足够多以至于可以评论,但在我的例子中,我主要的 Cocos2dx 开发环境是 Max/iOS——所以我只需要使用 Eclipse 进行特定平台的调整。

Android NDK

https://dl.google.com/android/ndk/android-ndk-r9d-darwin-x86_64.tar.bz2

NDK 是 Native Development Kit 的缩写——即原生代码而不是 Java。 

这里的链接直接指向压缩文件(更准确地说,是 tar-bz2 压缩文件),而不是页面,因为您需要下载 r9d 版本。

** 不要尝试下载最新版本(10.x),因为它无法与 cocos2d-x 一起使用 **

如果您对问题感兴趣,它们记录在 http://cocos2d-x.org/news/307,所以您在阅读本文时可能已经修复了……

Apache ANT

https://ant.apache.ac.cn/bindownload.cgi

Apache Ant 是“一个 Java 库和命令行工具,用于构建软件”,所以您现在知道了。

我使用的是 1.9.4,这是最新版本。页面上有如何验证您下载的内容的说明——如果您愿意,请遵循它们,或者就像我一样,碰碰运气:)

XCode

http://itunes.apple.com/us/app/xcode/id497799835?ls=1&mt=12

XCode 是从 Apple App Store 免费下载的,如果您是 Mac 开发者,您肯定有一份副本。如果没有,您将需要它。我目前正在运行 XCode 5.1.1。

Java

http://www.java.com/en/download/index.jsp

您需要安装 Java。我几乎忘了这个,因为我的 Mac 上一直安装着它——但如果您没有,只需获取最新版本并按照提示操作……

安装

XCode 将从 App Store 安装。

对于其他软件,只需在 Finder 中打开它们所在的文件夹,然后逐个双击。您将获得四个文件夹(每个 zip 文件一个)。现在可以安全地移动或删除 zip 文件以腾出一些磁盘空间。

The folder containing the four downloaded folders after extraction.

现在是时候移动它们了,如果您认为可能需要——因为稍后我们将设置环境变量来指向这些路径,并且更改它们的位置将更加复杂。

** 请记住,您解压这些文件夹的文件夹的路径名中不能有任何空格 **

设置 cocos2d-x

打开一个 Terminal 窗口,然后切换到 cocos2d-x-3.2 目录。(请记住,如果您打开了 Finder 窗口,您可以输入 'CD ',然后将 cocos2d-x-3.2 文件夹拖到 Terminal 窗口)

cocos2d-x 的设置程序顾名思义就是 setup!它是一个 Python 脚本,但我们不会因此而排斥它。

输入 ./setup.py

脚本将运行并要求您“Please enter the path of NDK_ROOT”(请输入 NDK_ROOT 的路径)

这是您从 Zip 文件(android-ndk-r9d)中提取的文件夹的路径名——为了确保我获得正确的路径,我*总是*将文件夹从打开的 Finder 窗口拖到 Terminal 窗口。当您将文件名拖到 Terminal 窗口时,它会在后面添加一个空格。如果您执行此操作,**请务必删除路径末尾的任何空格**,否则将导致错误。

如果您出错了,您可以安全地终止进程(ctrl-d)并使用 setup.py 重新开始。

接下来它会问您“Please enter the path of ANDROID_SDK_ROOT”(请输入 ANDROID_SDK_ROOT 的路径)。这个 SDK 文件夹位于您解压的 ADT Bundle 文件夹内。

The location of the adt_bundle folder

所以您可以将该文件夹拖到您的 Terminal 窗口。

** 请务必删除路径末尾的任何空格 **

现在将要求您“Please enter the path of ANT_ROOT”(请输入 ANT_ROOT 的路径)。

这是 apache-ant 的 'bin' 文件夹。

The location of the apache_ant bin folder

因此,再次将 bin 文件夹拖到终端窗口,删除任何尾随空格,然后按 Enter。

** 请务必删除路径末尾的任何空格 **

设置告诉您做的最后一件事是“执行命令:‘source /Users/maxxx/.bash_profile’ 使添加的系统变量生效。”

如果您在设置运行时阅读了屏幕,您会看到它只是设置了一些环境变量,以便知道如何查找文件。它更新了 bash_profile,它在您登录时运行——所以现在运行它就省去了注销和重新登录的麻烦!

输入(或复制/粘贴)终端中显示的命令(例如,source /Users/maxxx/.bash_profile)。除非您的用户名是 maxxx,否则它将与我的不同。

这是我的整个会话,我输入的那些部分用粗体显示。

Maxxxs-iMac:~ maxxx$ cd /Users/maxxx/Documents/AndroidDevelopment/cocos2d-x-3.2

Maxxxs-iMac:cocos2d-x-3.2 maxxx$ ./setup.py


Setting up cocos2d-x...

->Check environment variable COCOS_CONSOLE_ROOT

  ->Search for environment variable COCOS_CONSOLE_ROOT...

    ->COCOS_CONSOLE_ROOT is found : /Users/maxxx/Desktop/Android


  ->Update variable COCOS_CONSOLE_ROOT in files ['.bash_profile', '.bash_login', '.profile']

    ->File /Users/maxxx/.bash_profile updated!

->Configuration for Android platform only, you can also skip and manually edit "/Users/maxxx/.bash_profile"


->Check environment variable NDK_ROOT

  ->Search for environment variable NDK_ROOT...

    ->NDK_ROOT not found


  ->Search for command ndk-build in system...

    ->Command ndk-build not found


  ->Please enter the path of NDK_ROOT (or press Enter to skip):/Users/maxxx/Documents/AndroidDevelopment/android-ndk-r9d

  -> Add NDK_ROOT environment variable...

    ->Added NDK_ROOT=/Users/maxxx/Documents/AndroidDevelopment/android-ndk-r9d


->Check environment variable ANDROID_SDK_ROOT

  ->Search for environment variable ANDROID_SDK_ROOT...

    ->ANDROID_SDK_ROOT not found


  ->Search for command android in system...

    ->Command android not found


  ->Please enter the path of ANDROID_SDK_ROOT (or press Enter to skip):/Users/maxxx/Documents/AndroidDevelopment/adt-bundle-mac-x86_64-20140702/sdk

  -> Add ANDROID_SDK_ROOT environment variable...

    ->Added ANDROID_SDK_ROOT=/Users/maxxx/Documents/AndroidDevelopment/adt-bundle-mac-x86_64-20140702/sdk


->Check environment variable ANT_ROOT

  ->Search for environment variable ANT_ROOT...

    ->ANT_ROOT not found


  ->Search for command ant in system...

    ->Command ant not found


  ->Please enter the path of ANT_ROOT (or press Enter to skip):/Users/maxxx/Documents/AndroidDevelopment/apache-ant-1.9.4/bin

  -> Add ANT_ROOT environment variable...

    ->Added ANT_ROOT=/Users/maxxx/Documents/AndroidDevelopment/apache-ant-1.9.4/bin



A backup file "/Users/maxxx/.bash_profile.backup" is created for "/Users/maxxx/.bash_profile".


Please execute command: "source /Users/maxxx/.bash_profile" to make added system variables take effect


Maxxxs-iMac:cocos2d-x-3.2 maxxx$ source /Users/maxxx/.bash_profile

Maxxxs-iMac:cocos2d-x-3.2 maxxx$ 

检查设置

setup.py 检查环境变量,如果找不到它们才会要求输入。所以重新运行设置不应该会提示您再次输入路径。如果提示,只需再次输入即可!

创建新的 Cocos2d-x 项目

Cocos2d-x 有一个用于创建新项目的命令行选项。所有项目在创建时都是跨平台的(也就是说,它为 Windows、iOS、Mac、Android 创建了一个空项目,然后共享文件位于自己的文件夹中,供您随意使用。)

我们将游戏命名为 'Bounce',我们将创建的包命名为 'com.codeproject.bounce'。语言将是 'cpp'(cocos2d-x 也支持 JavaScript 和 Lua),我们将把源代码放在 AndroidDevelopment 文件夹内的某个文件夹中。

所以您的命令行是

cocos new Bounce -p com.codeproject.bounce -l cpp -d /Users/maxxx/Documents/AndroidDevelopment

如果不够明显,-p 参数定义了包名,-l 参数(注意是小写 L)定义了语言,-d 定义了存放项目的目录。

复制需要几秒钟,然后显示一堆关于更改项目名称的内容——暂时不用担心。

Cocos2d-x 项目结构

为了本文的目的,了解这个不是必须的,但我认为这是一个讨论 Cocos2d-x 项目如何构建的好时机。

在 Bounce 文件夹中有以下文件夹:

此文件夹是您为该项目开发的所有跨平台代码将驻留的地方。

cocos2d

此文件夹包含 cocos2d-x 库的源文件。

proj.android

此文件夹包含您的 Android 项目的项目文件。

proj.ios_mac

此文件夹包含 iOS 和 Mac 项目的项目文件。

proj.linux

目前这个文件夹会大致为空,因为 cocos2d-x 4.x 目前不支持 Linux 作为目标。

proj.win32

此文件夹包含 Windows 项目的项目文件。

proj.wp8-xaml

此文件夹包含 Windows Phone 8 项目的项目文件。

Resources

此文件夹包含所有项目的通用资源。

所以,想法是您在开发环境中打开项目,只更改 Classes 文件夹中的代码,并将资源添加到 Resources 文件夹。

然后,您在合适的开发环境中打开特定项目(可能是 Android 的 Eclipse、Windows 的 Visual Studio,以及 Mac 或 iOS 的 XCode),然后构建项目。

对 Classes 中的代码进行更改,然后重新构建每个项目——并部署到每个设备!

对我来说,最棒的是我可以使用我最喜欢的 IDE 进行大部分开发,然后只需切换到特定平台的 IDE 来构建该平台。

构建项目

在创建了 Bounce 项目并设置了各种环境变量之后,您现在需要首次构建它。

在终端中,`cd` 到 `Bounce` 目录中的 `proj.android` 目录。

** 请务必删除路径末尾的任何空格 ** 

这是为 Android 构建项目的命令。

输入 ./build_native.py

这会编译我们刚刚创建的项目(实际上是整个 cocos2d 库!)。

第一次运行时会花费相当长的时间——但不足以喝一杯茶。

在 Eclipse 中打开项目

要找到 Eclipse 可执行文件,请查看您解压的 adt-bundle 文件夹内的 eclipse 文件夹。

运行 Eclipse 并选择默认工作区选项。

您需要将项目导入 Eclipse。

从菜单中选择 File..Import

展开树中的 Android 项,然后选择 Existing Android Code into Workspace(现有 Android 代码导入工作区)。

Selecting the import source 1.

浏览到您创建项目的文件夹(在我的例子中是 'Bounce' 文件夹)。选择该文件夹,然后单击 'Open'(打开)。

Importing the project 2.

“导入项目”窗口将显示要导入的项目列表。目前,您只想导入 libcocos2dx 和 Bounce 项目,所以取消选择所有其他项目,然后单击 'Finish'(完成)。

Selecting the libcocos2dx and Bounce projects

收尾工作

您快完成了!

我们需要告诉 Eclipse NDK 的位置。请记住,cocos 已经为它设置了一个环境变量,但 Eclipse 并不知道这一点,所以您需要亲自告诉它。

在 Terminal 中输入 Echo $NDK_ROOT 来查找 NDK_ROOT 的路径。

我得到

/Users/maxxx/Documents/AndroidDevelopment/android-ndk-r9d

将其复制到剪贴板以节省输入时间。

在 Eclipse 中,右键单击 Package Explorer 中的 Bounce 项目,然后选择 **properties**(属性)。

展开 C/C++ Build 并选择 **Environment**(环境)。

单击 **Add**(添加)按钮添加一个新的环境变量。

将变量命名为 **NDK_ROOT**,并将上面的路径粘贴到 **Value**(值)中。

Telling Eclipse about NDK_ROOT

单击 OK 关闭对话框,然后单击 OK 关闭属性。

设备

我们需要一个设备来运行。虽然有模拟器,但在真实设备上开发和测试以获得对性能的现实认识要好得多;虚拟设备非常适合尝试不同的屏幕尺寸和不同的操作系统版本,因此我将指导您设置真实设备和虚拟设备。

设置设备进行测试

此过程在 4.2 版本左右发生了变化,因此我在下面记录了不同的过程。

请注意,您可能需要重新启动设备才能使此设置生效(我需要,其他人报告说不需要),所以如果是我,我会谨慎起见并重新启动。

Android 4.2+

在您的设备上转到 Settings(设置)。

滚动到底部,然后选择 **About tablet**(关于平板电脑)(或 **About phone**(关于手机))

滚动到底部,然后点击 **Build number**(版本号)七次。是的,没错,7 次(它会在您到达时显示一条消息!)如果您已经有开发者选项,您会看到一条不同的消息,如图所示。

Setting up the device - step 1

点击“返回”,您将在 Settings(设置)中看到一个新选项—— **{} Developer Options**(开发者选项)。

The new Developer Options option

选择此选项,然后选择 **USB Debugging**(USB 调试)以及您可能喜欢的任何其他设置。

select the developer options you need

Android < 4.2

我没有合适的设备来尝试这个,但据可靠消息,以下步骤将打开 USB 调试。

在您的设备上转到 Settings(设置)。

选择 **Applications**(应用程序)。

选择 **Development**(开发)。

选择 **USB Debugging**(USB 调试)。

检查您的设备

在设备上设置 USB 调试的原因是让您的 Mac 可以看到它。确保您的设备已插入连接到 Mac 的 USB。

有两种方法可以快速检查它是否正常工作……

1. 如果您在 Mac 上安装了 Google Chrome
    转到 chrome://inspect/#devices

Results of browsing to Chrome:\\inspect/#devices

在上图截图中,您将看到我连接了一台 Nexus 7,并且正在运行一个模拟器。

2. 转到 Terminal
  输入 adb devices

  这将运行 sdk\platform-tools 文件夹中 adb 可执行文件,该文件夹位于您之前解压的 ADT 文件夹内。

  您应该能够直接运行该命令(而无需指定其路径),因为 cocos2d 设置已添加到您的环境变量中。如果您收到“command not found”(命令未找到)错误,您可能需要输入完整命令文件的路径——只需从 Finder 将其拖到 Terminal 窗口。

Maxxxs-iMac:~ maxxx$ adb devices

List of devices attached 

emulator-5554    device

0a1c2fba    device

也许不如 Chrome 友好,但这只是一个快速检查,以确保一切正常——希望您知道哪些设备已连接到您的 Mac!

设置虚拟设备进行测试

无论您是否拥有物理 Android 设备,在某个时候您都会想创建一个虚拟设备来测试您的程序。(事实上,曾经有一次,在我创建了虚拟设备之前,我的 Eclipse 拒绝检测到我的真实设备!)

以下是创建虚拟设备的方法。

在 Eclipse 中,选择 **Window**...**Android SDK Manager**(窗口...Android SDK管理器)。

在 SDK 管理器中,您将看到所有工具的所有修订版本的列表——以及显示它们是否已安装的状态列。

选择您想测试的版本,然后相应地选择 SDK Platform 和 System Image(系统映像)。

除非您的互联网连接速度非常快且带宽无限,否则我建议只选择一两个——因为它们需要下载,而且它们并不小!

Selecting the Virtual Machines

选择好您想要的之后,单击 **Install x packages**(安装 x 个软件包)按钮。

Accepting the licenses

勾选所有 Accept(接受)和 Accept License(接受许可)单选按钮(IMHO 表单定义得很糟糕,所以只需点击周围直到您看到一堆绿色的勾),然后单击 **Install**(安装)。

这些映像可能相当大——所以有足够的时间喝杯茶。

下载完成后,回到 Eclipse,然后选择 **Window**...**Android Virtual Device Manager**(窗口...Android 虚拟设备管理器)。

单击 **Device Definitions**(设备定义)选项卡。

从列表中选择一个预定义的设备,然后单击 **Create AVD...**(创建 AVD...)。

这将预先填写“Create new Android Virtual Device”(创建新的 Android 虚拟设备)表单中的一些字段。填写剩余的值(特别是,从您下载的选项中选择一个 target(目标)和 CPU,并**勾选 Use Host GPU(使用主机 GPU)复选框**),然后单击 **OK**(确定)。

完成后,单击 **OK**(确定),然后,回到 AVF 管理器,选择您新创建的虚拟设备,然后单击 **Start**(启动)。

启动虚拟设备可能需要很长时间。请耐心等待!

运行您的程序

这需要大量的设置,但您已经准备好开始工作了!

在 Eclipse 中,右键单击项目,然后选择 **Run As**...**Android Application**(运行为...Android 应用程序)。

假设您的项目构建成功(应该如此),您可能会看到 Android Device Chooser(Android 设备选择器)。

The Android Device Chooser

这将列出 Eclipse 可以看到的所有设备,无论是真实的还是虚拟的。上面的网格显示当前正在运行的设备,下面的网格显示当前未运行的虚拟设备。

如果您没有看到它,这意味着只有一个设备可用,所以 Eclipse 将使用它。如果您想在物理设备连接时使用虚拟设备,最简单的方法是启动您的虚拟设备(从 Eclipse 通过 **Windows**...**Android Virtual Device Manager**(窗口...Android 虚拟设备管理器)访问)。

如果您确实看到了它,请选择您喜欢的设备,单击 OK,然后等待奇迹发生!

Running the Bounce program in the emulator

这就是它!算不上什么大游戏,但这才是真正的、用 C++ 编写的、跨平台的游戏开发。

跨平台

我在本文开头谈到了跨平台开发——那么让我们在最后展示一下如何将同一个应用程序运行到您的 iPhone 上。

在您的 Mac 上,转到您创建项目的文件夹(在我的例子中是 AndroidDevelopment/Bounce),然后浏览到 proj.ios_mac

在那里您会找到 Bounce.xcodeproj。双击以在 XCode 中打开。

Opening the project in XCode

您会发现,在 Classes 文件夹中,就是我们在 Eclipse 中看到的相同源代码。

在您的 iOS 设备上构建并运行项目 在 iPhone 上运行

甚至可以作为 Mac 应用……

Running as a Mac app

……您将看到与在 Android 设备上看到相同的应用程序。

(您看到的 cocos2d-x 图像没有根据各个设备尺寸缩放——这本身就是一项技能——因此,不同的应用程序看起来确实有些不同。)

所以现在,即使您讨厌 Eclipse,您也可以使用 XCode 编写 C++ 代码,然后只使用 Eclipse 来构建和运行 Android 项目。

 

注意事项、说明和其他事宜。

虽然拥有运行模拟器的能力很棒,但默认模拟器速度很慢。当我说“慢”时,我不是说只是有点慢,甚至慢到不够喝一杯茶,我是说非常、非常慢。老实说,在某些情况下启动时间可能需要几分钟。

有办法可以改善这一点——但最好的方法(使用快照)无法使用,因为我们需要使用主机 GPU——这两种选项是互斥的。

如果您对速度感到绝望,请尝试搜索一下。但不要抱太大希望!

如果您想更进一步,开始使用 Cocos2d-x 开发游戏,那么有很多资源可以帮助您,但我警告您,在从 cocos2d-iPhone(仍然活跃)切换到 cocos2d-x 2.x(仍然活跃)再到 cocos2d-x 3.x(相当新)的过程中,可能很难弄清楚如何最好地做事。

如果您有关于 cocos2d-x 的问题,我建议查看 cocos2d-x.org 网站上的论坛。

要尝试一下,只需打开应用程序 Classes 文件夹中的 HelloWorldScene.cpp,然后进行一些更改。

 

© . All rights reserved.