javap 获取JNI方法签名

作者: 千浪 | 来源:发表于2020-06-16 13:03 被阅读0次

    JNI动态注册时需要方法签名,可以自己手写,但是出错的概率比较高,也可以使用javap命令自动生成。找到要获取签名的Java class文件,比方MainActivity.class,进入包名的上一级目录。执行以下命令:
    javap -s com.jianshu.qianlang.jnitutorial.MainActivity
    输出结果如下,其中descriptor便是动态注册时需要的方法签名:

    //...
      public native java.lang.String stringFromJNI();
        descriptor: ()Ljava/lang/String;
    //...
    

    附完整用法说明:

    用法: javap <options> <classes>
    其中, 可能的选项包括:
      -? -h --help -help               输出此帮助消息
      -version                         版本信息
      -v  -verbose                     输出附加信息
      -l                               输出行号和本地变量表
      -public                          仅显示公共类和成员
      -protected                       显示受保护的/公共类和成员
      -package                         显示程序包/受保护的/公共类
                                       和成员 (默认)
      -p  -private                     显示所有类和成员
      -c                               对代码进行反汇编
      -s                               输出内部类型签名
      -sysinfo                         显示正在处理的类的
                                       系统信息(路径、大小、日期、SHA-256 散列)
      -constants                       显示最终常量
      --module <模块>, -m <模块>       指定包含要反汇编的类的模块
      --module-path <路径>             指定查找应用程序模块的位置
      --system <jdk>                   指定查找系统模块的位置
      --class-path <路径>              指定查找用户类文件的位置
      -classpath <路径>                指定查找用户类文件的位置
      -cp <路径>                       指定查找用户类文件的位置
      -bootclasspath <路径>            覆盖引导类文件的位置
      --multi-release <version>        指定要在多发行版 JAR 文件中使用的版本
    
    GNU 样式的选项可使用 = (而非空白) 来分隔选项名称
    及其值。
    
    每个类可由其文件名, URL 或其
    全限定类名指定。示例:
       path/to/MyClass.class
       jar:file:///path/to/MyJar.jar!/mypkg/MyClass.class
       java.lang.Object
    
    

    本专题的其他内容

    - JavaVM 和 JNIEnv
    - javap 获取JNI方法签名
    - JNI静态注册和动态注册

    相关文章

      网友评论

        本文标题:javap 获取JNI方法签名

        本文链接:https://www.haomeiwen.com/subject/gnglxktx.html