3

我正在尝试将 JNI 用于使用 OpenCV4Android 库的 Android 应用程序。我可以在不使用 opencv 库的情况下生成头文件,但是每当类导入任何内容时都会出错。我认为它需要链接到图书馆,但我不知道该怎么做?我在 Windows 8.1 64 位机器上使用 cygwin。

原始输出:

$ javah -jni -classpath ./bin/classes -d jni/ com.example.icam.nativeRDE  
Error: Class org.opencv.core.Mat could not be found.

在以下建议之后:Android,使用 javah 生成 jni 头文件,显示找不到 org.opencv.core.Mat 的错误,我得到以下输出:

$ javah -classpath /cygdrive/c/Users/Majid/Documents/OpenCV4Android/OpenCVLib2.4.8/bin/classes/org/opencv/;/cygdrive/c/Users/Majid/Documents/OpenCV4Android/iCam/bin/classes/com/example/icam/ -jni -d jni/ com.example.icam.nativeRDE
Error: no classes specified
-bash: /cygdrive/c/Users/Majid/Documents/OpenCV4Android/iCam/bin/classes/com/example/icam/: is a directory

我试过了:

  • 在 icam 之后删除 '/'
  • 在“icam/”之后添加 nativeRDE
  • 在“icam/”之后添加 nativeRDE.class

谢谢你的帮助。

4

3 回答 3

5

Javah 采用完全限定的类名和类路径。类名必须是完整的包名。
前任:fullPackageName.className

类路径是您的 src 文件夹而不是 bin 文件夹您的类路径必须是c\Users\Majid\Documents\OpenCV4Android\iCam\src

Javah -jni -classpath C:\ProjectName\src com.abc.YourClassName

于 2014-08-14T14:50:03.367 回答
5

解决方案:使用 'javah' 使用 JNI 生成头文件

         ***I am using Window 10 and Android Studio 2.1.2.***

假设 APP(JNIP 我的应用名称)位置是

      E:\test\JNIP and you wrote native methods in JniExample.java file

JDK 位置是

   C:\Program Files\Java\jdk1.8.0_51\bin> 

JNI 文件夹位置是

    E:\test\JNIP\app\src\main\JNI (where, you want to create header file)

上课地点是

 E:\test\JNIP\app\build\intermediates\classes\debug\com\example\mpankaj\jnip\JniExample.java

Android.jar 位置是

C:/Users/mpankaj/AppData/Local/Android/Sdk/platforms/android-23/android.jar

首先在运行以下命令之前构建您的项目

在命令提示符/终端上写入命令以创建 .h 文件

javah -d (JNI Folder Location) -classpath (JAR Locaion);(class Location)

使用上述详细信息的示例命令

   C:/Program Files/Java/jdk1.8.0_51/bin>javah -d E:/test/JNIP/app/src/main/JNI -classpath C:/Users/mpankaj/AppData/Local/Android/Sdk/platforms/android-23/android.jar;E:\test\JNIP\app\build\intermediates\classes\debug com.example.mpankaj.jnip.JniExample 

在此之后,您将获得 .h 文件,如com_example_mpankaj_jnip_JniExample.h

于 2016-08-31T10:32:09.580 回答
0

您甚至可以非常简单地从 Eclipse 中执行 javah。我尝试了以下这些步骤并且它们正在工作我参考了以下链接以获取解决方案http://www.lithiumhead.com/notes/windows_jni

分步指南

  1. 启动 Eclipse。最好创建一个名为 WorkSpaceEclipseJNI 的新工作区
  2. 从菜单中选择文件>新建>Java 项目
  3. 输入项目名称为 01Java_HelloWorld
  4. 点击下一步 >
  5. 点击完成
  6. 在 Package Explorer 中展开 01Java_HelloWorld
  7. 右键单击 src 文件夹并选择 New>Package
  8. 输入名称为 com.lithiumhead.jni
  9. 点击完成
  10. 在 Package Explorer 下的 01Java_HelloWorld > src 右键单击​​ com.lithiumhead.jni 并选择 New>Class
  11. 输入名称为 HelloWorld
  12. 点击完成
  13. 将以下代码粘贴到

HelloWorld.java

package com.lithiumhead.jni;

class HelloWorld {
 public native void sayHello();

 static {
  System.loadLibrary("HelloWorld");
}

 public static void main(String[] args) {
  HelloWorld h = new HelloWorld();
  h.sayHello();
}

}

  1. 从菜单中选择运行>外部工具>外部工具配置...</li>
  2. 在左侧窗格的列表中突出显示程序
  3. 按新建按钮
  4. 输入名称为 javah - C 头文件和存根文件生成器
  5. 对于 Location 浏览找到 JDK 安装文件夹中的 javah.exe(类似于 C:\Program Files\Java\jdk1.7.0\bin\javah.exe)
  6. 输入工作目录为:${project_loc}/bin/
  7. 输入参数为 -jni ${java_type_name}
  8. 单击应用
  9. 切换到常用选项卡
  10. 选中收藏夹菜单中显示下的外部工具旁边的复选框
  11. 单击应用
  12. 点击关闭
  13. 从项目菜单中取消选择自动构建
  14. 在 Package Explorer 中右键单击 01Java_HelloWorld 并选择 Build Project
  15. 在 Package Explorer 中突出显示 HelloWorld.java
  16. 从菜单中选择 Run>External Tools>1 javah - C Header and Stub File Generator(这将为 C 代码 com_lithiumhead_jni_HelloWorld.h 生成头文件,该文件位于 01Java_HelloWorld Java 项目的 bin 文件夹中。)
于 2017-12-15T06:38:25.427 回答