韦东山视频第3课第1节_JNI_P【学习笔记】
一、android系统java调用C方法的大概的流程图如下:
二、下面写一个JNI的程序,java的hello方法在加载native库之后能够调用C方法.
2.1 JNIDemo.java 文件内容如下
1 public class JNIDemo{ 2 3 static { 4 System.loadLibrary("native"); 5 } 6 7 public native void hello(); 8 9 public static void main(String args[]){ 10 JNIDemo d = new JNIDemo(); 11 d.hello(); 12 } 13 }
2.2 native.c 文件内容如下
1 #include <jni.h> 2 #include <stdio.h> 3 4 void c_hello(JNIEnv *env, jobject cls) 5 { 6 printf("Hello World!\r\n"); 7 } 8 9 10 static const JNINativeMethod methods[]={ 11 {"hello","()V",c_hello} 12 }; 13 14 JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved) 15 { 16 JNIEnv *env; 17 jclass cls; 18 if ((*jvm)->GetEnv(jvm, (void **)&env, JNI_VERSION_1_4)) { 19 return JNI_ERR; 20 } 21 cls = (*env)->FindClass(env, "JNIDemo"); 22 if (cls == NULL) { 23 return JNI_ERR; 24 } 25 26 if ((*env)->RegisterNatives(env,cls,methods,sizeof(methods)/sizeof(methods[0]))<0) 27 return JNI_ERR; 28 29 return JNI_VERSION_1_4; 30 }
编译过程
编译JNIDemo.java 文件
编译native.c 文件(gcc -I/usr/lib/jvm/java-7-openjdk-amd64/include -fPIC -shared -o libnative.so native.c):
执行需要将本地的动态库添加到环境变量export LD_LIBRARY_PATH=.:
三、JNI的字段描述符
如下代码的第二项就是JNI的字段描述符,这个描述符描述的是hello的参数还有返回值,
1 static const JNINativeMethod methods[]={ 2 {"hello","()V",c_hello} 3 };
自动生成字段描述符,命令javah -jni JNIDemo ,之后查看生成的JNIDemo.h文件
相关的参考代码可以在这里下载
https://github.com/zzb2760715357/100ask/tree/master/java
觉得不错,就给我点小支持吧,蟹蟹
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
2017-07-07 Cmake的介绍和使用 Cmake实践【转】
2017-07-07 CMake使用总结【转】