2011-11-19 82 views
1

我需要從Android平臺上的HTML5 PhoneGAP應用程序對C++庫進行一次調用。調用C++庫的最佳方式是什麼?我需要先用JNI換行嗎?注意我沒有訪問任何Android特定的東西。只需使用C++庫。現在我知道Android有可能編寫自定義phonegap插件,但在這種情況下,我需要拉入C++庫,所以不確定插件是否適用於此目的。PhoneGAP在Android平臺上訪問C++庫

回答

1

這個可能會有點複雜。請原諒我對PhoneGAP的無知,但假設您有一些Java代碼正在執行,您應該可以使用JNI調用。但是,您無法對C++類進行JNI調用,並且您可能無法對C++函數進行JNI調用(出於顯而易見的原因,使用模板的函數將不起作用,並且C++函數將會命名爲混亂)。

因此,之前你可以通過JNI訪問庫,你可能需要在可以調用的C++之上創建一個C接口。

+0

似乎是連接到C++庫的常見需求。 – Androider

+0

並非所有常見。像GLES2實現和許多系統級庫都是用C語言編寫的.C++模板就是這個問題的一個很好的例子:對於每一組類型,你都用一個模板實例化一個模板,編譯一個新的類或函數。因此,如果沒有頭文件和編譯器,就無法實例化C++模板(類或函數).C++名稱的改變和C++類ABI之間的差異使情況變得更糟......通常,爲了與C++之外的C++接口,需要將你的C++代碼封裝到C代碼中並與之交互。 –

+0

約翰。從NDK r5開始,似乎有可能將C++包含更多的功能集。但是,它似乎期望一個.a文件作爲PREBUILT_STATIC_LIBRARY。 – Androider