位置: 编程技术 - 正文

linux中如何使用javah命令生成jni头文件(linux jhat)

编辑:rootadmin

推荐整理分享linux中如何使用javah命令生成jni头文件(linux jhat),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:linux怎样使用,linux jhat,Linux中如何使用U盘,Linux中如何使用命令创建目录,linux中如何使用禁用用户登陆,Linux中如何使用命令创建目录,Linux中如何使用su和sudo命令,Linux中如何使用命令创建目录,内容如对您有帮助,希望把文章链接给更多的朋友!

平台:瑞芯的rk

SDK:5.1

linux中如何使用javah命令生成jni头文件(linux jhat)

作者:fulinux

笔记用内容,可能不全

*****本文允许转载,不过请注明出处: 为public class MediaScanner正常编译后会在rk/out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes/android/media目录下生成MediaScanner.class文件。我们进入rk/out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes目录,使用如下命令生成jni头文件:classes]$ javah -classpath . -jni android.media.MediaScannerclasses]$ ls android_media_MediaScanner.h android_media_MediaScanner.hjavah命令详解原文连接 javah命令详解

-- ::| 分类: JDK命令 | 标签:java命令 |字号大中小 订阅

-help将看到javah命令的语法信息。实例1:javahUsage: javah [options] <classes>where [options] include: -help Print this help message and exit -classpath <path> Path from which to load classes -bootclasspath <path> Path from which to load bootstrap classes -d <dir> Output directory -o <file> Output file (only one of -d or -o may be used) -jni Generate JNI-style header file (default) -version Print version information -verbose Enable verbose output -force Always write output files<classes> are specified with their fully qualified names (for instance, java.lang.Object).<classes>参数和javac命令相似,有两种方法可以指定需要javah命令把JNI方法转化成CC++头文件的类文件名一种是直接给出要操作的类文件如果源文件数量少,可以用这种方式,在命令行上列出文件名即可。文件与文件之间用空格非分开就可以了。另一种是通过@files的形式可以把要操作的java类文件名列在一个文件,文件名之间用空格或回车进行分割。然后在javah命令行中,可以用'@' 字符加上包含需要把JNI方法转化成CC++头文件的类文件名的文件名来指定需要把哪些java类文件的JNI方法转化成CC++头文件。因为javah当遇到以 `@' 字符,它就会把该字符后的文件所列出的所有java类文件的JNI方法转化为CC++头文件。这种形式适用于java类文件很多的情况。-bootclasspath和-classpathjavah操作是针对类文件,-bootclasspath和-classpath就是指定在哪里进行类文件搜索。JDK搜索类文件先后顺序如下:Bootstrap classes,User classes  Bootstrap默认的是JDK自带的jar或zip文件,它包括jrelib下rt.jar等文件,JDK首先搜索这些文件. 可以通过-bootclasspath来设置它。文件之间用分号";"进行分割。  User classes搜索顺序为当前目录、环境变量 CLASSPATH、-classpath。  它们用于告知JDK搜索类文件根目录名、jar文档名、zip文档名,用分号";"进行分隔。  例如当你自己开发了公共类并包装成一个common.jar包,在使用 common.jar中的类时,就需要用-classpath common.jar 告诉JDK从common.jar中查找该类,否则JDK就会抛出java.lang.NoClassDefFoundError异常,表明未找到类定义。  使用-classpath后JDK将不再使用CLASSPATH中的类搜索路径,如果-classpath和CLASSPATH都没有设置,则JDK使用当前路径(.)作为类搜索路径。  推荐使用-classpath来定义JDK要搜索的类路径,而不要使用环境变量CLASSPATH的搜索路径,以减少多个项目同时使用CLASSPATH时存在的潜在冲突。例如应用1要使用a1.0.jar中的类G,应用2要使用 a2.0.jar中的类G,a2.0.jar是a1.0.jar的升级包,当a1.0.jar,a2.0.jar都在CLASSPATH中,JDK搜索到第一个包中的类G时就停止搜索,如果应用1应用2的虚拟机都从CLASSPATH中搜索,就会有一个应用得不到正确版本的类G。 javah命令是针对类文件中的,你肯定需要要把你要操作的类文件的根目录包含在搜索路径中,对于包文件(Jar或zip)形式的类文件,它的根目录就是包文件。另外这里的-bootclasspath和-classpath与java或javac命令都很相似,但是javah命令没有用来设置Extension classes的-extdirs参数选项,有点奇怪!还有这里的"-classpath"也不能缩写成"-cp"-d 和-o这两个参数用于设置生成的CC++头文件的指定,该两参数选项不能同时使用,-d是为<classes>中的每个有JNI方法的java类都生成一个头文件,并存放在-d指定的目录中,-o则是生成的所有JNI方法的头文件都放在-o指定的文件中。-version显示当前javah的版本号.实例2:javah -versionjavah version "1.6.0_"-jin表示用于生成JNI风格的CC++头文件,默认该参数就是开启的。不过应该不能关闭参数。-verbose开启了该参数,将显示javah命令搜索和装置类文件的详细过程。实例2:文件1 srccomrobinHello.javapackage com.robin;public class Hello{void sayHello(){ System.out.println(getHelloStringFromJni());}native String getHelloStringFromJni();}文件2 srccomrobinPeople.javapackage com.robin;public class People{String name;native String getNameFromJni();}文件3 comhubinUtil.javapackage com.hubin;public class Util{public final static String getString(){ return "Hi";}native static String getStringFromJni();}文件4 src.txtsrccomrobinHello.javasrccomrobinPeople.javasrccomhubinUtil.java文件5 classNames.txtcom.robin.Hello com.robin.Peoplecom.hubin.Util运行命令编译javac -d classes @src.txt如果运行以下javah命令javah -d h -classpath classes -jni @classNames.txt命令结束后,你将在h目录先看到如下文件:com_robin_Hello.h文件/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class com_robin_Hello */#ifndef _Included_com_robin_Hello#define _Included_com_robin_Hello#ifdef __cplusplusextern "C" {#endif/* * Class: com_robin_Hello * Method: getHelloStringFromJni * Signature: ()Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_com_robin_Hello_getHelloStringFromJni (JNIEnv *, jobject);#ifdef __cplusplus}#endif#endifcom_robin_People.h文件/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class com_robin_People */#ifndef _Included_com_robin_People#define _Included_com_robin_People#ifdef __cplusplusextern "C" {#endif/* * Class: com_robin_People * Method: getNameFromJni * Signature: ()Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_com_robin_People_getNameFromJni (JNIEnv *, jobject);#ifdef __cplusplus}#endif#endifcom_hubin_Util.h文件/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class com_hubin_Util */#ifndef _Included_com_hubin_Util#define _Included_com_hubin_Util#ifdef __cplusplusextern "C" {#endif/* * Class: com_hubin_Util * Method: getStringFromJni * Signature: ()Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_com_hubin_Util_getStringFromJni (JNIEnv *, jclass);#ifdef __cplusplus}#endif#endif如果运行以下命令javah -o hMyJni.h -classpath classes -jni @classNames.txt将在h目录下看到MyJni.h文件/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class com_robin_Hello */#ifndef _Included_com_robin_Hello#define _Included_com_robin_Hello#ifdef __cplusplusextern "C" {#endif/* * Class: com_robin_Hello * Method: getHelloStringFromJni * Signature: ()Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_com_robin_Hello_getHelloStringFromJni (JNIEnv *, jobject);#ifdef __cplusplus}#endif#endif/* Header for class com_robin_People */#ifndef _Included_com_robin_People#define _Included_com_robin_People#ifdef __cplusplusextern "C" {#endif/* * Class: com_robin_People * Method: getNameFromJni * Signature: ()Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_com_robin_People_getNameFromJni (JNIEnv *, jobject);#ifdef __cplusplus}#endif#endif/* Header for class com_hubin_Util */#ifndef _Included_com_hubin_Util#define _Included_com_hubin_Util#ifdef __cplusplusextern "C" {#endif/* * Class: com_hubin_Util * Method: getStringFromJni * Signature: ()Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_com_hubin_Util_getStringFromJni (JNIEnv *, jclass);#ifdef __cplusplus}#endif#endif可以开启-verbose参数来查看javah命令搜索和载人类文件的过程。比如:D:projecttest>javah -o hMyJni.h -classpath classes -jni -verbose @classNames.txt[ Search Path: C:jdk1.6.0jrelibresources.jar;C:jdk1.6.0jrelibrt.jar;C:jdk1.6.0jrelibsunrsasign.jar;C:jdk1.6.0jrelibjsse.jar;C:jdk1.6.0jrelibjce.jar;C:jdk1.6.0jrelibcharsets.jar;C:jdk1.6.0jreclassesclasses ][No need to update file hMyJni.h][search path for source files: classes][search path for class files: C:jdk1.6.0jrelibresources.jar,C:jdk1.6.0jrelibrt.jar,C:jdk1.6.0jrelibsunrsasign.jar,C:jdk1.6.0jrelibjsse.jar,C:jdk1.6.0jrelibjce.jar,C:jdk1.6.0jrelibcharsets.jar,C:jdk1.6.0jreclasses,C:jdk1.6.0jrelibextdnsns.jar,C:jdk1.6.0jrelibextlocaledata.jar,C:jdk1.6.0jrelibextsunjce_provider.jar,C:jdk1.6.0jrelibextsunmscapi.jar,C:jdk1.6.0jrelibextsunpkcs.jar,classes][loading classescomrobinHello.class][loading classescomrobinPeople.class][loading classescomhubinUtil.class][loading javalangObject.class(javalang:Object.class)][loading javalangString.class(javalang:String.class)][loading javalangThrowable.class(javalang:Throwable.class)][loading javalangClass.class(javalang:Class.class)][done in ms]

项目Bug 解决 (1)TabPageIndicator动态刷新数据TabPageIndicator动态刷新数据adapter.notifyDataSetChanged();indicator.notifyDataSetChanged();————————————————————

Windows环境下Android Studio 安装教程 准备工具JDK安装包。要求:JDK7以及以上版本。AndroidStudio安装文件。安装安装过程中的下一步之类的简单操作,不会进行截图讲解,因为你只需要点击nex

Android抽象布局——include、merge 、ViewStub Android抽象布局——include、merge、ViewStub在布局优化中,Android的官方提到了include、merge、ViewStub这三种布局并介绍了这三种布局各有的优势,下面也是简

标签: linux jhat

本文链接地址:https://www.jiuchutong.com/biancheng/384287.html 转载请保留说明!

上一篇:Android WebView和JS交互(android webview webgl)

下一篇:项目Bug 解决(项目遇到的问题及解决办法)

  • 小规模纳税人怎么办理
  • 应交税费科目的借贷方向
  • 企业拆迁补偿金的税务处理
  • 增值税专用发票有效期是多长时间
  • 企业所得税申报表在哪里查询
  • 代收污水处理费免税
  • 递延所得税资产计算公式
  • 预缴 汇算清缴
  • 销售报废车辆按多少计提销项税额
  • 采购部付款申请单和财务付款流程
  • 增值税是先交税还是先开票
  • 预收账款增值税和消费税纳税时间
  • 勾选发票必须当月认证吗
  • 固定资产改良被替换怎么处理
  • 知识产权代理公司怎么盈利
  • 应收账款周转天数正常范围
  • 农产品零税率
  • 房地产企业建设的幼儿园如何缴纳城镇土地使用税
  • 工会经费的计税依据包括单位社保吗
  • 招标公司返回的钱怎么算
  • 应收票据到期收回时和未到期转让时
  • npm sill idealTree buildDeps 安装踩坑指南(详细版)
  • 企业转让股票交什么税费呢
  • 差额征收单位所需材料
  • web课程设计网页
  • 电脑上fci是什么文件
  • 小规模纳税人缴纳增值税怎么算
  • php url编码转换
  • 石炭纪的树有多高
  • 预缴季度企业所得税分录
  • 哪些收入不列入交纳党费计算基数
  • 微信小程序开发一个多少钱
  • 床垫可以开专票抵扣吗
  • 法定的盈余公积是什么
  • 企业所得税季度申报表怎么填
  • 增值税发票可以重开吗
  • 帝国cms破解授权
  • SQL Server 使用 SET FMTONLY ON 获得表的元数据
  • 个税显示退税成功但是没有收到钱
  • 应交税费的明细账怎么登记
  • 成本和入账价值
  • 增值税专票已经认证了还能退吗
  • 普通发票为什么只能领一张
  • 预收款开票后如何做账
  • 固定资产怎么入费用
  • 将购进的材料用于自制生产用设备
  • 银行扣结算卡年费合理吗
  • 员工在异地缴纳社保,公司还能上吗
  • 公司向股东个人借款
  • 流动负债占比低什么意思
  • 实缴发票和月结发票知乎
  • 年终建账于年初建账,在录入期初余额时有什么不一样?
  • 广告制作费属于现代服务吗
  • 会计各种凭证的填写示例
  • 如何学会计做账视频
  • 物流行业会计核算特征有哪些
  • ubuntu系统无法安装中文
  • win7旗舰版32位系统激活
  • archlinux安装教程2023 无线网络
  • 教你彻底消灭牛身上的蜱虫
  • win7系统打不开浏览器
  • ubuntu18.04没有声音
  • 电脑windows8怎么样
  • linux dfs
  • windows8如何共享打印机
  • WIN10系统崩溃如何自救?
  • win8任务栏在底部不显示
  • cocos2d-x起点之程序的入口
  • 从0开始
  • 收藏了很久的句子
  • opencv是干嘛用的
  • Unity3D游戏开发引擎
  • web页面展示
  • javascript数组操作方法
  • 使用scp获取远程linux服务器上的文件 linux远程拷贝文件
  • node.js网站
  • 国家税务总局发票查验平台网络异常
  • 个人所得税完税证明
  • 江苏医保给家人用怎么操作
  • 消费税,资源税,城市建设维护税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设