【参考文章】: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. 重置studio 3T 14天试用

    重置studio 3T 14天试用 bat 脚本 @echo off ECHO Reset Studio 3T Date of use ... FOR /f "tokens=1,2,* &q ...

  2. 2018-2019-2 网络对抗技术 20165323 Exp4 恶意代码分析

    一.原理与实践说明 1.实践目标 监控你自己系统的运行状态,看有没有可疑的程序在运行. 分析一个恶意软件,就分析Exp2或Exp3中生成后门软件:分析工具尽量使用原生指令或sysinternals,s ...

  3. docker 安装使用 mssql2017

    1.拉取镜像 官方文档参考 : https://docs.microsoft.com/zh-cn/sql/linux/quickstart-install-connect-docker?view=sq ...

  4. .NET Core on K8S快速入门课程学习笔记

    课程链接:http://video.jessetalk.cn/course/explore 良心课程,大家一起来学习哈! 目录 01-介绍K8s是什么 02-为什么要学习k8s 03-如何学习k8s ...

  5. .net core 2.x - 发送邮件

    前言 我们知道目前 .NET Core 还不支持 SMTP 协议,当我么在使用到发送邮件功能的时候,需要借助于一些第三方组件来达到目的,今天给大家介绍两款开源的邮件发送组件,它们分别是 MailKit ...

  6. 百度广告联盟api probuf协议对接

    百度的广告API使用的是不是通常的http协议,而是使用谷歌开源出来的probuf协议,具体介绍请参考:https://www.jianshu.com/p/b1f18240f0c7https://ww ...

  7. scala_2

    一.scala类 . 在java中程序的入口是main方法->定义在class中 在scala中程序的入口是main方法->定义在object对象中 案例一: class People { ...

  8. python vs vscode问题汇总

    最近在学工程目录章节的时候遭遇了个把 vscode目录管理 造成的问题, 当然第一大原因是: 初学者使用vscode的时候没有将环境设置好..... 闹了好几天的脾气, 这两天才整理好..... 这事 ...

  9. Git ignore文件的用法

    这周为了往自己个人代码仓库里囤货,把在公司写的一些东西上传到了自己的GitHub代码仓库,手抖把测试用的日志也一并上传了.上传没多长时间就被运维找上门了,说commit里包含内网相关信息,要求删除.当 ...

  10. 利用JavaFx开发RIA桌面应用-在线资料

    转载请注明来源-作者@loongshawn:http://blog.csdn.net/loongshawn/article/details/52805751 1.前言 虽说java已经不是主流的桌面应 ...