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

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

2014年8月3日

CPOL

18分钟阅读

viewsIcon

72951

一份分步指南,为初学者介绍如何在 PC 上设置开发环境,使用 Cocos2d-X 3.2 编写游戏

引言

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

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

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

在 PC 上为 Android 设置开发环境并不难——只需按照这些步骤操作,你就能很快编写出适用于 Android 和 Windows 的 C++ 程序!(你仍然需要一台 Mac 来编译 Mac 或 iOS——但源代码是相同的)

背景

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

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

虽然我在家使用 Mac,但我的职业是 Windows 开发者——我希望我的游戏能在尽可能多的平台上运行——所以我想我也要在 Windows 上设置开发环境!

(对于 Mac 用户,请参阅我的文章 https://codeproject.org.cn/Articles/801093/Writing-Games-with-Cplusplus-for-Android-on-a-Mac,了解在 Mac 上设置的详细信息)

如何使用本文

我将本文写成了一份分步指南,面向像我一样不熟悉 Android 开发的人。对于新手来说,有一些技巧和陷阱需要避免,我已尽力指出。

在跟随操作时,您需要输入的一些信息将涉及 PC 上的路径名。我建议不要直接输入或从文章中复制(如果你的路径名不同,这可能会很困难),而是使用 Cmd 的一个很棒的功能:你可以将文件或文件夹从 Finder 窗口拖放到 Cmd 窗口,它会自动为你插入路径。

关注点

我几乎是第一次做这件事就写下了这篇文章——所以,这可能不是一份自信的专家教程,我们可能会遇到一些曲折——请抓紧扶好!

历史

版本 1.

下载次数

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

最简单的方法是将所有内容下载到一个您将用于 Android 开发的文件夹中。我使用的是一个名为 AndroidDevelopment 的文件夹。

不包括 Visual Studio,这里大约有 1GB 的下载量,所以你可能想先开始下载,然后去泡杯茶(伯爵红茶。不加糖,如果你问的话),然后再继续。 

** 您使用的任何路径名中都绝对不能包含空格 **

Cocos2d-X 3.2

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

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

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

适用于 Windows 的带 Android SDK 的 Eclipse ADT

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

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

有些人不喜欢 Eclipse。我没法说我足够了解它来评论,但在我的情况下,Cocos2dx 开发的主要环境是 Mac/iOS——所以我只需要使用 Eclipse 进行平台特定的调整。

在您的例子中,您可能使用 Visual Studio 作为您的主要 IDE,而仅将 Eclipse 用于调整。

Android NDK

https://dl.google.com/android/ndk/android-ndk-r9d-windows-x86_64.zip

NDK 代表 Native Development Kit——也就是说,是原生代码而不是 Java。 

这里的链接直接指向 zip 文件而不是页面,因为您需要下载 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,这是最新版本。页面上有关于如何验证下载的说明——如果你愿意,可以按照它们操作,或者像我一样听天由命 :)

Python

https://pythonlang.cn/download/releases/2.7.8/

我下载了 2.7.8 msi

Visual Studio

http://www.microsoft.com/en-au/download/details.aspx?id=40787

您可以免费下载 VS2013 Express。我实际上使用的是商业版本,但应该差别不大。对于纯粹的 Android 开发,您完全不需要 Visual Studio——但如果您有它,它将有助于展示您可以为 Windows 构建与 Android 相同的代码库的项目。

Java

https://www.java.com/en/download/faq/java_win64bit.xml

您需要安装 Java 才能运行 Eclipse。它是免费的。请确保下载适用于您的 Windows 版本的正确版本(32 位或 64 位)。

安装

下载并安装 VS2013(如前所述,这是可选的,我不会在此详细介绍)。

运行 Python MSI 安装 Python。我建议选择“Add python.exe to Path”选项,这样我们在稍后运行 Python 时会更方便。

