Murl Engine* 跨平台开发工具,支持 Android* x86





5.00/5 (1投票)
Murl Engine 是一款全新且免费的跨平台开发解决方案。它专注于游戏和多媒体应用,目前支持 Android、iOS、Windows、OS X 和 Linux* 平台。
Intel® Developer Zone 提供跨平台应用开发工具和操作指南、平台和技术信息、代码示例以及同行专业知识,以帮助开发者创新并取得成功。加入我们的社区,获取 Android、物联网、Intel® RealSense™ 技术 和 Windows 的相关内容,下载工具,获取开发套件,与志同道合的开发者交流想法,并参与黑客松、竞赛、路演和本地活动。
跨平台挑战
20 世纪 80 年代末标志着家庭计算机时代的结束,以及 IBM PC 和 Microsoft Windows* 独特成功故事的开端。曾经各种计算机系统、架构和操作系统并存的混乱局面,被统一的个人电脑所取代。很长一段时间里,开发者只需发布 Windows 版本应用程序,就能覆盖 95% 以上的主流客户。iPhone* 和其他新型移动设备的出现颠覆了这种主导地位,并极大地改变了计算机格局。
2012 年,智能手机销量是 PC 的两倍,预计到 2014 年,这一比例将增至四比一 [1]。新移动设备的普及速度是 PC 繁荣时期的十倍 [2]。智能手机和平板电脑的巨大成功再次导致市场碎片化,设备和外形尺寸众多。在可预见的未来,不会出现占主导地位的主流平台,公司需要为这一挑战做好准备。
几乎所有行业都在某种程度上受到这种快速技术变革的影响。企业被迫迅速做出反应,调整其战略和产品以适应不断变化的市场,以免落后于竞争对手。软件开发者需要支持 Android*、iOS*、Windows 和 OS X* 等多个操作系统,以及 Intel® 架构(IA-32/x86)和 ARM* 等不同的处理器架构,才能覆盖最流行的笔记本电脑、智能手机和平板电脑。
支持多个平台是一项艰巨的任务。每个平台都有自己的 API、首选编程语言,甚至还有一些特有的怪癖。如果采用天真地为每个平台独立实现应用程序的方式,开发和维护成本将变得极其高昂。维护三个或四个代码库可能会导致功能不一致,不同平台支持不同的功能,并且需要多个 bug 数据库。还需要具备不同语言专业知识的开发团队和其他冗余资源。
因此,跨平台工具如今蓬勃发展也就不足为奇了。然而,选择合适的工具并非易事。市场上提供了许多采用不同方法的工具。显然,并非所有工具都适用于所有目的。根据应用程序的类型,一种跨平台解决方案可能更合适,或者完全不合适。此外,许多工具都做出过伟大的承诺,但最终未能兑现,并且很难将实际重要的功能与市场宣传区分开来。最终,每个团队都需要定义自己的工具需求并明智地选择。在我们看来,有两个不可或缺的质量特征值得特别关注,那就是灵活性和可控性。
大多数工具的学习曲线都很陡峭,因此您需要一个足够灵活的工具来应对大多数项目。项目需求经常会发生变化,也会收到新功能的请求;因此,您的工具必须足够灵活,能够添加新功能。此外,您能够完全掌控自己的项目至关重要。您不想失去所有权,任由第三方工具摆布。如果这些特性对您很重要,您可能需要仔细看看 Spraylight 的 Murl Engine。它的设计目标是实现高度的便携性、效率、灵活性和可控性。
Murl Engine 入门
Murl Engine 是一款全新且免费的跨平台开发解决方案。它专注于游戏和多媒体应用,目前支持 Android、iOS、Windows、OS X 和 Linux* 平台。在设计时,我们的目的是创建一个工具集,使开发者能够快速轻松地开发丰富的多媒体应用程序,同时又不限制或约束他们。
Murl Engine 不是典型的所见即所得(WYSIWYG)游戏引擎,而是一个灵活的编码框架。它更偏向底层,提供更多的灵活性和控制力。该框架提供了一个抽象 API,一个强大的场景图框架,可选的附加组件,以及一套工具。该框架的大部分源代码都已提供,您可以根据需要进行扩展和修改。也可以对完整源代码进行授权。应用程序代码直接编译为纯原生二进制文件,因此不需要虚拟机和运行时环境,可提供原始的原生性能。
C++ 语言
在决定基本技术时,C++ 是一个自然的选择。初学者有时会害怕 C++,认为它复杂且过时,但事实并非如此。C++ 是一种现代高效的编程语言,也是专业游戏开发中使用的主要语言。它是一项成熟的技术,也是创建真正可移植的原生代码的唯一途径。
C++ 使您能够使用现代的面向对象语言编写高效的代码。此外,它还允许您在需要时随时深入底层,控制内存布局、处理器指令、优化等更高级的功能。大多数时候并不需要,但知道自己可以做到这一点,或者被迫去做时,这是很好的。这在移动平台上尤其重要,在这些平台上,您需要在硬件和功耗有限的情况下完成更多工作,而对于多媒体应用程序和游戏来说,功耗和性能是至关重要的。
C++ 最重要的特性可能是可移植性。它是唯一一种现代语言,您可以为任何类型的要求苛刻的应用程序编写一个单一的源代码库,并能够原生支持所有平台。每个平台都有 C++ 编译器,新出现的平台也将拥有它。因此,这种方法不仅具有可移植性,而且具有未来适应性。
选择 C++ 作为 Murl Engine 的主要编程语言是显而易见的,我们从未后悔过这个选择。只有平台抽象层需要用其他编程语言来开发。
值得注意的是,当今一些最成功的跨平台应用程序,如 Dropbox、MS Office*、King 游戏等,都采用了相同的方法,即使用通用的 C++ 代码库和特定于平台的适配层。
Murl Engine 架构
如图 1 所示,Murl Engine 的架构分为不同的层。最低层是平台抽象层,顾名思义,它执行平台抽象。每个平台都有一个独立的平台抽象模块。根据平台的要求,平台代码是用 C、C++、Objective-C* 和 Java* 编写的。这一层提供了一个同质的 C++ 接口,供上层使用。
框架层提供了开发体面多媒体应用程序所需的所有功能,并已用可移植的 C++ 开发。本质上,它是一个基于时间的场景图框架,包括对 2D 和 3D 渲染、OpenGL ES* 和 DirectX* 图形 API、资源管理、输入处理、物理、音频、网络、脚本、快速容器类等的支持。详细的功能列表可以在 这里 找到。可以使�� Vuforia* 增强现实工具包、Facebook* 附加组件或自定义附加组件等可选附加组件来扩大功能集。
应用程序开发(“用户代码”)通常用 C++ 编写。此外,还可以使用流行的脚本语言 Lua* 进行开发。
Murl Engine 提供了一套有用的工具,例如用于管理项目的 Dashboard,以及用于创建纹理图集的 Atlas Generator。另一个即将发布的名为“Werkbank”(图 2)的工具,是一个带有实时预览的图形场景编辑器,可用于创建和编辑场景图和资源包。另一个非常好的功能是集成的着色器编辑器,允许您为 OpenGL ES (GLSL) 和 DirectX 11.1 (HLSL) 开发和预览顶点和片段着色器。
Werkbank 利用跨平台的 Qt 小部件工具包作为用户界面,并运行多个 Murl Engine 实例作为预览小部件。这是 Murl Engine 灵活性的又一个良好示例。
使用 Murl Engine 进行开发
要开始开发,只需从网站 http://murlengine.com 下载 Murl Engine。它是免费的,无需注册。只有一个版本,包含所有功能。下载包还包含源代码和教程的项目文件。
提供的 Dashboard(图 3)是一个方便的工具,用于管理您的项目文件并为 Android 平台创建构建。您可以使用它轻松打开教程项目或创建新项目。
基本上,任何可用的 C++ IDE 都可以用于应用程序开发。但是,目前仅为 Microsoft Visual Studio*、Apple Xcode* 和 Android SDK/NDK 工具集提供框架对项目创建和维护的支持。开发和测试可以在桌面环境中使用熟悉的工具进行。这保证了快速的编辑-构建-测试迭代周期,并最大程度地减少了模拟器和目标设备的繁琐工作。
Murl Engine 的第一个 beta 版本于 2013 年 3 月 3 日发布。即使处于 beta 状态,Murl Engine 也已准备好进行专业应用程序开发。非常成功的、收入最高的应用程序“Slots - Pharaoh’s Way”,拥有超过 1000 万次下载,超过 100 亿次游戏,技术投诉很少,是 Murl Engine 稳定性和成熟度的良好例证。
Android x86 支持
拥有一套高度可移植的 C++ 代码库最大的好处是,支持新的架构或新的平台就像吃蛋糕一样简单。提供对 Android x86 的支持简直是小菜一碟。
如上所述,我们使用 Android SDK/NDK 工具集进行 Android 构建。NDK 已通过 APP_ABI 属性提供了对 Android x86 的支持。因此,我们只需添加正确的参数并重新编译整个框架。您可以在这篇 博客文章 中找到有关添加 Android x86 支持和性能改进的更详细讨论。
要为基于 Murl Engine 的应用程序启用 Android x86 支持,需要在通用 Makefile 中相应地设置参数 MURL_ANDROID_CPUS
,例如:
MURL_ANDROID_CPUS := armeabi
MURL_ANDROID_CPUS += armeabi-v7a
MURL_ANDROID_CPUS += x86
指定的这些值对应于 Android NDK 构建环境的 APP_ABI 参数值(ABI 是“Application Binary Interface”的缩写)。
armeabi ARM-based CPUs that support at least the ARMv5TE instruction set
armeabi-v7a ARM-based CPUs that support ARM Architecture v7-a instruction set
with Thumb-2 instructions und VFPv3-D16 hardware FPU.
x86 x86-based CPUs. The NDK build uses the following gcc flags:
-march=i686 -mtune=atom -mstackrealign -msse3 -mfpmath=sse -m32
您可以在文本编辑器中直接编辑通用 Makefile,或者可能更方便地使用 Dashboard 上的 Android -> Configure Project
命令(参见图 4)。
结论
跨平台应用程序开发比以往任何时候都更重要。良好的跨平台解决方案,例如这里介绍的 Murl Engine,可以极大地减轻开发负担并降低开发成本。由于代码库高度可移植以及 Android NDK 已提供 x86 支持,为 Murl Engine 添加对 x86 驱动的 Android 设备的本地支持变得轻而易举。在基于 Murl Engine 的应用程序中使用此功能是无忧无虑的,并且可以在 Intel® Atom™ 处理器驱动的 Android 设备上获得显著的性能提升。
关于作者
Wolfgang Moser 是一位计算机爱好者,拥有 10 多年的专业经验和扎实的嵌入式计算背景。他是 Spraylight GmbH 的联合创始人兼总经理,该公司成立于 2011 年,专注于多媒体和移动开发。他此前曾在电子工程、固件开发、算法设计、实时渲染和管理等多个领域工作。Wolfgang 拥有格拉茨技术大学信息与通信技术专业的理学硕士学位。
[1] http://www.gartner.com/newsroom/id/2791017
[2] http://www.flurry.com/bid/88867/iOS-and-Android-Adoption-Explodes-Internationally