2014-02-09 7 views
3

Я пытаюсь использовать JNI для приложения Android, используя библиотеку OpenCV4Android. Я могу сгенерировать заголовочный файл без использования opencv-библиотеки, но получаю сообщение об ошибке, когда класс импортирует что-либо. Я предполагаю, что ему нужно связать с библиотекой, но я не уверен, как это сделать? Я использую cygwin на 64-разрядной машине Windows 8.1.Создание файла заголовка с помощью JNI с использованием «javah»

оригинальный выход:

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

После следующих советов от: Android, generate jni Header Files with javah , show error that can't find 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
  • добавление nativeRDE после 'icam /'
  • добавления nativeRDE.class после '/' ICAM

Спасибо за любую помощь.

+0

возможный дубликат [Android, генерировать JNI заголовков файлов с javah, показывают ошибки, которые не могут найти org.opencv.core.Mat] (HTTP: // stackov erflow.com/questions/13438368/android-generate-jni-header-files-with-javah-show-error-that-cant-find-org-o) –

+0

Я пробовал следовать советам из этой темы, но получил ошибки. Я должен был упомянуть об этом свой оригинальный пост, но теперь я его отредактировал. – user3019612

+0

Вы пробовали 'javah -classpath c: \ Users \ Majid \ Documents \ OpenCV4Android \ OpenCVLib2.4.8 \ bin \ classes \ org \ opencv; c: \ Users \ Majid \ Documents \ OpenCV4Android \ iCam \ bin \ classes \ com \ example \ icam -jni -d jni/com.example.icam.nativeRDE'? Или, может быть (у меня нет среды, готовой проверить), вы можете использовать косую черту ** (**) ** (**). Причина в том, что ** javah ** не является ** cygwin ** исполняемым, поэтому он не понимает '/ cygdrive'. Вы уже заметили, что вам нужен ** ";" ** разделитель в Windows, а не ** ":" ** как в [указанной теме] (http://stackoverflow.com/questions/13438368) –

ответ

5

Javah принимает полное имя класса и путь к классам. Имя класса должно быть с полным именем пакета.
Ex: fullPackageName.className

путь класса ваша ЦСИ папка не бен папку Ваш путь к классам должен быть c\Users\Majid\Documents\OpenCV4Android\iCam\src

Javah -jni -classpathC:\ProjectName\srccom.abc.YourClassName

3

Решение: Создание файла заголовка с JNI с помощью 'javah'

  ***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 

Первый Создайте свой проект перед запуском ниже команды

записи команды на coommand строке/Терминал для.ч создания файла

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

Пример команды с использованием указанных сведений для Command

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

+0

Я встречаюсь с той же проблемой, помогите мне PLZ [http://stackoverflow.com/questions/39261963/error-class-org-opencv-core-mat-could-not-be-found](http://stackoverflow.com/вопросы/39261963/ошибки класс орг-OpenCV-жильный мат-может-не-быть найдены) –

0

Вы даже можете выполнить джаву из затмения с помощью много простоты. Я попробовал эти следующие шаги, и они работают я сослался на ссылку ниже для решения http://www.lithiumhead.com/notes/windows_jni

Шаг за шагом руководство

  1. Start Eclipse. Предпочтительно создать новую рабочую область под названием WorkSpaceEclipseJNI
  2. В меню выберите Файл> Создать> Проект Java
  3. Введите имя проекта 01Java_HelloWorld
  4. Нажмите кнопку Далее>
  5. Нажмите кнопку Готово
  6. В проводнике пакетов расширения 01Java_HelloWorld
  7. Щелкните правой кнопкой мыши папку src и выберите Создать> Пакет
  8. Впишите имя как com.lithiumhead.jni
  9. Нажмите кнопку Готово
  10. В проводнике пакетов под 01Java_HelloWorld> ЦСИ правой кнопкой мыши 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. В меню выберите Run> External Tools> External Tools Конфигурации ...
  2. Выделите программ в списке в левой панели
  3. Нажмите кнопку Нового
  4. Введите имя, как javah - C заголовке и Окурок Генератор файлов
  5. Для поиска местоположения найдите javah.exe в папке JDK (будет что-то вроде C: \ Program Файлы \ Java \ jdk1.7.0 \ bin \ javah.ехе)
  6. Enter Working Directory, как: $ {project_loc}/bin/
  7. Введите аргументы в -jni $ {java_type_name}
  8. Нажмите Применить
  9. Переключитесь на вкладке Общие
  10. Установите флажок рядом с Внешние инструменты под дисплеем в меню избранного
  11. Нажми Применить
  12. Нажмите кнопку Закрыть
  13. Deselect построить Автоматически из меню проекта
  14. В проводнике пакетов правой кнопкой мыши и выберите 01Java_HelloWorld Build Project
  15. В проводнике пакетов выберите HelloWorld.java
  16. В меню выберите Run> External Tools> 1 javah - C Header и тупиковой Генератор файла (Это будет генерировать файл заголовка для кода C com_lithiumhead_jni_HelloWorld.h помещается в папку бен 01Java_HelloWorld проекта Java.)
Смежные вопросы