韦东山视频第3课第1节_JNI_P【学习笔记】
一、android系统java调用C方法的大概的流程图如下:

二、下面写一个JNI的程序,java的hello方法在加载native库之后能够调用C方法.
2.1 JNIDemo.java 文件内容如下
public class JNIDemo{
static {
System.loadLibrary("native");
}
public native void hello();
public static void main(String args[]){
JNIDemo d = new JNIDemo();
d.hello();
}
}
2.2 native.c 文件内容如下
#include <jni.h>
#include <stdio.h> void c_hello(JNIEnv *env, jobject cls)
{
printf("Hello World!\r\n");
} static const JNINativeMethod methods[]={
{"hello","()V",c_hello}
}; JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved)
{
JNIEnv *env;
jclass cls;
if ((*jvm)->GetEnv(jvm, (void **)&env, JNI_VERSION_1_4)) {
return JNI_ERR;
}
cls = (*env)->FindClass(env, "JNIDemo");
if (cls == NULL) {
return JNI_ERR;
} if ((*env)->RegisterNatives(env,cls,methods,sizeof(methods)/sizeof(methods[]))<)
return JNI_ERR; return JNI_VERSION_1_4;
}
编译过程
编译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的参数还有返回值,
static const JNINativeMethod methods[]={
{"hello","()V",c_hello}
};


自动生成字段描述符,命令javah -jni JNIDemo ,之后查看生成的JNIDemo.h文件


相关的参考代码可以在这里下载
https://github.com/zzb2760715357/100ask/tree/master/java

韦东山视频第3课第1节_JNI_P【学习笔记】的更多相关文章
- 韦东山视频第3课第2节_JNI_C调用JAVA_P【学习笔记】
C调JAVA方法主要步骤如下: 一.C代码调用java的静态方法 Hello.java public class Hello{ public static void main(String args[ ...
- 第1课_Java基础知识【学习笔记】
摘要:韦东山android视频学习笔记 一.android系统的基本框架如图一所示,应用程序是用java编写的,底层驱动是用C代码写的,java与C怎么连接在一起主要是通过本地服务.android系统 ...
- 视频文件写入转换之图像处理-OpenCV应用学习笔记五
在<笔记二>中我们做了视频播放和控制的实现,仅仅算是完成了对视频文件的读取操作:今天我们来一起练习下对视频文件的写入操作:格式转换. 实现功能: 打开一个视频文件play.avi,读取文件 ...
- 【视频开发】伽马校正(gamma correction)学习笔记
我相信几乎所有做图像处理方面的人都听过伽马校正(Gamma Correction)这一个名词,但真正明白它是什么.为什么要有它.以及怎么用它的人其实不多.我也不例外. 最初我查过一些资料,但很多文章 ...
- DDD实战课(实战篇)--学习笔记
目录 DDD实践:如何用DDD重构中台业务模型? 领域建模:如何用事件风暴构建领域模型? 代码模型(上):如何使用DDD设计微服务代码模型? 代码模型(下):如何保证领域模型与代码模型的一致性? 边界 ...
- 【第五课】VIM编辑器(学习笔记)
4月10日学习笔记打卡
- 韦东山 第9课第1节.u-boot分析之编译体验 http://www.100ask.net/index.html
http://www.100ask.net/index.html 韦东山官网网址 http://wenku.baidu.com/view/ae78a00390c69ec3d5bb75ce.html h ...
- 韦东山yy公开课笔记(1)--各种杂的问题
1,第四期的智能猫眼会有打电话和发短信的功能吗? 答:会有打电话功能,硬件上支持打电话就会支持发短信,只是软件上是否实现发短信现在未定.因为短信延迟太严重,不是可靠的. 2,请问关于makefil ...
- 作为一个新人,怎样学习嵌入式Linux,(韦东山)
很早以前在网上看到的韦东山老师写的文章,复制到自己的博客,方便自己以后看. 在学习嵌入式Linux之前,肯定要有C语言基础.汇编基础有没有无所谓(就那么几条汇编指令,用到了一看就会). C语言要学到什 ...
随机推荐
- 纯css无js实现点击事件
<input id="A" type="checkbox"><label for="A"> <span cla ...
- UISlider基本使用
UISlider是一个很常用的UI控件,调节屏幕亮度或者调节音量大小等很多地方都可以用到,而且使用方便,下面我来介绍一下UISlider的基本使用. 首先介绍一下基本属性和常用方法: //设置当前sl ...
- Nginx + PHP 修改单次请求 最大执行时间
1. php.ini (usr/local/php/etc) max_execution_time = 2. php-fpm.conf (usr/local/php/etc) request_t ...
- 【Maven】Maven中排除依赖、归类依赖、优化依赖
参考博文:Maven中排除依赖.归类依赖.优化依赖
- lvs+keepalived高可用负载均衡
一.实验环境和网络拓扑图 本实验需要5台虚拟机,一台客户机,2台lvs调度器,两台web服务器. 客户机:192.168.0.6/24 lvs1:192.168.0.201/24 lvs2:192.1 ...
- .NET CORE 升级3.0遇到的问题the project must provide a value for configuration
将.NET Core 2.2应用程序迁移到Core 3.0时遇到了the project must provide a value for configuration的问题.原来在.proj项目文件文 ...
- SpringDataJPA开发环境的搭建
这里简单的介绍一下使用maven工程创建SpringDataJPA的开发环境的搭建 首先引入依赖 <dependencies> <!-- junit单元测试 --> <d ...
- Photon介绍与安装
Photon光子引擎是一款实时的Socket服务器和开发框架,快速.使用方便.容易扩展. 服务端架构在windows系统平台上,采用C#语言编写. 客户端SDK提供了多种平台的开发API,包括DotN ...
- 一个.java文件中是否可以有多个类
前段时间,有个同事问到我这个问题:一个.java文件中是否可以有多个类? 答案:可以有多个类,但最多只能有一个被public修饰的class. 且若这个.java文件中有一个public类型的clas ...
- MongoDB远程连接-命令行客户端mongo.exe
命令行客户端mongo.exe 位于安装目录bin子目录下.MongoDB的所有可执行程序都在其中. 双击打开mongo.exe应该是默认连接本地数据库服务,因此需要用Cmd或Powershell的方 ...