簡體   English   中英

如何在C ++中為Android和iOS創建共享庫?

[英]How do I create a shared library in C++ for both Android and iOS?

我正在使用LibGDX來為Android和iOS編寫應用程序,並且我希望能夠向我的應用程序添加C ++代碼以優化某些部分並移植某些功能等。

我一直在互聯網上搜索並嘗試遵循一些教程,但是沒有找到我需要的東西。

如何編寫可以在LibGDX中加載的非常基本的C ++庫? 我需要使用哪些工具? 視覺工作室? 我在Android Studio中開發。

我認為我需要Android的.so文件和iOS的.a文件,對嗎?

在兩個平台上,都可以直接包含預編譯的庫以及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不支持,則您將無法使用該特定功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM