Kotlin 替代 javah

2022-09-03 07:29:11

javah 自 JDK 8 以来已被弃用,并且在 JDK 10 中将被删除,并且根据 JEP 313 和弃用文本,应使用标志来代替:javac-h

警告:该工具计划在下一个主要 JDK 版本中删除。该工具已被 JDK 8 中添加的“-h”选项所取代。建议用户迁移到使用“-h”选项;有关更多信息,请参见 javac 手册页。javahjavacjavac

问题是,对编译的文件进行操作,而对源文件(即 文件。javah.classjavac.java

javah与Kotlin和外部函数一起工作很好,因为所有内容最终都被编译为Java字节码,但是由于使用Kotlin时没有任何Java源文件,因此我看不到任何方法可以工作。javac -h

是否有 Kotlin 的替代方法或解决方法?javah


答案 1

我推荐gjavap
将来,我还将实现一个更易于使用的命令行工具,该工具提供与javap类似的功能。


答案 2

目前没有内置的方法来执行此操作。在 2019 年 11 月提出的 Kotlin 问题跟踪器上存在一个未解决的问题,但截至目前,它尚未确定优先级,也没有目标版本。

使用 JDK 10+ 生成标头的唯一方法是使用 ,它仅适用于 Java 源代码,而不适用于 Kotlin。我在如何解决Java 10中丢失的javah中测试了该方法 - 由Oo.oO链接的丑陋方式,它现在作为解决方法。步骤如下:javac -h

  1. 用于将字节码反编译回 Javajavap
  2. 编辑反编译的 Java 以使其适合生成头文件(将文件减少到仅方法定义)。native
  3. 运行反编译的 Java 代码以生成标头javac -h

我正在考虑写一个gradle脚本来做到这一点(或者希望别人打败我!如果我设法完成它,我会更新这篇文章。


推荐