草庐IT

hello-jni

全部标签

java - 我可以知道调用 JNI C 方法的类的名称吗?

有什么方法可以知道在JNIC代码中调用方法的类的名称?我可以使用以下语句获取对该类的引用:jclasscls=(*env)->GetObjectClass(env,obj);但是我有什么办法可以知道类(class)的名字吗?. 最佳答案 此代码将为您提供调用类名称:jclasscls=env->GetObjectClass(obj);//FirstgettheclassobjectjmethodIDmid=env->GetMethodID(cls,"getClass","()Ljava/lang/Class;");jobjectcl

Android Java代码与JNI交互字符串转换(四)

🔥AndroidStudio版本🔥 🔥创建JNIString.java🔥packagecom.cmake.ndk1.jni;publicclassJNIString{static{System.loadLibrary("string-lib");}publicnativeStringcallNativeString(Stringstr);publicnativevoidstringMethod(Stringstr);} 🔥Native层实现JNI的callNativeString函数🔥#include#includeextern"C"JNIEXPORTjstringJNICALLJava_co

java - 我应该如何为 JNI 加载 native 库以避免 UnsatisfiedLinkError?

我想在Ubuntu8.10上使用JNI,使用Eclipse和gcc(Ubuntu的标准版本,如果有的话)。尽管make文件成功创建了我的库,但我似乎无法加载它。主要的Java类如下:classHello{publicnativevoidsayHello();static{System.loadLibrary("hello.so");}publicstaticvoidmain(String[]args){Helloh=newHello();h.sayHello();}}我的make文件是这样的;all:hello.sohello.so:Hello.ogcc-shared-ohello.s

java - 从 JNI 操作 ByteBuffer

我需要将(直接)ByteBuffer传递给将从缓冲区读取/写入缓冲区的native函数。完成这些操作后,我想使用常规函数从Java代码访问ByteBuffer;特别是,limit()和position()应该反射(reflect)缓冲区的当前状态。由于JNI将使用GetDirectBufferAddress()直接访问底层缓冲区,我假设我应该调用flip()/limit()/position()在我完成读/写之后。但是,我一直无法完成这项工作。例如,当我从C中读取几个字节到缓冲区中,并相应地设置其限制和位置后,我无法从Java中查询这些字节;Java的缓冲区限制和位置的想法与我在C代码

java - 使用接口(interface)在 JNI 中实现回调函数

我需要使用“接口(interface)”在Java中实现回调函数。我将应用程序部分编写为MyJavaFunction(intsize,m_GetSizeInterface);m_GetSizeInterface是一个包含回调函数GetSize的接口(interface)。此GetSize方法在应用程序中被覆盖。在JNI中,我需要调用具有原型(prototype)intMyCPPFunction(intsize,int(*callback)(int*ID));的CPP函数如何将此GetSize作为参数传递给JNI中的MyCPPFunction?请帮忙publicintGetSize(m_

java - 使用 JNI 链接静态库

Java8之前的Java版本要求native代码位于共享库中,但我已经读到,对于Java8,可以将静态链接库与JNI一起使用。我已搜索示例,但找不到任何示例。如何将JNI库静态链接到我的Java应用程序中? 最佳答案 JavaSE8规范已经更改为支持静态链接,静态链接在JDK中实现。System.loadLibrary的规范中简要提到了这一点.它引用的JNI规范部分是here和here.本地方法签名和数据类型对于静态和动态链接的方法是相同的。不过,您可能必须破解JDK生成文件才能使其静态链接您的库。一个显着的区别是静态库的初始化方式

java - 在 Java JNI 中获取真正的 UTF-8 字符

有没有一种简单的方法可以在JNI代码中将Java字符串转换为真正的UTF-8字节数组?不幸的是,GetStringUTFChars()几乎完成了所需的但不完全是,它返回一个“修改过的”UTF-8字节序列。主要区别在于修改后的UTF-8不包含任何空字符(因此您可以将其视为ANSIC空终止字符串),但另一个区别似乎是如何处理Unicode增补字符,例如表情符号。像U+1F604"SMILINGFACEWITHOPENMOUTHANDSMILINGEYES"这样的字符被存储为代理对(两个UTF-16字符U+D83DU+DE04)并且有一个4字节的UTF-8等价物F09F9884,这是我在Ja

java - 断点命中 Hashmap.put() 一个简单的 Hello World 程序

程序简单:publicclassHelloWorld{publicstaticvoidmain(Stringargs[]){System.out.println("HelloWorld");}}现在我在HashMap.class中的函数put(Kkey,Vvalue)中设置断点publicVput(Kkey,Vvalue){if(table==EMPTY_TABLE){inflateTable(threshold);}if(key==null)returnputForNullKey(value);inthash=hash(key);然后我开始调试HelloWorld.class,它会遇

React初体验-Hello React的组件化方式-React入门小案例

文章目录React初体验HelloReact案例演练HelloReact案例升级HelloReact的组件化组件化的方式数据依赖事件绑定其他案例练习电影列表展示计数器的案例React初体验接下来我们通过HelloReact的案例,来体验一下React开发模式,以及jsx的语法HelloReact案例演练第一步:先引入React开发依赖scriptsrc="https://unpkg.com/react@18/umd/react.development.js"crossorigin>script>scriptsrc="https://unpkg.com/react-dom@18/umd/reac

java - Hello world 可以运行,但随后出现没有主线的错误?

我在Java中有以下简单的helloworld:classA{static{System.out.println("Helloworld");}}它按预期工作,但奇怪的是,它给出了一个错误,指出main方法在之后不存在。$javacA.java&&javaAHelloworldExceptioninthread"main"java.lang.NoSuchMethodError:main为什么?我应该忽略它吗?我什至尝试创建一个名为“main”的方法,但它没有任何改变。classA{static{main();}publicstaticvoidmain(){System.out.prin