【参考文章】: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 头文件的更多相关文章

  1. ubuntu下整合eclipse和javah生成jni头文件开发android的native程序(转)

    本文介绍两种利用javah命令生成jni头文件的方法,第一种为大众所知的javah命令,第二种为整合javah到eclipse里面.推荐第二种方式,方便快捷,随时修改随时生成 0:前提和条件: 1:u ...

  2. ubuntu下整合eclipse和javah生成jni头文件开发android的native程序

    0:前言: 这两天一直在研究用android的jni调用第三方库,上网搜方法,但是都是泛泛而谈,没有demo,经过我几番折磨,写了n多的helloword工程,总是不成功,工程名字也就由helloow ...

  3. Android NDK入门实例 计算斐波那契数列一生成jni头文件

    最近要用到Android NDK,调用本地代码.就学了下Android NDK,顺便与大家分享.下面以一个具体的实例计算斐波那契数列,说明如何利用Android NDK,调用本地代码.以及比较本地代码 ...

  4. [转]ubuntu下整合eclipse和javah生成jni头文件开发android的native程序

    转载自:http://blog.csdn.net/jiuyueguang/article/details/9404237 本文介绍两种利用javah命令生成jni头文件的方法,第一种为大众所知的jav ...

  5. kotlin gradle 生成jni头文件

    目录 问题 解决方法 使用方法 代码 gradle task位置截图 问题 最近在用kotlin写jni,但是生成头文件的时候遇到了些问题. 首先 javah 在java >= 1.9 就被取消 ...

  6. javah生成jni头文件时报错 Error: cannot access android.support...

    javah生成jni头文件时报错: Error: cannot access android.support.v7.app.AppCompatActivity class file for andro ...

  7. 一键生成JNI头文件方法二

    经常使用java的同学一定都接触过JNI(Java Native Interface)吧.JNI为我们提供了java<---->C/C++之间的接口,使得我们可以在java中调用C程序,以 ...

  8. 使用javah生成jni 头文件和使用ndk编译so库

    1.jni 首先clean Project,在makeProject生成对应的class文件 然后点出命名框,输入命令: cd app/build/intermediates/classes/debu ...

  9. Android NDK学习(3)使用Javah命令生成JNI头文件 .

    转:http://www.cnblogs.com/fww330666557/archive/2012/12/14/2817387.html 第一步: 在Eclipse中创建android项目,并声明N ...

随机推荐

  1. mysql记录执行的SQL语句

    show variables like "general_log%"; SET GLOBAL general_log = 'ON';SET GLOBAL general_log = ...

  2. JS中的位操作在实际项目中的应用

    前言: Linux中的文件管理子系统的权限管理,想必大家都知道:rwx分别代表read(可读),write(可写), execute(可执行,如果是可执行程序的话),其中rxw可以按照数字表示: r  ...

  3. Codeforces 279D The Minimum Number of Variables 状压dp

    The Minimum Number of Variables 我们定义dp[ i ][ mask ]表示是否存在 处理完前 i 个a, b中存者 a存在的状态是mask 的情况. 然后用sosdp处 ...

  4. spark DataFrame 读写和保存数据

    一.读写Parquet(DataFrame) Spark SQL可以支持Parquet.JSON.Hive等数据源,并且可以通过JDBC连接外部数据源.前面的介绍中,我们已经涉及到了JSON.文本格式 ...

  5. LOJ#3043.【ZJOI2019】 线段树 线段树,概率期望

    原文链接www.cnblogs.com/zhouzhendong/p/ZJOI2019Day1T2.html 前言 在LOJ交了一下我的代码,发现它比选手机快将近 4 倍. 题解 对于线段树上每一个节 ...

  6. jetbrains 系列 webstorm、IntelliJ Idea 免费激活方法免激活码

    方法一: 到网站 http://idea.lanyus.com/ 获取注册码. 方法二:填入下面的license server: http://intellij.mandroid.cn/ http:/ ...

  7. java中的static代码块为什么只执行一次

    原因在最后,这是其中的一个小例子. 如: SessionFactory负责保存和使用所有配置信息,消耗内存资源非常大 所以一个web项目要保证只创建一个SessionFactory 那么在使用hibe ...

  8. iOS键盘事件实现、控制

    记录于2013/6/26:   一.点击键盘上的“Done”按钮关闭键盘 1.视图控制器实现UITextFieldDelegate协议 2.设置文本框属性      textField.returnK ...

  9. 代码调用t.cn接口生成短址

    新浪短网址接口的稳定性和跳转速度还是很给力的,现给出其API说明. 该接口支持两种返回格式:xml和json 对应的URL请求地址为: xml:http://api.t.sina.com.cn/sho ...

  10. 图论之Dijkstra算法

    Dijkstra算法是图论中经典的最短路径算法之一,主要用于解决单源最短路径问题. 单源最短路径问题,即求某个源节点到其他各个节点的最短路径. Dijkstra算法采用了贪心算法的思想,如图求1号节点 ...