android - 如何在 C++ 中为 Android 和 iOS 创建共享库?

标签 android c++ ios android-ndk libgdx

我正在使用 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/

相关文章:

android - 运行三星 S3 时应用程序出现黑点 - Phonegap

android - Cordova Android 应用程序在某些设备上无法访问互联网

android - 此线程禁止 HTTP 请求

c++ - 错误 C2228 : left of '.values' must have class/struct/union

ios - 如何均匀设置 UITabBarItem 宽度以占据所有 Tab Bar

ios - 带图像的按钮,点击按钮时图像消失 iOS 10

Android Canvas 改变背景颜色

c++ - *& 用于参数时是什么意思?

c++ - 如何在MacOS上使用Boost C++库

ios - 在 viewWillDisappear 中将 FetchedResultsController 设置为 nil 后出现错误