用javah 导出类的头文件, 常见的错误及正确的使用方法

摘要:
********************************************************************************用javah导出类的头文件,常见的错误及正确的使用方法********************************************************************************正确的使用方法是:1.类名要使用全路径类名,不带扩展名2.自己要处于合适的目录,3.正确设置工作类路径4.正确设定系统类路经。--------------------------------------------------------------------------------commentbyhjj:类名称要用点分割的全称--------------------------------------------------------------------------------D:ufferhellojniHelloJNIinclassesesthellojni˃javahtest.hellojni.HelloJNIActivity错误:找不到'test.hellojni.HelloJNIActivity'的类文件。
********************************************************************************
用javah 导出类的头文件, 常见的错误及正确的使用方法
********************************************************************************
正确的使用方法是:
1. 类名要使用全路径类名,不带扩展名
2. 自己要处于合适的目录,
3. 正确设置工作类路径
4. 正确设定系统类路经。

********************************************************************************

前言: 在 D:ufferhellojniHelloJNIinclasses esthellojni> 下, 有一个class 文件叫HelloJNIActivity.class目标文件

现在欲从这个class 文件导出类的头文件。

下面是常见的错误。 (我碰到的错误)
D:ufferhellojniHelloJNIinclasses esthellojni>javah HelloJNIActivity.class
Exception in thread "main" java.lang.IllegalArgumentException: Not a valid class name: HelloJNIActivity.class
at com.sun.tools.javac.api.JavacTool.getTask(JavacTool.java:177)
at com.sun.tools.javac.api.JavacTool.getTask(JavacTool.java:68)
at com.sun.tools.javah.JavahTask.run(JavahTask.java:509)
at com.sun.tools.javah.JavahTask.run(JavahTask.java:335)
at com.sun.tools.javah.Main.main(Main.java:46)
--------------------------------------------------------------------------------
comment by hjj: 不能指明扩展名.class
--------------------------------------------------------------------------------

D:ufferhellojniHelloJNIinclasses esthellojni>javah HelloJNIActivity
错误: 找不到 'HelloJNIActivity' 的类文件。
--------------------------------------------------------------------------------
comment by hjj: 类名称要用点分割的全称
--------------------------------------------------------------------------------

D:ufferhellojniHelloJNIinclasses esthellojni>javah test.hellojni.HelloJNIActivity
错误: 找不到 'test.hellojni.HelloJNIActivity' 的类文件。
--------------------------------------------------------------------------------
comment by hjj: 用全称,要与本地目录相配合
--------------------------------------------------------------------------------

D:ufferhellojniHelloJNIinclasses>javah test.hellojni.HelloJNIActivity
错误:无法访问android.app.Activity
找不到android.app.Activity的类文件
--------------------------------------------------------------------------------
comment by hjj: 很好! 找到了类文件, 但无法解析系统库文件
--------------------------------------------------------------------------------


D:ufferhellojniHelloJNIinclasses>javah test.hello.jni.HelloJNIActivity -classpath
'c:program filesAndroidandroid-sdkplatformsandr oid-16android.jar'
Exception in thread "main" java.lang.IllegalArgumentException: Not a valid class name: -classpath
at com.sun.tools.javac.api.JavacTool.getTask(JavacTool.java:177)
at com.sun.tools.javac.api.JavacTool.getTask(JavacTool.java:68)
at com.sun.tools.javah.JavahTask.run(JavahTask.java:509)
at com.sun.tools.javah.JavahTask.run(JavahTask.java:335)
at com.sun.tools.javah.Main.main(Main.java:46)
--------------------------------------------------------------------------------
comment by hjj: 路径不能放到后面
--------------------------------------------------------------------------------

D:ufferhellojniHelloJNIinclasses>javah -classpath
'c:program filesAndroidandroid-sdkplatformsandroid-16android.jar'
test.hellojn i.HelloJNIActivity Exception in thread "main" java.lang.IllegalArgumentException:
Not a valid class name: filesAndroidandroid-sdkplatformsandroid-16android.jar'
at com.sun.tools.javac.api.JavacTool.getTask(JavacTool.java:177)
at com.sun.tools.javac.api.JavacTool.getTask(JavacTool.java:68)
at com.sun.tools.javah.JavahTask.run(JavahTask.java:509)
at com.sun.tools.javah.JavahTask.run(JavahTask.java:335)
at com.sun.tools.javah.Main.main(Main.java:46)
--------------------------------------------------------------------------------
comment by hjj: 含空格的路径不能用单引号,而应该用双引号括住
--------------------------------------------------------------------------------

