Java 生成 JNI 头文件
【参考文章】:javah javac 命令行生成native的方法教程
【参考文章】:用javah 导出类的头文件, 常见的错误及正确的使用方法
项目需要调用 C++动态库,由于项目包结构发生变化,需要重新生成本地方法的头文件,记录一下基本使用方法。
1. 使用 javac 生成 JNI 头文件
1.1 基本使用方法
1. JDK版本必须在 1.8 以上
2. 执行命令 javac -encoding utf8 -h targetDir sourceFile
1.2 示例
1.2.1 Java文件目录结构

1.2.2 在 NativeCpp.java 文件所在目录打开命令行
1.2.3 执行命令 javac -encoding utf8 -h . NativeCpp.java(注意 点 后面有个空格)

-encoding utf8 指定源文件编码格式
-h . 头文件的输出目录,. 表示当前目录,后面必需加个空格
NativeCpp.java 源文件
1.2.4 结果

3. 生成的头文件内容
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_streamax_s17_fms_business_jni_NativeCpp */ #ifndef _Included_com_streamax_s17_fms_business_jni_NativeCpp
#define _Included_com_streamax_s17_fms_business_jni_NativeCpp
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_streamax_s17_fms_business_jni_NativeCpp
* Method: parseBlacBox
* Signature: (Ljava/lang/String;II)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_streamax_s17_fms_business_jni_NativeCpp_parseBlacBox
(JNIEnv *, jobject, jstring, jint, jint); #ifdef __cplusplus
}
#endif
#endif
2. 使用 javah 生成 JNI 头文件
2.1 基本使用方法
在包结构开始的目录打开命令行窗口;
执行命令:javah -d targetDir -classpath . 包路径+类名(类名不包含文件后缀名)
2.1.1 在包结构开始的目录打开命令行窗口
在源代码包结构开始处或者class文件包结构开始处都可以;

2.1.2 执行命令:javah -classpath . com.streamax.s17.fms.business.jni.NativeCpp
-classpath . 指定加载类的路径,因为当前目录是包结构开始的目录,所以使用 . ,表示当前目录;
com.streamax.s17.fms.business.jni.NativeCpp 本地方法所在的包路径+类名(注意没有.java或者.class的后缀);
2.1.3 结果

不指定输出路径,生成的头文件默认在当前目录下;
使用 -d targetDir 指定输出路径,
javah -d ../ -classpath . com.streamax.s17.fms.business.jni.NativeCpp 此处指定头文件生成在当前目录的父目录
2.1.4 头文件内容
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_streamax_s17_fms_business_jni_NativeCpp */ #ifndef _Included_com_streamax_s17_fms_business_jni_NativeCpp
#define _Included_com_streamax_s17_fms_business_jni_NativeCpp
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_streamax_s17_fms_business_jni_NativeCpp
* Method: parseBlacBox
* Signature: (Ljava/lang/String;II)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_streamax_s17_fms_business_jni_NativeCpp_parseBlacBox
(JNIEnv *, jobject, jstring, jint, jint); #ifdef __cplusplus
}
#endif
#endif
Java 生成 JNI 头文件的更多相关文章
- ubuntu下整合eclipse和javah生成jni头文件开发android的native程序(转)
本文介绍两种利用javah命令生成jni头文件的方法,第一种为大众所知的javah命令,第二种为整合javah到eclipse里面.推荐第二种方式,方便快捷,随时修改随时生成 0:前提和条件: 1:u ...
- ubuntu下整合eclipse和javah生成jni头文件开发android的native程序
0:前言: 这两天一直在研究用android的jni调用第三方库,上网搜方法,但是都是泛泛而谈,没有demo,经过我几番折磨,写了n多的helloword工程,总是不成功,工程名字也就由helloow ...
- Android NDK入门实例 计算斐波那契数列一生成jni头文件
最近要用到Android NDK,调用本地代码.就学了下Android NDK,顺便与大家分享.下面以一个具体的实例计算斐波那契数列,说明如何利用Android NDK,调用本地代码.以及比较本地代码 ...
- [转]ubuntu下整合eclipse和javah生成jni头文件开发android的native程序
转载自:http://blog.csdn.net/jiuyueguang/article/details/9404237 本文介绍两种利用javah命令生成jni头文件的方法,第一种为大众所知的jav ...
- kotlin gradle 生成jni头文件
目录 问题 解决方法 使用方法 代码 gradle task位置截图 问题 最近在用kotlin写jni,但是生成头文件的时候遇到了些问题. 首先 javah 在java >= 1.9 就被取消 ...
- javah生成jni头文件时报错 Error: cannot access android.support...
javah生成jni头文件时报错: Error: cannot access android.support.v7.app.AppCompatActivity class file for andro ...
- 一键生成JNI头文件方法二
经常使用java的同学一定都接触过JNI(Java Native Interface)吧.JNI为我们提供了java<---->C/C++之间的接口,使得我们可以在java中调用C程序,以 ...
- 使用javah生成jni 头文件和使用ndk编译so库
1.jni 首先clean Project,在makeProject生成对应的class文件 然后点出命名框,输入命令: cd app/build/intermediates/classes/debu ...
- Android NDK学习(3)使用Javah命令生成JNI头文件 .
转:http://www.cnblogs.com/fww330666557/archive/2012/12/14/2817387.html 第一步: 在Eclipse中创建android项目,并声明N ...
随机推荐
- Spring 开发常见问题
linux 下http 接收中文参数乱码 解决: 在application.yml配置文件中添加 spring: http: encoding: charset: GB2312
- 实现upnp ssdp来查找局域网内的其他节点
upnp协议常用于一些智能家居产品中,这些产品连上家里局域网后,用同样连入家中局域网的手机就能很快检测到此产品了.在区块链技术中,upnp也被应用于寻找同一局域网内的其他节点. 关于upnp的具体描述 ...
- 大数据学习之HDFS基本API操作(上)06
package it.dawn.HDFSPra; import java.io.FileNotFoundException; import java.io.IOException; import ja ...
- Codeforces 813C The Tag Game (BFS最短路)
<题目链接> 题目大意:A.B两人在一颗树上,A在根节点1上,B在节点x上,现在他们轮流走,每次只能走一步,或者不走.A以尽可能靠近B的方式行走,B以尽可能远离A的方式走,B先开始走.问你 ...
- fiddler安装 与 https
1.下载最新版fiddler ,强烈建议在官网下载:https://www.telerik.com/download/fiddler 2. 正常傻瓜式安装,下一步,下一步,安装完毕后,先不用急于打开软 ...
- c++链表基本操作
#include <stdlib.h> #include <malloc.h> #include <stdio.h> typedef struct Node { i ...
- webServices 使用GET请求接口方法
webServices 若要使用GET请求接口方法在Web.config 下添加这段 <webServices> <protocols> <add ...
- npm几个常用命令
npm install xxx 安装模块(例如npm install express 就会默认安装express的最新版本,也可以通过在后面加版本号的方式安装指定版本,如npm install exp ...
- copy与mutableCopy的区别总结
1.不可变类型(不管是集合还是非集合),copy结果,不产生新对象,浅拷贝:不可变类型(不管是集合还是非集合),mutableCopy结果,产生新对象,深拷贝.2.可变类型(不管是集合还是非集合),c ...
- fildder
来自 墨痕 :https://home.cnblogs.com/u/ink-marks/ FIDDLER的使用方法及技巧总结 一.FIDDLER快速入门及使用场景 Fiddler的官方网站:htt ...