我正在使用LibGDX为Android和iOS编写应用程序,我希望能够将C ++代码添加到我的应用程序中以优化某些部分并移植某些功能等。
我一直在网上搜索并尝试按照一些教程,但没找到我需要的东西。
如何编写一个可以在LibGDX中加载的非常基本的C ++库?我需要使用哪些工具?视觉工作室?我在Android Studio中开发。
我认为我需要Android的.so文件和iOS的.a文件,这是正确的吗?
答案 0 :(得分:5)
在这两个平台上,可以直接包含预编译库和C ++源代码。
在Android上,您希望了解如何使用Android NDK
。这允许您包含可以桥接到Java的本机C / C ++代码。 Java和C / C ++之间的连接使用JNI
进行管理。对于C ++和Java之间的通信来说,这是一个相当繁琐,笨拙的系统。您将要查看如何设置Android.mk
makefile,指定如何将库(或源代码)包含到构建中。
在iOS上,它的联系更紧密。您可以拥有可以运行C ++和Objective-C代码的Objective-C ++文件。如果你正在使用Swift,它会有所不同(在Objective-C ++和Swift之间架起桥梁)。
在某些情况下,当平台(Android / iOS)提供的功能优于C ++可能或现实的功能时,您可能会发现自己正在构建代码,以便C ++可以根据需要访问平台。这意味着您可能拥有每个平台具有单独实现文件的标头。
thing.h
thing_android.cpp
thing_ios.mm
Android应用的Android.mk
文件将包含thing_android.cpp
(但不包括thing_ios.mm
)。每当您需要Android SDK中的内容时,此文件可以根据需要跨越JNI桥接器与Java通信。
iOS应用将包含thing_ios.mm
(但不包括thing_android.cpp
)。 .mm
扩展名表示Objective-C ++,因此该文件可以根据需要直接调用功能强大的Cocoa库。
最后,在所有平台上,您都希望确保将C ++的使用量缩减到最低的公分母平台。换句话说,如果iOS支持C ++的特定功能,并且Android没有,那么您就无法使用该特定功能。