首页 > 编程知识 正文

jdk使用教程,javah

时间:2023-05-03 08:42:42 阅读:38854 作者:1293

JNI/NDK入门指南中的javah和javap使用和集成安卓JNI/NDK入门指南目录

了解JNI/NDK入门指南的正确姿势JNI和NDK

JNI/NDK入门指南中的JavaVM和JNIEnv

JNI/NDK入门指南中的JNI数据类型、描述符详细信息

JNI/NDK入门指南中的jobject和jclass

使用和集成JNI/NDK入门指南中的javah和javap

JNI/NDK入门指南的Eclipse集成使用NDK开发环境

JNI/NDK入门指南的JNI动/静态注册全分析

JNI/NDK入门指南中的JNI字符串处理

JNI/NDK入门指南中的JNI访问数组

JNI/NDK入门指南中的C/C通过JNI访问Java实例属性和类静态属性

JNI/NDK入门指南中的C/C通过JNI访问Java实例方法和类静态方法

JNI/NDK入门指南中的JNI异常处理

JNI/NDK入门指南中的JNI多线程回调Java方法

参照JNI/NDK入门指南的正确姿势理解、使用、管理、缓存JNI

JNI/NDK入门指南中的调用Java构造方法和父类实例方法

JNI/NDK入门指南的C/C结构体和Java对象转换方式1

JNI/NDK入门指南的C/C结构体和Java对象转换方式2

在前一章的JNI/NDK开发指南的JNI数据类型、描述符详细解中,详细说明了数据类型、描述符等相关概念。 刚开始接触JNI的话,读者看到这些概念就会变得无知。 哇,JNI的边缘为什么要开发这么多值得记忆的概念、描述符、数据类型和签名? 其实JDK的开发工具为我们提供了一些快速的工具,比如javah和javap,这两个工具都是在JDK较慢的中央目录下提供的命令。 通过学习使用和集成这些命令工具,还可以为动态注册和静态注册JNI奠定基础,如下所述。

1 .详细说明一下Java,在进行JNI开发的时候,我们写了Java端的代码。 此时,必须写JNI端的代码。 此时,无论是动态注册还是静态注册,都与Native函数的签名等问题有关。 此时,我们可以使用javah的工具。 JavaH将在一个简单的情况下介绍如何搜索此类中的所有Native方法,并生成c方法使用JavaH生成jni头文件。

1.javah命令概述在前一章中,我们知道javah是JDK开发工具附带的命令。 我想能看到这里的读者一定构成了java的开发编译环境。 否则,你也不会学习使用JNI。 打开终端并输入javah后,有关javah命令的参数将如下所示,非常简单

javah用法: javah [options] classes其中,[options] 在只能使用:-o文件输出文件-d或-o之一的-d dir输出目录-v -verbose中启用高级输出-h --help -此消息的输出-version输出版本信息-d dir 写入文件-classpath path是加载类的路径-cp path是加载类的路径-bootclasspath path是加载引导类的路径classes是完全限定的名称()

2 .使用2.javah使用案例http://www.Sina.com/.eclipse创建Android项目。 在这里,我们很容易就创建了安卓项目安卓2朴素。 项目的绝对路径位于e3360WorkSpaceAndroid2中的comxxxjni路径下(路径对于后续的javah编译很重要),此时的Java文件为JNI.java

