android - 在 Linux 上使用 javah

标签 android linux android-ndk java-native-interface javah

我有一个用于 JNI 的简单类,我需要将其导出到头文件 (.h)。

我读到我需要使用 javah 命令,方法是转到项目的 src 文件夹,然后键入:

javah -jni com.main_package.NativeClass 

在 Windows 上它工作正常,但在我的主操作系统 (Linux) 上它不能。它一直告诉它找不到类(class)。我已经尝试使用该命令的多种组合并在多种可能的路径上运行它,但它没有用。我遵循了许多教程和网站(包括此处)并尝试了它们的组合。

我什至尝试为此使用 Eclipse 的外部工具,如图所示 here , 但它也显示了同样的错误。

我得到的错误是这样的:

error: cannot access com.main_package.NativeClass 
class file for com.main_package.NativeClass  not found
javadoc: error - Class com.main_package.NativeClass  not found.
Error: No classes were specified on the command line.  Try -help.

谁能帮帮我?我真的很喜欢在 Linux 上工作,不想每次需要使用这个工具时都切换操作系统。


正确答案如下:

  1. 对于控制台,转到“bin/classes”文件夹并运行我使用的命令:

    javah -jni com.main_package.NativeClass

  2. 对于 eclipse,使用我提供的链接,但不要使用 ${project_loc}/bin/ 使用 ${project_loc}/bin/classes/,然后,在包资源管理器中,转到 NativeClass.java,并运行外部工具。输出将位于与 java 文件相同的路径中。

最佳答案

您不会转到项目的 src 文件夹,而是转到编译后的 .class 文件的根目录(其中存在 com 子文件夹或被创造)。 javah 正在寻找已编译的类,而不是您的源文件。如果您只是手动运行 javac,类文件将位于与原始源相同的位置。那么“转到 src 文件夹”这句话是正确的。然而,如果您在 Eclipse 中有一个项目或者您使用 ant 或其他东西,这些类可能位于完全不同的位置——取决于您的项目是如何设置的。我猜你的 Windows 和 Linux 上的 Eclipse 项目设置不同。

关于android - 在 Linux 上使用 javah,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11135720/

相关文章:

android - 测试对 Intent.ACTION_SEND 的调用

ruby - Ruby 中的命令行选项解析

android - 配置 : error: C compiler cannot create executables when configuring for Android

android - 在开始前将 Activity 设置为特定方向

java - Asynctask 并将数组列表传递给它给我错误

linux - 如何在与 unison 同步时排除 svn 元数据?

android - 如何修改 Android 交叉工具链的默认 lib 链接(不使用 libc++ 和 libm 进行链接)

android - Honeycomb 以下的 Android 不支持 Bytebuffer array() 方法

android - 在android的数组列表中添加项目

C:Windows 与 Linux 中的 strtok 和换行符