程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了是否可以在 JNI 中创建 Java 侦听器的新作业?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决是否可以在 JNI 中创建 Java 侦听器的新作业??

开发过程中遇到是否可以在 JNI 中创建 Java 侦听器的新作业?的问题如何解决?下面主要结合日常开发的经验,给出你关于是否可以在 JNI 中创建 Java 侦听器的新作业?的解决方法建议,希望对你解决是否可以在 JNI 中创建 Java 侦听器的新作业?有所启发或帮助;

在 AndroID studio @H_414_3@mainActivity 中,我写了类似的东西

int itemA_num = 0;
int itemB_num = 0;

ABCListener mabcListener = new ABCListenter() {
    @OverrIDe
    public voID onEventActivated(Customresult result) {
        //do sth secret e.g.
        itemA_num ++;
    }
}

ABCobject mabcobject = (ABCobject) findvIEwByID(R.ID.abcobject1);
mabcobject.setListener(mabcListener);

我不希望人们反编译我的 APK 并通过修改值或添加如下内容来修改代码:

ABCListener mabcListener = new ABCListenter() {
    @OverrIDe
    public voID onEventActivated(Customresult result) {
        //do sth secret e.g.
        itemA_num += 10000; //possibly some general name read by those guys and modifIEd as int1 +=10000;
        itemB_num += 500; //possibly some general name read by those guys and added this linE int2 +=500;
    }
}

所以我想在 Cmake 中使用 JNI。在 .cpp 文件中,我想创建类对象 findvIEwByIDsetListener 并创建 ABCListener。 我知道使用格式

@H_450_24@jclass cls = (jclass) env->FindClass("abc/def/GHI"); jmethodID mID = (jmethod) env->getmethodID(cls,"methodname","(xxxX)yyy"); jobject obj = (jobject) env->CallObjectMethod(cls,mID,params);

但是,如果我想编写关于 ABCListener 的代码并对其进行 jobject,我不知道如何以及在哪里告诉机器我将编写一些与 { 相关的代码{1}}。我还想在 JNI 的响应中添加一些代码行。

发现了一个与此问题“类似”的网站,但它是从 2011 年开始的,关于 Runnable。 https://community.Oracle.com/tech/developers/discussion/2298550/overriding-interface-methods-via-jni 不知道2021年还能不能用。

解决方法

首先在Java端定义一个新类:

class NativeABCListener implements ABCListener {
  @Override public native void onEventActivated(CustomResult result);
}

接下来,使用 Java 或本机代码创建 NativeABCListener 的实例,并将其附加到您的 @H_414_3@mabcobject。你知道怎么做,我就不重复了。

在本机方面,您只需定义一个具有适当名称的 C++ 方法:

JNIEXPORT void JNICALL Java_your_package_NativeABCListener_onEventActivated(JNIEnv *env,jobject thiz,jobject result) {
   ...
}

如果需要多个ABCListeners做不同的事情,可以选择创建多个NativeABCListener类(每个类都有自己对应的native函数),也可以修改NativeABCListener来存储Java long 字段中的 C++ 函数指针。在 ..._onEventActivated 函数中,您然后从 thiz 中提取字段并像常规函数指针一样调用它。

大佬总结

以上是大佬教程为你收集整理的是否可以在 JNI 中创建 Java 侦听器的新作业?全部内容,希望文章能够帮你解决是否可以在 JNI 中创建 Java 侦听器的新作业?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。