首页
学习
活动
专区
圈层
工具
发布
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【Android FFMPEG 开发】C++ 回调 Java 方法 模板 ( JavaVM *vm | JNIEnv *env | jobject instance | 引用类型 | 模板代码示例 )

    Native 调用 Java 方法 流程如下 : ① 获取函数签名 : 查找字节码文件 , 使用 javap 获取函数签名 ; ② 反射获取 Java 方法 : 通过调用 jmethodID GetMethodID..., 注意子线程的 JNI 环境需要获取 , 主线程的 JNI 环境可以直接从 Native 层实现的 Java 方法中获取 ; ② jobject instance : 在 Native 层的 Java...; ① 局部引用 : 方法结束后便不能使用了 ; ② 全局引用 : 可以跨方法 , 跨线程调用 ; 2 ....Native 调用 Java 方法 ( 主线程 ) ---- 主线程中可以直接使用 Native 方法中获取的 JNIEnv *env 调用 Java 方法 ; //主线程 : 可以直接使用...//Java 中对应的 public void onPrepare() this->onPrepareId = env->GetMethodID(clazz, "onPrepare"

    1.2K20

    手把手教你如何在Android下进行JNI开发(入门)

    选择 Toolchain Default 会使用默认的 CMake 设置。 Exceptions Support:如果希望启用对 C++ 异常处理的支持,请选中此复选框。...3、jni调用java非静态成员方法 1.使用 GetObjectClass、 FindClass获取调用对象的类 2.使用 GetMethodID获取方法的ID。这里需要传入方法的签名描述。...5、jni调用java构造方法 1.使用 FindClass获取需要构造的类 2.使用 GetMethodID获取构造方法的ID。方法名为 , 这里需要传入方法的签名描述。...7、jni异常处理 1.使用 ExceptionOccurred进行异常的检测。注意,这里只能检测java异常。 2.使用 ExceptionClear进行异常的清除。...= NULL) { LOGE("jni发生异常"); //jni清空异常信息 env->ExceptionClear(); //需要和ExceptionOccurred

    6.6K10

    JNI的探索

    JNI的概念 定义 JNI是Java Native Interface的缩写,通过使用 Java本地接口书写程序,可以确保代码在不同的平台上方便移植 原理 ?...对应的java属性与方法签名 在jni调用中,返回值和参数,以及静态字段和实例字段,有对应着相应的签名,如下表格: 这些签名的时候在接下的实例讲解中会用到; 简而言之,在jni中涉及到类型的使用(包括基本类和引用类型...,等于在C++里面创建一个java对象,然后进行调用;同样也是采用GetMethodID的方法进行获取构造函数的id,然后由NewObject 进行对象的创建 JNI数组的使用 java代码: //整型数据在...函数介绍: 1> ExceptionCheck:检查是否发生了异常,若有异常返回JNI_TRUE,否则返回JNI_FALSE 2> ExceptionOccurred:检查是否发生了异常,若用异常返回该异常的引用...6> Throw:丢弃一个现有的异常对象,在当前线程触发一个新的异常 7> FatalError:致命异常,用于输出一个异常信息,并终止当前VM实例(即退出程序) jni的静态注册和动态注册 参考

    1.1K20

    JNI回调Java

    jclass、jobject、jmethodID 和 jfieldID jni回调java是通过反射来实现的,这些反射的接口都定义在 JNIEnv中。..., static 的参数用了jclass, 非static用的是jobject,jobject必须是已经实例化的引用 常见问题解答:为什么 FindClass 找不到我的类?...如果您要查找内部类,请使用“$”而不是“.”。通常,在 .class 文件上使用 javap 是查找类的内部名称的好方法。 如果类名称形式正确,则可能是您遇到了类加载器问题。...您可以通过以下几种方法来解决此问题: 在 JNI_OnLoad 中执行一次 FindClass 查找,然后缓存类引用以供日后使用。...在执行 JNI_OnLoad 过程中发出的任何 FindClass 调用都会使用与调用 System.loadLibrary 的函数关联的类加载器(这是一条特殊规则,用于更方便地进行库初始化)。

    2.2K10

    Android NDK编程(四)--- CC++调用Java中的方法

    前言 上一篇我们介绍了《Android NDK编程(三)--- Android调用C的函数》,主要是介绍了在Android中怎么调用C/C++中的方法,在我们开发ndk的时候有可能会用到在c/c++代码中回调...调Java方法 代码演示之前,这里要重点说出一下C/C++调用JAVA的方法步骤: Android中Jni可以通过FindClass,GetMethodID, CallObjectMethod等可以实现对...GetMethodID中最后一个参数的写法很特殊, Jni中GetMethodID的定义: jmethodID GetMethodID(jclass clazz, const char* name, const...char* sig) 第一个参数:JNI接口对象; 第二个参数:Java类对象; 第三个参数:参数名(或方法名); 第四个参数:该参数(或方法)的签名。...GetObjectClass(instance); if (jcls == NULL) { return; } //获取方法ID jmethodID jmethod=env->GetMethodID

    2.3K20

    JNI接口操作实践(二)

    前面介绍了JNI的基本规范以及JNI的接口的生成过程。本文通过一个jni_test 应用实践操作JNI的接口各种典型应用。    ...jni_test从jni的字符串,数组,基本类型,自定义类,C回调java静态方法,C回调Java的实例方法,C访问Java的静态变量,C访问Java的实例变量,Java传内存数据给C,C传内存数据给Java...一、UI设计 通过修改active_main.xml(为了简单起见采用相对布局),或者直接使用design工具拖动布局(先拖一个layout线下布局,再在该布局上排上控件,类似MFC的UI设计原理),UI...jni_test的UI界面 二、JIN接口的定义 Java JNI接口声明如下: public native String stringFromJNI(String src); public native...object,不能使用 DeleteLocalRef //使用NewObject就会返回创建出来的实例的局部引用 可 DeleteLocalRef return 1; } extern

    58330

    Android SurfaceVeiw划矩形截屏存放到RecyclerView中

    ★ 知识点 ★ 01 RecyclerView的应用《Android RecyclerView图片横向滚动显示》 02 OpenCV NDK的使用《Android NDK编程(七)--- JNI中List...结构的类数据返回》 03 SurfaceView onTouchEvent的使用《》 04 回调函数的使用《Android里用AsyncTask后的接口回调》 代码实现 因为最后会贴出源码,本章中我们就只介绍重点...在VaccaeSurfaceView中: 定义了回调函数BitmapCallBack mCallback 写了初始化的ontouchEvent的方法,用于手指抬起后保存图片再使用坐标点恢复初始。...nv21ToBitmap的方法中我们重新写了一个调用的JNI,返回的List集合,其中第一张为我们的原图,第二张是我们截取出来的图,然后把第二张图在回调函数中加入发送过去。...04 JNI相关 JNI中加入返回List的方法 ?

    1.3K30

    JNI:本地代码调用Java代码

    例如,创建Java类的对象、调用Java对象的方法、获取Java对象的属性等。JNIEnv的指针会被JNI传入到本地方法的实现函数中来对Java端的代码进行操作。...Java的类型在C/C++中的映射关系 Java类型 本地类型 JNI定义的别名 int long jint / jsize long __int64 jlong byte signed char jbyte...为了在C/C++中表示属性和方法,JNI在jni.h头文件中定义了jfieldID和jmethdID类型来分别代表Java端的属性和方法 在访问,或者设置Java属性的时候,首先就要先在本地代码中获得代表...同样的,在需要调用Java的方法时,也是需要先获取到代表该方法的jmethodID才能进行Java方法调用 使用JNIEnv的 GetFieldID / GetMethodID GetStaticFieldID...这就是sign的作用了,他用于指定要取得的属性/方法的类型。

    1.9K20

    如何通过JNI传递对象执行回调

    关于JNI的完整技术文档,大家可以查看下面这个网址: http://java.sun.com/j2se/1.5.0/docs/guide/jni/ 下面我们看下JNI如何执行回调函数:...我们知道在c/c++回调函数可以通过函数指针执行,但是在Java中已经没有指针的概念,在这里,我们先传递一个类对象给native函数,然后再dll中调用期望的函数即可。...下面的这个例子中,我们通过回调传递一个字符串给java,这在java和c/c++混合编程时传递dll内部的出错或其他信息到java层是很有用的。 1....首先创建一个java类文件,封装一个native函数和一个用于回调的函数 package jni; public class Log { static{...利用vc和生成的头文件完成一个dll #include < windows.h > 调#include “ jni_Log.h “ int WINAPI DllMain(HINSTANCE

    2.9K30

    【Android 应用开发】Android 开发 之 JNI入门 - NDK从入门到精通

    C代码回调Java方法的流程 (1) 找到java对应的Class 创建一个char*数组, 然后使用jni.h中提供的FindClass方法获取jclass返回值; //DataProvider...methodID 使用jni.h中提供的GetMethodID方法, 获取jmethodID, 传入参数 ①JNIEnv指针 ②Class对象 ③ 方法名 ④方法签名, 在这里方法名和方法签名确定一个方法...C中回调Java的void返回值方法 使用JNIEnv指针获取Class对象 : 在jni.h文件中找到 - jclass (*FindClass)(JNIEnv*, const char*);...: 最终方法中调用了 JNIEnv 的RegisterNatives 函数, 将gMethods中存放的JNINativeMethod结构体(存放Native方法 与 JNI方法关联信息) 传递到java...JNI的规范 Android中JNI存在两种规范 : 一种是标准的JNI规范, 多在应用层使用; 另一种是Android中自定义的规范, 多使用在应用框架层; -- JNI标准规范: 遵守JNI标准规函数命名方式

    3.6K11

    JNI开发总结

    程序是件需要耐心的事情,ndk调试更需要耐心 Android Ndk开发常用网站收集,真正的高手并不是掌握所有的API而是需要的时候可以快速的找到要使用的API。...jni常用的几种方式,上述文章内容并不完全正确,稍加修改可正常使用,有需要的可以收藏下。...这篇文章主要介绍JNI开发中遇到的坑以及解决的方法。 ? ---- ? 一.静态注册和动态注册 为什么需要注册?其实就是给Java的native函数找到底层C,C++实现的函数指针。...三.NewStringUTF函数请慎用 经常在使用 jstring (NewStringUTF)(JNIEnv, const char*);函数的过程中遇到如下错误 (1) .JNI DETECTED...程序的交互,因此 JNI 代码编程既遵循 native code 编程语言的编程规则,同时也遵守 JNI 编程的文档规范。

    1.7K41
    领券