关于为 Android 应用实现 x86 支持的快速“操作指南”教程






4.33/5 (2投票s)
在参加了 Intel Android CodeFest 后,我决定制作一个关于如何准备《Planet Conqueror》在基于 Intel 的 Android 设备上运行的教程。该游戏使用了 libGDX 开发框架。我认为写这篇文章是个好主意,这样其他使用相同框架的开发者
引言
在参加了 Intel Android CodeFest 后,我决定制作一个关于如何准备 Planet Conqueror 在基于 Intel 的 Android 设备上运行的教程。该游戏使用了 libGDX 开发框架。我认为写这篇文章是个好主意,这样其他使用相同框架的开发者就可以成功地为他们的应用提供 x86 架构支持,并希望在过程中避免任何陷阱。
我叫 Antonio De Falco,是游戏《Planet Conqueror》的创作者。大学毕业于游戏设计专业,我发现自己倾向于开发易于上手但同时又能提供持久乐趣的游戏。我最初打算将其作为一个消遣项目。我将其视为一项实验,旨在看看像 RTS 这样相对复杂的游戏类型如何才能让休闲玩家更容易接受,同时又能与战略游戏的吸引力保持平衡。然而,《Planet Conqueror》逐渐发展成了一个值得向更广泛受众介绍的应用。参加 CodeFest 竞赛是一个实现这一目标的绝佳机会。我非常满意地进入了前五名,并赢得了一个广告合同,这真正带来了改变。
前一段时间,我了解到 CodeFest 竞赛。在阅读有关该竞赛的信息时,我发现参赛需要一个支持 x86 的应用。我立刻开始研究让应用原生支持 Intel 驱动的 Android 设备所带来的好处。很快就清楚了,通过避免 ARM 和 x86 之间的桥梁,应用在设备上运行的速度可以大大提高。这个解释层在运行时会将原生的 ARM 构建转换为在 x86 架构上运行。这意味着大量的处理能力被浪费了。另一个好处是,在带有 x86 系统镜像的模拟器上运行应用而不是 ARM,也能加快速度。因此,这确保了测试时间表的遵守,并提供了更流畅的体验,避免了失误或用户错误。在决策过程中,了解有多少 x86 设备也很重要。当然,设备数量相对较少,但增长迅速(https://software.intel.com/en-us/android/get-device)。下一步是找出将 x86 原生集成到使用 libGDX 开发框架的游戏中有多难。结果发现,这很容易。所以,我将解释如何将您的游戏移植到 x86 原生游戏。
Planet Conqueror 是使用 libGDX 版本 0.9.8(稳定版)构建的,该版本当时还没有对基于 Intel 的设备所需的内置支持。幸运的是,新版本的框架提供了支持。所以,首先,我们需要下载新版本的 libGDX(0.9.9 或更高版本)。LibGDX 提供经过测试且很少或没有 bug 的稳定版本。另一个选择是下载具有更多功能但可能更多 bug 的 nightly builds。如果您愿意冒险,可以下载 nightly build,否则请选择稳定版。您可以在此处找到这两个下载链接:http://libgdx.badlogicgames.com/download.html
下载完成后,将 zip 文件解压到您选择的位置。我们将覆盖一些文件并删除一些文件。
-
首先,将解压文件夹中的 "gdx.jar" 复制到核心项目的 "libs" 文件夹中。
-
然后,我们需要替换 Android 项目文件夹中的 "libgdx.so" 文件和 Android 后端。将解压文件夹中的 "armeabi"、"armeabi-v7a" 和 "x86" 文件夹以及 "gdx-backend-android.jar" 复制到 "...\YourApp-android\libs\" 文件夹中。
-
当您在 Android 项目的 libs 文件夹中时,进入 "armeabi" 和 "armeabi-v7a" 并删除 "libandroidgl20.so" 文件。
-
最后,将 "gdx-backend-lwjgl.jar"、"gdx-backend-lwjgl-natives.jar" 和 "gdx-natives.jar" 从您的解压文件夹复制并粘贴到 "...\YourApp-desktop\libs\" 文件夹中。
将 x86、ARM 和 ARMv7 的支持集成到一个“fat build”(胖构建)中后,Android OS 会自行处理使用哪些文件。如果您为应用使用了 libGDX 扩展,您还需要将更新的扩展文件复制到您的项目中。以 Planet Conqueror 为例,就是 Freetype 扩展,它允许加载字体文件而不是创建位图字体。
-
和之前一样,将 "libgdx \extensions\gdx-freetype\" 中的 "armeabi"、"armeabi-v7a" 和 "x86" 文件夹复制到 Android 项目的 "libs" 文件夹。
-
对核心项目 "libs" 文件夹中的 "gdx-freetype.jar" 和 "gdx-freetype-natives.jar" 执行相同的操作。
现在第一个步骤已完成,您可以启动您的 IDE。您可能会注意到出现了一些代码错误。这是由于两个版本之间的 libGDX 发生了变化。请查阅文档和更改日志以解决特定于您的应用的错误。
之后,您就可以编译一个支持 x86 的构建并开始功能测试了。要做到这一点,您需要使用 Intel 的 x86 系统镜像设置模拟器。您可以在此处找到有关如何使用 x86 系统镜像的详细说明:https://software.intel.com/en-us/android/articles/speeding-up-the-android-emulator-on-intel-architecture
我建议阅读上述文章,因为它包含了许多我将在此文章中略过或跳过的额外信息。由于我使用的是 Windows,我将跳过其他操作系统的过程。因此,如果您不使用 Windows,请参考上面的链接。要启动新构建的 APK 在 x86 模拟器上运行,您需要满足一些先决条件。您可能已经安装了 Android SDK,以及一台运行 Intel 处理器、支持“……Intel VT-x、EM64T 和 Execute Disable (XD) Bit 功能……”的计算机。这些听起来比实际要复杂。我设法在 2006 年中期发布的 Intel Core 2 Duo E6600 上运行了一个带有 x86 系统镜像的模拟器。因此,如果您有较新的 CPU,很有可能您已经具备了所有这些先决条件。这些功能必须从 BIOS 中启用,但现在不用担心。
让我们从这里下载 Intel HAXM(硬件加速执行管理器):https://software.intel.com/en-us/android/articles/intel-hardware-accelerated-execution-manager
转到下载文件的位置,解压并/或执行 "intelhaxm.exe" 以启动安装向导。在安装过程中,您可能会收到一条错误消息,提示 Intel VT-x 在 BIOS 中未启用。如果出现这种情况,您需要中止设置,重新启动计算机并在启动时进入 BIOS(有关如何进入 BIOS,请参考主板用户手册),在那里您需要将“Virtualization Technology”设置为“Enabled”。保存并退出 BIOS,然后按照与之前相同的步骤重新开始安装 Intel HAXM。
现在我们已经安装了加速器,我们需要创建一个带有 Intel 系统镜像的 AVD(Android 虚拟设备)。选择您想使用的 Android 版本,并在此处下载镜像:https://software.intel.com/en-us/android/tools(在网站底部找到不同版本)。或者为了方便,可以使用 Android SDK Manager。一旦您有了系统镜像,从 Android SDK Tools “...\android-sdk\AVD Manager.exe” 启动 AVD Manager 并创建一个新的 AVD。根据需要设置新的 AVD。唯一需要做不同的地方是,将“CPU/ABI”设置为“Intel Atom (x86)”,这样您就拥有了一个运行 x86 架构的模拟器。
您所要做的就是根据您的测试清单来测试您的应用。当然,如果您已经彻底测试了您的应用,您不必测试所有内容。将您的测试清单限制在与 CPU 相关的部分。在模拟器和/或设备上对两个构建进行比较,看看它对您的应用产生了多大的影响。
由于 libGDX 框架,《Planet Conqueror》实现 x86 支持的过程相当容易。这仅仅是更新开发框架、将一些文件复制到项目中,然后就可以为 x86 设备构建了。接下来就是对其进行测试,看看在运行时是否有任何问题。运行 x86 模拟器是第一步,由于 Intel 驱动的台式机可用的驱动程序,这很快就完成了。获得一个实际的 x86 架构设备稍微困难一些,但也能够做到。最终,没有发现任何问题,并且《Planet Conqueror》的新版本可以上传到商店供 x86 社区下载。
作者简介
Antonio De Falco 居住在克雷费尔德(德国),他除了其他身份外,还是 Android 设备的独立游戏开发者。他毕业于大学,获得游戏设计学士学位。自学习以来,他曾在科隆和巴黎工作,在那里他获得了在经验丰富的软件开发公司环境中积累的进一步经验。