/*
* 执行对象中的方法
*/
jvalue callMethod(JNIEnv *env, jboolean& hasException, jobject obj, const char *methodName, const char *descriptor, ...)
{
// printf("Method");
jvalue result;
jobject refobj;
jclass targetcls;
jmethodID mid;
const char *p = descriptor;
//判断本地版本
// if(env->EnsureLocalCapacity(100) != JNI_OK)
// {
// printf("EnsureLocalCapacity == null");
// goto error;
// }
printf("Method11");
refobj = env->NewLocalRef(obj);
printf("Method33");
targetcls = env->GetObjectClass(refobj);
printf("Method1");
mid = env->GetMethodID(targetcls, methodName, descriptor);
if(mid == NULL){
printf("mid == null");
env->DeleteLocalRef(targetcls);
env->DeleteLocalRef(refobj);
goto error;
}
while(*p != ')') p++;
p++;
va_list ap;
va_start(ap, descriptor);
// printf("Method2");
switch(*p){
case 'V':
env->CallVoidMethodV(refobj, mid, ap);
break;
case '[':
case 'L':
result.l = env->CallObjectMethodV(refobj, mid, ap);
break;
case 'Z':
result.z = env->CallBooleanMethodV(refobj, mid, ap);
break;
case 'B':
result.b = env->CallByteMethodV(refobj, mid, ap);
break;
case 'C':
result.c = env->CallCharMethodV(refobj, mid, ap);
break;
case 'S':
result.s = env->CallShortMethodV(refobj, mid, ap);
break;
case 'I':
result.i = env->CallIntMethodV(refobj, mid, ap);
break;
case 'J':
result.j = env->CallLongMethodV(refobj, mid, ap);
break;
case 'F':
result.f = env->CallFloatMethodV(refobj, mid, ap);
break;
case 'D':
result.d = env->CallDoubleMethodV(refobj, mid, ap);
break;
}
va_end(ap);
// printf("Method3");
env->DeleteLocalRef(targetcls);
env->DeleteLocalRef(refobj);
error:
if(env->ExceptionOccurred())
{
printf("Method4");
hasException = env->ExceptionCheck();
// env->ExceptionDescribe();
// env->ExceptionClear();
// env->ThrowNew(targetcls, "error");
}
return result;
}
分享到:
相关推荐
在Android开发中,JNI(Java Native Interface)是一种技术,它允许Java代码和其他语言写的代码进行交互。JNI在Android系统中广泛用于实现性能优化、调用本地库或与硬件设备进行低级别通信,如本例中的串口通信。下面...
通常,你需要用C/C++编写一个本地库,该库包含读取、写入和修改ini文件的函数。然后,你可以使用JNI来调用这些函数,实现对ini文件的Java接口。 步骤如下: 1. **创建本地方法接口**:在Java类中声明native方法,...
总结来说,`serial_jni_largestgle_Androidjni_Android串口操作JNI代码_android_`项目是一个Android应用使用JNI进行串口通信的实例。它涵盖了JNI编程、Android NDK开发、原生代码与Java代码的交互、串口通信协议以及...
Java Native Interface(JNI)是Java平台的标准组成部分,它允许Java代码和其他语言写的代码进行交互。JNI在很多场景下都是必要的,比如需要调用操作系统底层功能、优化性能的关键代码或者利用已有的C/C++库。本篇...
JNI(Java Native Interface)是Java平台的一个重要特性,它允许Java代码和其他语言写的代码进行交互。JNI在很多场景下都发挥着关键作用,比如优化性能、调用操作系统API、使用硬件加速库等。本篇文章将深入探讨JNI...
在Android开发中,JNI(Java Native Interface)是一种技术,允许Java代码和其他语言写的代码进行交互。JNI在Android中主要用于调用本地(C/C++)代码,以实现性能优化或者利用已有的C/C++库。本教程将围绕如何在...
JNI(Java Native Interface)是Java平台的标准组成部分,它允许Java代码和其他语言写的代码进行交互。在Android开发中,JNI常用于提升性能、调用系统库或者实现特定功能,如与C/C++库交互。本项目重点在于如何在JNI...
本教程将带你了解如何创建并运行你的第一个JNI程序,这是一个基本的Android JNI应用实例。 首先,我们需要理解JNI的工作原理。JNI提供了一种方式,让Java代码能够调用本地(native)代码,也就是C/C++代码。这通常...
Java JNI (Java Native Interface) 是Java平台中一个重要的特性,它允许Java代码和其他语言写的代码进行交互。JNI在很多场景下被用到,比如当Java应用程序需要调用已有的C/C++库,或者想要利用硬件的特殊功能时。在...
JNI(Java Native Interface)是Java平台的一个重要特性,它允许Java代码和其他语言写的代码进行交互。JNI在很多场景下都发挥了关键作用,比如优化性能、调用操作系统原生API、接入硬件设备驱动等。本资料“jni开发...
总的来说,使用JNI在Android 2.3中实现截屏是一个涉及到系统底层交互的过程,需要对Android的系统架构、JNI机制以及图像处理有一定的理解。通过这样的方式,开发者可以自定义截图行为,满足特定需求,比如提高效率、...
在这个名为“JNIDemo”的代码资源中,我们可以看到开发者根据特定的通讯协议——可能是某种硬件设备或系统间通信的协议——编写了一个JNI示例。 JNI的核心概念包括以下几个部分: 1. **本地方法接口(Native ...
在Android开发中,JNI(Java Native Interface)是一个关键的技术,它允许Java代码和其他语言写的代码进行交互。JNI常用于提高应用程序性能,访问特定硬件功能,或者像本例中所示,执行安全操作,如AES加密。AES...
Java Native Interface(JNI)是Java平台提供的一种标准方式,允许Java代码和其他语言写的代码进行交互。这个例子展示了如何使用JNI来调用C++代码,在Java环境中执行本地文件的写入操作。下面我们将深入探讨这个过程...
JNI,全称Java Native Interface,是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。JNI在很多场景下非常有用,比如当需要利用已有的C或C++库,或者提升性能时,我们可以通过JNI将Java代码与本地...
JNI(Java Native Interface)是Java平台的一个重要特性,它允许Java代码和其他语言写的代码进行交互。JNI在很多场景下都发挥着关键作用,比如优化性能、调用操作系统API、接入硬件设备、使用C/C++库等。在这个"第一...
例如,你可能会看到一个名为`JniDemoActivity`的类,其中有一个`native void callNativeMethod();`的方法声明。Java代码会通过`System.loadLibrary("JniDemo")`来加载本地库。 4. **C/C++源码**:在jni目录下,你会...
在Android开发中,JNI(Java Native Interface)是一个关键的组件,它允许Java代码与其他语言写的代码进行交互。JNI在很多场景下都非常有用,比如优化性能、调用系统库或者使用第三方C/C++库等。本教程将通过一个...
在Android开发中,Java Native Interface (JNI) 是一个至关重要的技术,它允许Java代码与本地(C/C++)代码交互。JNI在很多场景下都扮演着关键角色,比如提升性能、利用硬件加速、调用已有的C库或者实现低级别操作。...