创建一个文件夹,您将用它来存储解压后的文件。我创建了一个名为 C:\Androidl 的文件夹。确保您选择的文件夹路径名中没有任何空格——并且保持路径简短——我遇到了路径名过长的问题,因此使用了 C:\Android!

我还将长 zip 文件名提取到了较短的文件夹名称——例如,apache-and-1.9.4-bin.zip 被提取到了一个名为 apache-ant 的文件夹中。

确保它们位于您想要使用的位置,因为我们将设置环境变量指向这些位置,所以将来移动它们会有点麻烦。

** 请记住,包含这些解压文件夹的文件夹在其路径名中绝对不能有空格 **

** 如果在提取时出现错误,可能是因为我们的路径名太长 **

设置 cocos2d-x

打开一个 Cmd 窗口(按 Windows 键,键入“cmd”并按 Enter),然后切换到 cocos2d-x-3.2 目录。(请记住,如果已经打开了 Cmd 窗口,只需键入 'CD ' 然后将 cocos2d-x-3.2 文件夹拖到终端窗口)

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

键入 .\setup.py

(如果您收到“未知命令”错误,是因为 Python 要么未安装,要么未将其路径添加到 Path 环境变量——或者是因为您在安装 Python 后未打开新的 Cmd 窗口)

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

这是您从 Zip 文件(android-ndk-r9d)中解压出的文件夹的路径名——为了确保我正确输入路径,我*总是*将文件夹从打开的 Explorer 窗口拖到 Cmd 窗口。

如果您出错了,可以安全地终止进程(Ctrl+C),然后重新运行 setup.py。

接下来它会问您“Please enter the path of ANDROID_SDK_ROOT”(请输入 ANDROID_SDK_ROOT 的路径)。您提取的 ADT Bundle 文件夹中包含此 SDK 文件夹。

因此,您可以将该文件夹拖到您的 cmd 窗口。

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

这是 Apache Ant 的“**bin**”文件夹。

所以,再次将 bin 文件夹拖到 cmd 窗口并按 Enter 键。

设置最后告诉您重新启动终端(它指的是 CMD 窗口)以使添加的系统变量生效。所以关闭 cmd 窗口,打开另一个,然后再次 CD 到 cocos2d-x 文件夹。

如果您在设置运行时阅读了屏幕内容,您会看到它只是在设置一些环境变量,以便它知道如何找到文件。 

检查设置

setup.py 会检查环境变量,只有在找不到时才会要求输入。所以,在重新启动 cmd 会话后重新运行设置,不应该会提示您再次输入路径。如果提示,只需再次输入!

创建新的 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 C:/Android

如果还不清楚,-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 库!)。

第一次编译会花费相当长的时间——但还不足以泡一杯茶。

您可能会看到一些编译警告滚动过去——只要您没看到错误,就不用担心!

(如果您确实看到了错误,很可能是因为您使用了错误版本的 NDK——请记住您需要 r9d——r10 会导致编译错误)

在 Eclipse 中打开项目

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

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

您需要将项目导入 Eclipse。

从菜单中选择 `File..Import`。

展开树中的 Android 项,然后选择 `Existing Android Code into Workspace`。

Importing the project into Eclipse

浏览到您创建项目的文件夹(在我的情况下是“Bounce”文件夹)。选择此文件夹,然后点击“Open”。

Importing the project 2.

“Import Projects”窗口将显示一个要导入的项目列表。目前,您只想导入 libcocos2dx 和 Bounce 项目,因此取消选择所有其他项目,然后点击“Finish”。

Selecting the libcocos2dx and Bounce projects

现在它已在 Eclipse 中打开,您可以查看源代码——打开 Classes 文件夹中的 HelloWorldScene.cpp。这就是您在开发游戏时进行更改的地方。

收尾工作

您快完成了!

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

在 cmd 窗口中键入 Echo %NDK_ROOT% 来查找 NDK_ROOT 的路径。

我得到

C:\Android\android-ndk\android-ndk-r9d

将此复制到剪贴板以节省输入时间。(右键单击,选择 Mark,突出显示文本并按 Enter——直观吧?)

