首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android JNI从Java类中获取Two Fields

在Android JNI(Java Native Interface)中,从Java类中获取两个字段(Fields)需要遵循以下步骤:

  1. 首先,确保Java类中的字段具有公共访问权限,以便在C++代码中访问它们。
代码语言:java
复制
public class MyClass {
    public int field1;
    public int field2;
}
  1. 在C++代码中,使用GetFieldID函数获取字段的ID。这需要在JNI环境中完成,例如在JNI_OnLoad函数中。
代码语言:cpp
复制
jfieldID field1ID = env->GetFieldID(myClass, "field1", "I");
jfieldID field2ID = env->GetFieldID(myClass, "field2", "I");
  1. 使用GetIntField函数从Java对象中获取字段的值。
代码语言:cpp
复制
jint field1Value = env->GetIntField(javaObject, field1ID);
jint field2Value = env->GetIntField(javaObject, field2ID);
  1. 现在,您可以在C++代码中使用field1Valuefield2Value变量。

请注意,这里的示例是针对整数字段的。如果您需要从Java类中获取其他类型的字段,例如浮点数、字符串或自定义对象,您需要相应地修改代码。

推荐的腾讯云相关产品:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android 通过 JNI 调用 Java 的构造方法和父的方法

Android 还可以通过 JNI 来调用 Java 一个的构造方法,从而创建一个 Java 。 调用构造方法 调用构造方法的步骤和之前调用的实例方法步骤类似,也需要获得对应的和方法 id。...除了 NewObject 方法之外,JNI 还提供了 AllocObject 方法来创建对象,以同样调用 Animal 构造方法为例: /** * 通过 AllocObject 方法来创建一个...此处传入的一个参数不再是 jclass 类型,而是创建的未被初始化的 jobject 。 通过这种方法,同样可以创建一个 Java 。...调用父的方法 可以通过 JNI 来调用父的实例方法。 在子类通过调用 CallNonvirtualMethod 方法来调用父的方法。...由此,通过 JNI 来调用 Java 算是基本完成了。 具体示例代码可参考我的 Github 项目,欢迎 Star。

2.6K20

Android NDK 开发】JNI 线程 ( JNI 线程创建 | 线程执行函数 | 非 JNI 方法获取 JNIEnv 与 Java 对象 | 线程获取 JNIEnv | 全局变量设置 )

JNI 线程创建 II . 线程执行函数 III . 线程方法获取 Java 对象 IV . 线程方法获取 JNIEnv V . JNI 线程 完整代码示例 I . JNI 线程创建 ---- 1....线程方法获取 Java 对象 ---- 线程方法获取 Java 对象步骤 : ① 定义全局变量 jobject obj : 使用该全局变量存储 Java 对象 ; //JNI 方法参数的第二个参数 ,...调用 JavaVM 的 AttachCurrentThread 可以获取本线程的 JNIEnv 指针 注意最后还要将线程 Java 虚拟机剥离 关于参数传递...//将线程 Java 虚拟机剥离 _vm->DetachCurrentThread(); //注意这里一定要返回 0 , 否则执行到结尾会崩溃 return 0; } V...调用 JavaVM 的 AttachCurrentThread 可以获取本线程的 JNIEnv 指针 注意最后还要将线程 Java 虚拟机剥离 关于参数传递 :

68920

Android NDK编程(七)--- JNIList结构的数据返回

前言 上一篇文章我们介绍了《Android NDK编程(六)--- JNI参数的传递与返回》学会了使用的返回,在做开发,往往我们返回的参数带有List的数据,所以我们今天这一章来说一下List...其实也是按这个方式进行增加的,只不过在JNI写起来可能要麻烦些。...然后按ALT+ENTER让其在native-lib.cpp中直接创建我们的JNI方法 ? 然后开始写我们的在JNI中方法的代码 一、获取ArrayList的引用 ?...二、获取ArrayList的构造函数ID并创建一个ArrayList对象 ? 三、获取ArrayList的Add函数的ID,准备在循环中调用 ? 四、获取CProduct并定义的各个属性 ?...env, jclass type) { //获取ArrayList引用 jclass list_jcls = env->FindClass("java/util/ArrayList"

4.1K30

Android深入理解JNI(二)类型转换、方法签名和JNIEnv

2.操作Java获取Java的变量和对象等等)。 先来看JNIEnv的定义,如下所示。 libnativehelper/include/nativehelper/jni.h ?...通过JavaVM的AttachCurrentThread函数可以获取这个线程的JNIEnv,这样就可以在不同的线程调用Java方法了。...jfieldID和jmethodID 在JNI中用jfieldID和jmethodID来代表Java的成员变量和方法,可以通过JNIEnv的下面两个方法来分别得到: ?...注释4出获取Java层的MediaRecorder名为postEventFromNative的静态方法,并赋值给post_event。其中fields的定义为: ?...在注释1处调用了JNIEnv的GetObjectField函数,参数fields.surface用来保存Java层MediaRecorde的成员变量mSurface,mSurface的类型为Surface

1.9K60

Android跨进程通信IPC之3——关于JNI的那些事

JNI.png (二)、Java/JNI/C的关系 1、C与Java的侧重 C语言:C语言中重要的是函数 fuction Java语言:Java中最重要的是JVM,class,以及class的方法...所有的工作都是获取虚拟机接口开始的。有两种方式:第一种方式,在加载动态链接库时,JVM会调用JNI_OnLoad(JavaVM * jvm, void * reserved)(如果定了该函数)。...需要强调在Android SDK强调了额 " do not cache JNIEnv * ",要用的时候在不同的线程通过JavaVM * jvm的方法来获取与当前线程相关的JNIEnv *。...,该数组每一个成员都代表一文件的jni映射,其中REG_JNI是一个宏定义,让我们来看下 3、REG_JNI 宏定义 #ifdef NDEBUG #define REG_JNI(name)...七、总结 本文主要是通过实例,基于Android 6.0源码分析 JNI原理,讲述JNI核心功能: 介绍了JNI的概念及如何查找JNI方法,让大家明白如何Java层跳转到Native层 分了JNI

2.5K50

模仿手写andfix的实现原理

实现思路 发现bug 并修改bug,将修复的java文件 编译成class 然后打包成dex 放到服务器 供客户端下载 将修复的方法体 Method dex 文件取出,将会出现bug的方法 Method...虚拟机jvm.jpg 因此,我们需要从系统源码入手,进行分析 系统源码:Android1.6到android8.1的各个版本的系统源码 链接:https://pan.baidu.com/...native void replaceDalvik(int sdk, Method wrongMethod, Method rightMethod); } 上面实现了dex的文件加载,然后将加载到的dex解析,获取到我们修复好的...Android5.1系统的源码art虚拟机的代码头文件.png 整理后的art_method.h在后续源码 Art虚拟机api的jni的实现method替换 extern "C" JNIEXPORT..._.entry_point_from_jni_=right->ptr_sized_fields_.entry_point_from_jni_; // 机器码模式 wrong->ptr_sized_fields

61120

技术 | Java获取名的3种方法!

前言 用了这么久的Java,怎样在Java获取名呢?今天小编为您带来了Java获取名的3方法,了解一下? 1 获取名的方法 Java 获取名的方式主要有以下三种。...这是一种对函数返回值和参数的编码,叫做JNI字段描述符(JavaNative Interface FieldDescriptors)。 [ 表示数组,一个代表一维数组,比如 [[ 代表二维数组。...之后 L代表描述符,最后 ;表示名结束。...3 结论 以上结果可以看出 getName() 和 getCanonicalName() 在获取普通名的时候没有区别,在获取内部类和数组有区别的。...getSimpleName() 在获取普通和内部类名的时候没区别,在获取数组的时候有区别。 文章来源:Java技术栈 文章编辑:小柳

1.3K20

高级 | Java获取名的3种方法!

获取名的方法 Java 获取名的方式主要有以下三种。 getName() 返回的是虚拟机里面的class的名表现形式。 getCanonicalName() 返回的是更容易理解的名表示。...这是一种对函数返回值和参数的编码,叫做JNI字段描述符(JavaNative Interface FieldDescriptors)。 [ 表示数组,一个代表一维数组,比如 [[ 代表二维数组。...之后 L 代表描述符,最后 ;表示名结束。...结论 1、以上结果可以看出 getName() 和 getCanonicalName() 在获取普通名的时候没有区别,在获取内部类和数组有区别的。...2、getSimpleName() 在获取普通和内部类名的时候没区别,在获取数组的时候有区别。

1.5K20
领券