標籤:android io ar java sp 檔案 on cti bs
今天來看jni的部分吧
主Activity裡static 的System.loadLibrary("String");
這句話是為了載入你所載入的庫,可能是檔案也可能是一個命名空間等。
public native functionName();這個是聲明你在jni裡需要調用的函數,只用做聲明不用去定義實現他。
一般就只是傳遞一些基本類型,複雜類型我也不知道該如何去做,這就夠了。
傳遞的大多是些整形的或者字元型的變數,這些就是買的遊戲裡的東西或者傳遞的一些簡單訊息。
因為java和c是不能直接互調的,所以還需要掌握jni裡的基本類型,這些也都簡單,差不多隻要在基本類型前加個"j"就ok了
例如int->jint double->jdouble boolean->jboolean
這些是基本的,也有jobject這是jni裡所有類的父類,和java的object類似吧
再看jni的檔案,java層裡調用的native方法,在jni的檔案裡都要把名字定義好,要不然產生so庫的就麻煩了
例如我的java的主類是在hbsi.dtd.game包下的MainActivity
那麼在你jni裡要實現的nativite方法就要寫成
JNIEXPORT void JNICALL Java_hbsi_dtd_test_MainActivity_FucntionName(JNIEnv *, jobject);
如果返回整形或者要傳遞參數要改成
JNIEXPORT jint JNICALL Java_hbsi_dtd_test_MainActivity_FucntionName(JNIEnv *, jobject,jint agr);
以此類推。第一個參數要把JNIEnv傳遞進去,JNIEnv是當前所線上程,通過調用 android::AndroidRuntime::registerNativeMethods()註冊native實現的函數指標。
一般在遊戲裡這些東西都由遊戲引擎封裝好了,對這些底層的封裝做個瞭解,能加個方法用用就夠了。
要學習的還有很多。
Android第三方SDK學習筆記(二)