D:ufferhellojniHelloJNIinclasses>javah -classpath
"c:program filesAndroidandroid-sdkplatformsandroid-16android.jar" test.hellojni.HelloJNIActivity
错误: 找不到 'test.hellojni.HelloJNIActivity' 的类文件。
--------------------------------------------------------------------------------
comment by hjj: 类路径除需指明系统类路径,还需要指明工作路径。工作路径要与类全称相配合
--------------------------------------------------------------------------------
D:ufferhellojniHelloJNIinclasses esthellojni>cd ../../
D:ufferhellojniHelloJNIinclasses>cd ..
D:ufferhellojniHelloJNIin>cd ..

D:ufferhellojniHelloJNI>javah -classpath
"c:program filesAndroidandroid-sdkplatformsandroid-16android.jar";bin/classes
test.hellojni.HelloJNIActivity
--------------------------------------------------------------------------------
comment by hjj: 成功
在当前目录:D:ufferhellojniHelloJNI 生成 test_hellojni_HelloJNIActivity.h
--------------------------------------------------------------------------------
D:ufferhellojniHelloJNI> cd binclasses
D:ufferhellojniHelloJNIinclasses>javah -classpath
"c:program filesAndroidandroid-sdkplatformsandroid-16android.jar";. test.helljni.HelloJNIActivity
--------------------------------------------------------------------------------
comment by hjj: 成功
在当前目录:D:ufferhellojniHelloJNIinclasses 生成 test_hellojni_HelloJNIActivity.h

免责声明:文章转载自《用javah 导出类的头文件, 常见的错误及正确的使用方法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇新手如何免费使用AWSDocker 部署Confluence15.2下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

Java生鲜电商平台-优惠券系统设计详解

Java Fresh Food电子商务平台-优惠券系统的设计详细说明了优惠券的名称、面额、类型、有效期、使用范围、相互排斥以及作为电子商务最常用的营销手段的平台。用户在收到优惠券之前不知道优惠券的面值和使用限额,但只有在收到之后才知道优惠券的面额和使用限额。用户可在收到优惠券后3天内使用;商户A发放的优惠券只能在购买商户A的商品时使用,一台设备只能使用一张新...

网页分页数据的三种抓取方式

目前,只有两种方法可以捕获其他网站的数据:我一开始尝试用第三方工具捕获所需的数据。现在我将介绍以三种形式捕获分页数据的方法。此方法通过循环生成数据分页的URL地址,例如:}上面的代码可以返回相应页面的html内容字符串,其分页控件通过post模式将分页信息提交给后台代码。当您将鼠标移到每个页码上时,状态栏将显示javascript:...

ElasticSearch的高级复杂查询:非聚合查询和聚合查询

它与SQL中的GROUPBY类似,但功能更强大。为了更好地理解这个概念,请参阅https://blog.csdn.net/dm_vincent/article/details/42387161Buckets(Bucket):满足特定条件的文档集合。度量:为存储桶中的文档计算的统计信息。一般来说,它可以大致转换为SQL:从tablegroupbyname中选择...

C#Win32API编程之PostMessage

本文以C#调用Win32API函数PostMessage完成指定表单的后台鼠标和键盘模拟为例,大致解释了C#调用非托管代码和Window的消息处理机制。我们可以将PostMessage用于函数。成功与否在很大程度上取决于我们传达的信息是否真实。消息表明消息是什么。请原谅我先讲故事。我希望先解释一下PostMessage函数。这是一个异步操作,如下图所示:调用...

转:(WIN)S04-CH01 PCIE XDMA开发环境搭建以及环路测试

XDMAIP使用部分教程分LINUX篇和WINDOWS篇两个部分。通过实战,面向应用,提供给大家XILINXFPGAPCIE应用解决方案。本教程以MK7160FA作为样机测试。这是一款高性价比的FPGA开发板。而M_AXI_LITE挂载的BRAM是需要进行BAR空间操作,所以地址设置为0x80000000...

nginx重启

方法二:在启动命令-c前加-t2、重启Nginx服务方法一:进入nginx可执行目录sbin下,输入命令./nginx-sreload即可方法二:查找当前nginx进程号,然后输入命令:kill-HUP进程号实现重启nginx服务...