Android JNI开发小结

  • JNI使用,简单解释其中的含义,具体示例在附件类可以找到,例子都属于简单易懂

    • 如何配置使用 CMAKE开发
    • extern “C”进行链接指定,这告诉编译器,请保持我的名称,不要给我生成用于链接的中间函数名;exter “C”{jni代码}
    •  JNIEXPORT void JNICALL Java_util_JNIUtils_login(JNIEnv *env, jobject obj, jstring str);

         (1)JNIEXPORT :在Jni编程中所有本地语言实现Jni接口的方法前面都有一个”JNIEXPORT”,这个可以看做是Jni的一个标志,至今为止没发现它有什么特殊的用处。

        (2)void :这个学过编程的人都知道,当然是方法的返回值了。

        (3)JNICALL :这个可以理解为Jni 和Call两个部分,和起来的意思就是 Jni调用XXX(后面的XXX就是JAVA的方法名)。

        (4)Java_util_JNIUtils_login:这个就是被上一步中被调用的部分,也就是Java中的native 方法名,这里起名字的方式比较特别,是:包名+类名+方法名。

        (5)JNIEnv * env:这个env可以看做是Jni接口本身的一个对象,在jni.h头文件中存在着大量被封装好的函数,这些函数也是Jni编程中经常被使用到的,要想调用这些函数就需要使用JNIEnv这个对象。例如:env->GetObjectClass()。(详情请查看jni.h)

        (6)jobject obj:例如在Test类的main方法中有这样一段代码: 

                 Test t=new Test(); t.firstTest();

                 这个jobject需要两种情况分析。上段代码中firstTest方法是一个非静态方法,在Java中要想调用它必须先实例化对象,然后再用对象调用它,那这个时候jobject就可以看做Java类的一个实例化对象,也就是obj就是t。如果firstTest是一个静态方法,那么在Java中,它不是属于一个对象的,而是属于一个类的,Java中用Test.firstTest()这样的方式来调用,这个时候jobject就可以看做是java类的本身,也就是obj就是Test.class

    • jni调用java方法,具体查询可看附件JNI编程指南
    • 方法详细介绍示例一
    • 简单创建类对象获取类对象示例二

猜你喜欢

转载自blog.csdn.net/tenderness4/article/details/78486637
今日推荐