javap 获取JNI方法签名

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  
其中, 可能的选项包括:
  -? -h --help -help               输出此帮助消息
  -version                         版本信息
  -v  -verbose                     输出附加信息
  -l                               输出行号和本地变量表
  -public                          仅显示公共类和成员
  -protected                       显示受保护的/公共类和成员
  -package                         显示程序包/受保护的/公共类
                                   和成员 (默认)
  -p  -private                     显示所有类和成员
  -c                               对代码进行反汇编
  -s                               输出内部类型签名
  -sysinfo                         显示正在处理的类的
                                   系统信息(路径、大小、日期、SHA-256 散列)
  -constants                       显示最终常量
  --module <模块>, -m <模块>       指定包含要反汇编的类的模块
  --module-path <路径>             指定查找应用程序模块的位置
  --system                    指定查找系统模块的位置
  --class-path <路径>              指定查找用户类文件的位置
  -classpath <路径>                指定查找用户类文件的位置
  -cp <路径>                       指定查找用户类文件的位置
  -bootclasspath <路径>            覆盖引导类文件的位置
  --multi-release         指定要在多发行版 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方法签名)