Android第三方SDK学习笔记(二)

今天来看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实现的函数指针。

一般在游戏里这些东西都由游戏引擎封装好了,对这些底层的封装做个了解,能加个方法用用就够了。  

要学习的还有很多。

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。