在 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

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

The new Developer Options option

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

select the developer options you need

Android < 4.2

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

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

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

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

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

USB 驱动程序

根据您的设备,您需要安装一个 USB 驱动程序。坦率地说,它的文档记录很差,而且是一个悲惨、容易出错的过程(看看关于它的帖子数量,就能了解它有多么不直观!)。

我的建议是搜索您硬件的驱动程序,下载它,然后在计算机管理中,在“Other”(其他)下找到该设备(在“Other”下,因为它还没有驱动程序)。右键单击并选择 **Update Driver Software**(更新驱动程序软件)——然后浏览到下载的文件夹。

它的文档记录非常差(例如,Windows 8 在文档中根本没有提到,而 Nexus 7 和其他较新设备在相关 Google 页面上根本不存在。请坚持下去,您会成功的!

检查您的设备

确保您的设备已插入 Mac 的 USB 接口。

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

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

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

在上方的屏幕截图中,您可以看到我连接了一个 Nexus 7。

2. 打开一个 cmd 窗口
键入 adb devices

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

您应该可以直接运行该命令(而无需指定其路径),因为 cocos2d 的设置已添加到您的环境变量路径中。如果您收到“command not found”(命令未找到)错误,您可能需要输入整个命令文件的路径——只需将其从 Explorer 拖到 cmd 窗口。(当我为 Mac 执行此操作时,它将其添加到了我的可执行搜索路径中,当我为 Windows 执行此操作时,它没有)

它不像 Chrome 版本那么友好,但足以快速检查。

设置虚拟设备进行测试

无论您是否有物理 Android 设备,总有一天您会想创建一个虚拟设备来测试您的程序。(事实上,有一次,在创建虚拟设备之前,我的 Eclipse 拒绝检测我的真实设备!)

以下是如何创建虚拟设备。

在 Eclipse 中,选择 **Window**...**Android SDK Manager**。

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

选择您要测试的版本,然后根据需要选择 SDK Platform 和 System Image。

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

Selecting the Virtual Machines

选择完您想要的之后,点击 **Install x packages**(安装 x 个包)按钮。

Accepting the licenses

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

这些镜像可能体积相当大——所以足够泡一杯茶了。

下载完成后,返回 Eclipse,然后 **Close Eclipse and re-start it**(关闭 Eclipse 并重新启动它),然后选择 **Window** ... **Android Virtual Device Manager**。

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

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

这将在“Create new Android Virtual Device”(创建新 Android 虚拟设备)表单中预填一些字段。填写其余值(特别是,选择您已下载的目标和 CPU,并** **勾选 Use Host GPU** 复选框**),然后点击 **OK**。

完成后,点击 **OK**,然后,返回 AVD Manager,选择您新创建的虚拟设备,然后点击 **Start**(启动)。

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

运行您的程序

这需要大量设置,但您已准备就绪!

在 Eclipse 中,右键单击项目,然后选择 **Run As** ... **Android Application**。

假设您的项目编译正常(应该如此),您可能会看到 Android Device Chooser(Android 设备选择器)。

The Android Device Chooser

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

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

如果您看到了,请选择您喜欢的任何一个,点击 OK,然后等待奇迹发生!

Running the Bounce program in the emulator

然后就来了!算不上什么大游戏,但这才是真正的 C++ 跨平台游戏。

跨平台

我在文章开头谈到了跨平台开发——所以让我们以展示如何让同一个应用程序在 Windows 上运行来结束。

转到您创建项目的文件夹(在我的情况下是 AndroidDevelopment/Bounce),然后浏览到 `proj.win32`。

在那里您会找到 Bounce.sln。双击在 Visual Studio 中打开。

Opening the project in Visual Studio

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

在您的 Windows 机器上构建并运行项目 在 Windows 中运行

 

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

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

所以现在,即使您讨厌 Eclipse,您也可以使用 Visual Studio 编写 cpp 代码,然后仅使用 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.