一、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【学习笔记】的更多相关文章

  1. 韦东山视频第3课第2节_JNI_C调用JAVA_P【学习笔记】

    C调JAVA方法主要步骤如下: 一.C代码调用java的静态方法 Hello.java public class Hello{ public static void main(String args[ ...

  2. 第1课_Java基础知识【学习笔记】

    摘要:韦东山android视频学习笔记 一.android系统的基本框架如图一所示,应用程序是用java编写的,底层驱动是用C代码写的,java与C怎么连接在一起主要是通过本地服务.android系统 ...

  3. 视频文件写入转换之图像处理-OpenCV应用学习笔记五

    在<笔记二>中我们做了视频播放和控制的实现,仅仅算是完成了对视频文件的读取操作:今天我们来一起练习下对视频文件的写入操作:格式转换. 实现功能: 打开一个视频文件play.avi,读取文件 ...

  4. 【视频开发】伽马校正(gamma correction)学习笔记

    我相信几乎所有做图像处理方面的人都听过伽马校正(Gamma Correction)这一个名词,但真正明白它是什么.为什么要有它.以及怎么用它的人其实不多.我也不例外.  最初我查过一些资料,但很多文章 ...

  5. DDD实战课(实战篇)--学习笔记

    目录 DDD实践:如何用DDD重构中台业务模型? 领域建模:如何用事件风暴构建领域模型? 代码模型(上):如何使用DDD设计微服务代码模型? 代码模型(下):如何保证领域模型与代码模型的一致性? 边界 ...

  6. 【第五课】VIM编辑器(学习笔记)

    4月10日学习笔记打卡

  7. 韦东山 第9课第1节.u-boot分析之编译体验 http://www.100ask.net/index.html

    http://www.100ask.net/index.html 韦东山官网网址 http://wenku.baidu.com/view/ae78a00390c69ec3d5bb75ce.html h ...

  8. 韦东山yy公开课笔记(1)--各种杂的问题

    1,第四期的智能猫眼会有打电话和发短信的功能吗?   答:会有打电话功能,硬件上支持打电话就会支持发短信,只是软件上是否实现发短信现在未定.因为短信延迟太严重,不是可靠的. 2,请问关于makefil ...

  9. 作为一个新人,怎样学习嵌入式Linux,(韦东山)

    很早以前在网上看到的韦东山老师写的文章,复制到自己的博客,方便自己以后看. 在学习嵌入式Linux之前,肯定要有C语言基础.汇编基础有没有无所谓(就那么几条汇编指令,用到了一看就会). C语言要学到什 ...

随机推荐

  1. expor和import的用法

    1.Export 模块是独立的文件,该文件内部的所有的变量外部都无法获取.如果希望获取某个变量,必须通过export输出 // profile.js export var firstName = 'M ...

  2. Android Studio 导入 Android 系统模块并编译和调试

    FAQ: AS导入系统模块源码,并且能够编译调试,正常查看java doc ???? Android AOSP基础(五)Android Studio调试系统源码的三种方式http://liuwangs ...

  3. 15 Android系统安全(简要)

    Android的用户和第三方软件,Android组件和数据安全 手机root后的问题:1.系统不稳定,2.病毒入侵,3.数据泄露 Root原理: Root分两类:1.临时root,2.永久root R ...

  4. 字典排序MD5生成代码

    /* * Project: payment.framework * * File Created at 2017年12月23日 * * Copyright 2016 CMCC Corporation ...

  5. MySQL的JOIN连接

    MySQL的JOIN join的含义跟英文单词"join"一样,连接连接两张表.分为 内连接:inner join 外连接   (1)左外连接(左边的表不加限制):left joi ...

  6. Docker搭建Gogs

    Gogs需要使用到数据库,需要先安装数据库(如mysql),并创建名为gogs的数据库,启动后需要配置数据库连接. 镜像获取:docker pull gogs/gogs 安装运行: docker ru ...

  7. MySQL同步故障:" Slave_SQL_Running:No" 两种解决办法

    进入slave服务器,运行: mysql> show slave status\G Relay_Log_File: localhost-relay-bin.000535 Relay_Log_Po ...

  8. js清除浏览器的缓存的方法

    许多的项目当中,一旦改动了js的代码,必须在浏览器当中重新加载数据,清理缓存,比较麻烦.网上找了很多的清除浏览器的方法,首先是在 html的头部加上meta的属性,但是发现并没有什么用处,后来看到说在 ...

  9. 实验3-1 求一元二次方程的根 (20 分) 《C语言程序设计实验与习题指导(第3版)》

    本题目要求一元二次方程的根,结果保留2位小数. 输入格式: 输入在一行中给出3个浮点系数a.b.c,中间用空格分开. 输出格式: 根据系数情况,输出不同结果: 1)如果方程有两个不相等的实数根,则每行 ...

  10. pip下载加速

    安装pqi pip install pqi pqi回车 pqi ls pqi tuna pqi show pip install --upgrade pqi git链接 https://github. ...