Cocos2dx下使用JNI技術呼叫jar包裡面的一些方法遇到的一些問題及解決方案

塵封的記憶0發表於2015-04-24

情況一:JniHelper.h標頭檔案無法找到

方法:需要新增附加包含目錄即可解決問題。具體操作步驟如下:右擊專案---->c/c++---->常規---->附加包含目錄---->新增JniHelper.h所在的路徑即可。此時可能還會遇到找不到jni.h和jni_md.h的問題,解決方案為在%JAVA_HOME%/include/下找到 jni.h,在%JAVA_HOME%/include/win32/下找到jni_md.h,複製到“Visual Studio目錄/VC/include/”下,即可解決問題。

情況二:報類似的錯。用那個函式,總是報錯error LNK2019: 無法解析的外部符號 "__declspec(dllimport) public: static bool __cdecl cocos2d::JniHelper::getStaticMethodInfo(struct cocos2d::JniMethodInfo_ &,char const *,char const *,char const *)" (__imp_?getStaticMethodInfo@JniHelper@cocos2d@@SA_NAAUJniMethodInfo_@2@PBD11@Z),該符號在函式 "public: static class cocos2d::CCScene * __cdecl HelloWorld::scene(void)" (?scene@HelloWorld@@SAPAVCCScene@cocos2d@@XZ) 中被引用

方法:#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)  
******************

JNI的程式碼

***************
#endif 
一定要加上平臺判斷語句。否則會出現以下bug。

情況三:提示在CCPlatformDefine.h檔案中log.h: no such file or directory,即log.h找不到。

方法: 1.修改Android.mk檔案配置,新增如下語句 LOCAL_LDLIBS += -L$(SYSROOT)/usr/lib -llog 2.修改CCPlatformDefine.h檔案 註釋掉#include "log.h",新增#include "ALog.h"。 3.新建ALog.h檔案,寫入以下內容,並將其放置於與CCPlatformDefine.h所在的同一目錄下。


最後想說的是:編寫供c++呼叫的java方法,如果是第三方jar裡面的方法的話,建議用Handler去觸發,讓其處於在UI執行緒中執行,否則可能出錯。


Cocos新手學習必備原始碼啊,大量本人寫的的原始碼(有些商業的淘寶店木有放出來,可以私聊),ARPG,動作射擊,闖關益智,可學習可運營 個人淘寶店,適合新手,我還可以做技術支援,幫助換皮,帶新手等https://shop141567464.taobao.com/?spm=a313o.7775905.1998679131.d0011.pzUIU4

不懂的可以加我的QQ群: 239982941(cocos2d-x 3.x學習群)歡迎你的到來哦,看了博文給點腳印唄,謝謝啦~~



相關文章