[英]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.