package com.xxx.jni; 公共类JNI { publicnativevoidfun (; //native方法public native static void fun1(; //native方法}编译}http://www.Sina.com/.jni.Java文件,路径e :workspaceAndroid2native 缓慢中心content

1.使用javah指令编译JNI.class文件,并为Java与C/C之间的通信生成规则的接口头文件。 它规定了Java中本机方法在C/C上的具体接口。 运行cmd

后,进入于E:workspaceAndroid2Native路径下,使用javah指令,指令命令的格式如下:

//-d .h文件输出目录(输出到Android工程JNI文件所在目录)//-jni java文件包名javah -d jni -classpath src -jni com.xxx.jni.JNI

此时在下生成了一个com_xxx_jni_JNI.h,如下所示:

4.查看生成头文件内容

/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class com_xxx_jni_JNI */#ifndef _Included_com_xxx_jni_JNI#define _Included_com_xxx_jni_JNI#ifdef __cplusplusextern "C" {#endif/* * Class: com_xxx_jni_JNI * Method: fun * Signature: ()V */JNIEXPORT void JNICALL Java_com_xxx_jni_JNI_fun (JNIEnv *, jobject);/* * Class: com_xxx_jni_JNI * Method: fun1 * Signature: ()V */JNIEXPORT void JNICALL Java_com_xxx_jni_JNI_fun1 (JNIEnv *, jclass);#ifdef __cplusplus}#endif#endif

二.细说javap

前面的章节讲解了javah的作用用途,那么javap是拿来干什么的?jdk自带的一个反编译工具,也可以查看java编译器生成的字节码,在此我们只利用他查看Java方法签名,这个在JNI中的动态注册中使用比较多。新手开发的时候建议手写,熟悉相关Java函数的签名。


1.javap命令简介

通过前面的章节,我们知道javap是JDK开发工具自带的一个命令,我想能看到此处的读者一定是配置好了java的开发编译环境了,不然也不会学习JNI的使用。打开终端,然后输入javap可以看到javap命令的相关参数如下,比较简单

λ javap用法: javap <options> <classes>其中, 可能的选项包括: -help --help -? 输出此用法消息 -version 版本信息 -v -verbose 输出附加信息 -l 输出行号和本地变量表 -public 仅显示公共类和成员 -protected 显示受保护的/公共类和成员 -package 显示程序包/受保护的/公共类 和成员 (默认) -p -private 显示所有类和成员 -c 对代码进行反汇编 -s 输出内部类型签名 -sysinfo 显示正在处理的类的 系统信息 (路径, 大小, 日期, MD5 散列) -constants 显示最终常量 -classpath <path> 指定查找用户类文件的位置 -cp <path> 指定查找用户类文件的位置 -bootclasspath <path> 覆盖引导类文件的位置

2.javap命令使用实例

1.继续使用前面的JNI.java文件为例来说明简单使用,此时的文件如下:

package com.xxx.jni;public class JNI { public native void fun(); public native static void fun1();}

2.编译JNI.java文件,生成JNI.class文件,位于路径E:workspaceAndroid2Native缓慢的中心classescomxxxjniJNI.class。

3.使用javah指令编译JNI.class文件,生成该类中方法的相关签名信息。进入E:workspaceAndroid2Native缓慢的中心classescomxxxjni,执行如下指令格式,见证奇迹的时刻到了,生成了相关的签名信息。

λ javap -s JNI.classCompiled from "JNI.java"public class com.xxx.jni.JNI { public com.xxx.jni.JNI(); descriptor: ()V public native void fun(); descriptor: ()V public static native void fun1(); descriptor: ()V}

三.Eclipse集成javap和javah环境

虽然现在Android studio非常流行,但是由于JNI开发一般是在Android Rom开发环境中用的比较多,所以本人还是喜欢使用Eclipse环境,并且同时Android studio太占内存了,所以我用得不是很多。这里我用Android stuido比较少,并不是开发工具不好,如果单纯做应用开发Android stuido还是非常好的。


1.javap的集成

1.打开Eclipse,进入如下界面的选项的Externl Tool Configurations选项。

2.进入Externl Tool Configurations面板选项以后,进行如下截图的相关配置

其中Location填入本机jdk环境中的javap.exe的具体位置,Working Directory填入"${project_loc}src",然后在Arguments中填入“-s -classpath ${project_loc}缓慢的中心classes ${java_type_name}”。

3 然后在Eclipse定位到刚才的JNI.java文件中,然后执行下图所示操作

在Console面版中显示相关的签名信息


2.javah的集成

1.该集成方法和前面的javap类似,就不过多的讲解了。具体的配置如下所示:

2.执行javah命令,生成JNI.java本地方法对应的头文件,如下截图所示:

可以看到在jni文件中生成了对应的头文件。



写在最后

  好了,JNI/NDK开发指南之javah和javap的使用和集成已经写完了,相关的知识点各位读者都get到了吗。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。