如何在Android和iOS中使用C ++创建共享库?

时间:2016-03-10 23:59:51

标签: android c++ ios android-ndk libgdx

我正在使用LibGDX为Android和iOS编写应用程序,我希望能够将C ++代码添加到我的应用程序中以优化某些部分并移植某些功能等。

我一直在网上搜索并尝试按照一些教程,但没找到我需要的东西。

如何编写一个可以在LibGDX中加载的非常基本的C ++库?我需要使用哪些工具?视觉工作室?我在Android Studio中开发。

我认为我需要Android的.so文件和iOS的.a文件,这是正确的吗?

1 个答案:

答案 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没有,那么您就无法使用该特定功能。