今天来说说 native 中的代码是如何调用 java 侧代码的。
在看 setEnabled 代码的时候,我们了解到,最终在函数 EffectHandle::setEnabled 中会调用 java 侧的函数,
将状态改变的事件通知到 java 侧。
今天就以 AudioEffect 中的 native 侧调用 java 函数作为例子,来说明 JNI 中的 callback 函数。
#######################说明################################
###########################################################
&&&&&&&&&&&&&&&&&&&&&&&总结&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
上面列出了 native 代码中调用 java 函数的过程。
其实,从 java 侧对象的创建时机来看, JNI 回调分为两种情况:
java 对象在 java 侧创建
java 对象中 JNI 中创建。
一、java 对象在 java 侧创建
我们上面介绍的 AudioEffect 中的回调,就是这种方式。
这种情况下,主控程序在 java 侧。
1、调用函数 env->FindClass 找到指定的类。
2、调用 env->NewGlobalRef 函数获取对象的引用。
3、调用 env->GetStaticMethodID 函数获取 java 侧的函数。
4、在 JNI 中定义一个 callback 函数调用 java 侧的函数。
5、创建 native 侧对象的时候将 callback 函数作为参数传给 native 对象的构造函数。
6、 native 对象就可以通过 callback 函数来调用 java 侧的函数。
二、java 对象中 JNI 中创建
这种情况下,主控程序在 native 侧。
1、调用函数 env->FindClass 找到指定的类。
2、调用 env->NewGlobalRef 函数获取对象的引用。
3、调用函数 env->GetMethodID 得到 java 侧创建对象的函数。
4、调用函数 env->NewObject ,通过第三步中得到的函数创建 java 侧对象。
5、调用 env->GetStaticMethodID 函数获取 java 侧的函数。
6、在 JNI 中定义一个 callback 函数调用 java 侧的函数。
7、创建 native 侧对象的时候将 callback 函数作为参数传给 native 对象的构造函数。
8、 native 对象就可以通过 callback 函数来调用 java 侧的函数。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
分享到:
相关推荐
android hello-jniCallback sample
webrtc-android-jni
Android--开发--JNI编程指南
Android--开发--JNI 简介与实现
赠送源代码:zstd-jni-1.4.4-3-sources.jar; 赠送Maven依赖信息文件:zstd-jni-1.4.4-3.pom; 包含翻译后的API文档:zstd-jni-1.4.4-3-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:...
赠送源代码:zstd-jni-1.4.3-1-sources.jar; 赠送Maven依赖信息文件:zstd-jni-1.4.3-1.pom; 包含翻译后的API文档:zstd-jni-1.4.3-1-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:...
赠送源代码:zstd-jni-1.4.3-1-sources.jar; 赠送Maven依赖信息文件:zstd-jni-1.4.3-1.pom; 包含翻译后的API文档:zstd-jni-1.4.3-1-javadoc-API文档-中文(简体)版.zip; Maven坐标:...
基于java的开发源码-JNI代码生成器 JNIGen.zip 基于java的开发源码-JNI代码生成器 JNIGen.zip 基于java的开发源码-JNI代码生成器 JNIGen.zip 基于java的开发源码-JNI代码生成器 JNIGen.zip 基于java的开发源码-JNI...
面向开发者的libagora-rtc-sdk-jni.so资源文件,方便各位下载使用libagora-rtc-sdk-jni.so
赠送源代码:zstd-jni-1.3.8-1-sources.jar; 赠送Maven依赖信息文件:zstd-jni-1.3.8-1.pom; 包含翻译后的API文档:zstd-jni-1.3.8-1-javadoc-API文档-中文(简体)版.zip; Maven坐标:...
赠送源代码:zstd-jni-1.3.8-1-sources.jar; 赠送Maven依赖信息文件:zstd-jni-1.3.8-1.pom; 包含翻译后的API文档:zstd-jni-1.3.8-1-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:...
android-aes-jni, 用于 jni& Java的Android AES示例 android-aes-jni git clone https://github.com/panxw/android-aes-jni.git cd android-aes-jni ndk-build
Android NDK编程,我的第一个hello-jni程序,如何调用自己编译的so库 博客地址:http://blog.csdn.net/dqksky/article/details/40425977
android studio cmake android ndk-jni动态库开发,这个可以在cmake下链接生成多个so库
google下载,ubuntu 16.04亲测可用,注意project 设置ndk路径
6. jni目录下编写Android.mk文件 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := hello-jni LOCAL_SRC_FILES := hello-jni.c include $(BUILD_SHARED_LIBRARY) 在根目录下运行:ndk-build ...
android-custom-jni-namespace,.zip
Hello-jni源代码,可以直接导入Eclipse运行。 工程/lib文件夹下由编译好的libhello-jni.so文件
android-jni-audio-codecAndroid JNI audio codec from android source, now include amr , pcma, pcmu codec.Android JNI 层的音频编解码库,现在已经合入的有 AMR, PCMA, PCMU 编码.说明本文参考了 , 表示感谢. 他...
基于 Android NDK 的学习之旅-----JNI LOG 打印 eclipse工程文件