【JNI】javah命令详解

原创 2012年09月22日 18:46:37

   一,javah 用法

     javah命令主要用于在JNI开发的时,把java代码声明的JNI方法转化成C\C++头文件,以便进行JNI的C\C++端程序的开发。

   【注意】javah命令对Android编译生成的类文件并不能正常工作(??求验证??)如果对于Android的JNI要想生成C\C++头文件的话,可能只有先写个纯的java代码来进行JNI定义,接着用JDK编译,然后再用javah命令生成JNI的C\C++头文件。当然你也可以不用javah命令,直接手写JNI的C\C++头文件。

标准选项
        
       -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
 二,javac用法
         javac 工具读取用 Java 编程语言编写的类和接口定义,并将它们编译成字节码类文件。

标准选项

  -classpath 类路径
  设置用户类的路径,它会覆盖 CLASSPATH 环境变量中的用户类路径。若既未指定 CLASSPATH 又未指定 -classpath,则用户类路径由当前目录构成
  -d 目录
  设置输出类文件的位置。如果某个类是一个包的组成部分,则 javac 将把该类文件放入反映包名的子目录中,必要时创建目录。例如,如果指定 -d c:\myclasses 并且该类名叫 com.mypackage.MyClass,那么类文件就叫作 c:\myclasses\com\mypackage\MyClass.class。
  若未指定 -d 选项,则 javac 将把类文件放到与源文件相同的目录中。
  注意: -d 选项指定的目录不会被自动添加到用户类路径中。 
  -encoding
  设置源文件编码名称,例如 EUCJIS/SJIS。若未指定 -encoding 选项,则使用平台缺省的转换器。
  在windows dos环境下编译NetBeans建立的源文件需要加上参数 -encoding utf-8。
  -g
  生成所有的调试信息,包括局部变量。缺省情况下,只生成行号和源文件信息。
  -g:none
  不生成任何调试信息。
  -g:{关键字列表}
  只生成某些类型的调试信息,这些类型由逗号分隔的关键字列表所指定。有效的关键字有:
  source
  源文件调试信息
  lines
  行号调试信息
  vars
  局部变量调试信息
  -nowarn
  禁用警告信息。
  -O
  优化代码,缩短执行时间。使用 -O 选项可能使编译速度下降,生成更大的类文件并使程序难以调试。 
  -sourcepath 源路径
  指定用来查找类或接口定义的源代码路径。与用户类路径一样,多个源路径项用分号 “ ; ” 进行分隔,它们可以是目录、JAR 归档文件或 ZIP 归档文件。如果使用包,那么目录或归档文件中的本地路径名必须反映包名。(注意:通过类路径查找的类,如果找到了其源文件,则可能会自动被重新编译。)
  -verbose
  冗长输出。它包括了每个所加载的类和每个所编译的源文件的有关信息。
三,javah和javac       
        javah和javac命令相似,有两种方法可以指定需要javah命令把JNI方法转化成C\C++头文件的类文件名
       一种是直接给出要操作的类文件
       如果源文件数量少,可以用这种方式,在命令行上列出文件名即可。文件与文件之间用空格分开就可以了。
       另一种是通过@files的形式
       可以把要操作的java类文件名列在一个文件,文件名之间用空格或回车进行分割。然后在javah命令行中,
       可以用'@' 字符加上包含需要把JNI方法转化成C\C++头文件的类文件名的文件名来指定需要把哪些java类文件的JNI方法转化成C\C++头文件。
       因为javah当遇到以 `@' 字符,它就会把该字符后的文件所列出的所有java类文件的JNI方法转化为C\C++头文件。这种形式适用于java类文件很多的情况。
http://hubingforever.blog.163.com/blog/static/17104057920115218559186/














javah用法

javah命令详解   2011-06-21 20:55:09|  分类: JDK命令 |  标签:java命令   |字号大中小 订阅 http://...
  • zzhays
  • zzhays
  • 2013年08月29日 14:28
  • 15051

Mac Javah生成JNI头文件

在NDK开发中,我们最开始起步的时候会有四步来走。 一。新建Android程序工程。 二。生成.h头文件,编写.c文件。 三。编写mk文件,使用Cygwin编译出so文件。 四。加载so...
  • u011993368
  • u011993368
  • 2015年07月10日 15:50
  • 1807

Android 开发中如何用Javah命令生成JNI头文件

近段时间接触JNI,发现每个JNI头文件开头都有下面一段说明,大概的意思是这个头文件是自动生成的,不要修改。我就好奇这个文件是如何自动生成的,捣鼓的半天才弄明白。现在整理一下希望可以帮到大家。 /* ...
  • qq_37858386
  • qq_37858386
  • 2017年04月26日 18:39
  • 408

Eclipse中配置javah命令自动生成JNI头文件

首先要在CMD命令提示符下保证你输入的命令时可以生成头文件的 我用的命令格式是 D:\Test\jnitest javah -classpath /bin/classes;D:/android/sdk...
  • wshngyf
  • wshngyf
  • 2016年03月08日 23:32
  • 1697

javah、javap的用法

javah 类名  将java中的本地方法自动生成相应的头文件,在jni中实现头文件中的这些方法       java反编译:       javah “包、类” 首先先要编译我们的andr...
  • LuohanCC
  • LuohanCC
  • 2015年07月11日 00:25
  • 1043

JNI用javah命令生成头文件

以下代码在Android中JNI的使用之HelloWorld的基础上操作Android中JNI的使用之HelloWorld2.4在工程的src目录下,在dos窗口使用javah命令 后面跟 Ma...
  • qq_33689414
  • qq_33689414
  • 2016年02月27日 14:07
  • 4811

Ndk-->通过Javah生成.h头文件(Jni入门之路)

如果你还不了解什么是Jni, 移步: https://www.baidu.com/s?wd=jni 这里有更权威的介绍: http://docs.oracle.com/javase/7/docs/t...
  • angcyo
  • angcyo
  • 2016年06月05日 21:48
  • 3644

Android Studio的NDK开发之 用javah生成头文件

作为一个Android开发初学者,之前一直是用C++在写程序,最近需要开发一个APP,不得不开始学习java以及学习使用AS进行Android开发。 因为从C++转过来的,想省点力气从学习NDK开发入...
  • qq_27276035
  • qq_27276035
  • 2015年12月20日 19:48
  • 1367

javah 命令找不到类文件的解决方法(Android+Eclipse)

在Eclipse中使用C++编程时,需要通过JNI进行
  • sonyazj
  • sonyazj
  • 2014年04月17日 11:25
  • 1682

学习jni开发遇到的几个问题

有段时间没进行jni开发了,上次开发的环境更多的是同时帮忙搭建的。这次自己一点点搭建,遇到一些问题。记录下来 一、android project中加入jni目录后一定要convert to c/c++...
  • lantishua
  • lantishua
  • 2014年03月13日 18:25
  • 1503
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【JNI】javah命令详解
举报原因:
原因补充:

(最多只允许输入30个字)