我正在使用 LibGDX 为 Android 和 iOS 编写应用程序,我希望能够将 C++ 代码添加到我的应用程序中以优化某些部分并移植某些功能等。
我一直在网上搜索并尝试遵循一些教程,但没有找到我需要的东西。
我如何编写一个非常基本的 C++ 库,我可以在 LibGDX 中加载它?我需要使用哪些工具? Visual Studio ?我在 Android Studio 中开发。
我想我需要一个用于 Android 的 .so 文件和一个用于 iOS 的 .a 文件,对吗?
最佳答案
在这两个平台上,都可以直接包含预编译库和 C++ 源代码。
在 Android 上,您需要研究使用 Android NDK
。这允许您包含可以桥接到 Java 的 native 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++ 可以根据需要连接到平台。这意味着您的 header 可能包含每个平台的单独实现文件。
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 不支持,则您不能使用该特定功能。
关于android - 如何在 C++ 中为 Android 和 iOS 创建共享库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35929725/