大佬教程收集整理的这篇文章主要介绍了是否可以在 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 文件中,我想创建类对象 findvIEwByID
、setListener
并创建 ABCListener
。
我知道使用格式
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,请注明来意。