2014-10-09 1 views
1

Сославшись ->Javah error while using it in JNIJavah до сих пор не находит файлы классов в OSX/Android Studio

... и ->android - javah doesn't find my class

... Я до сих пор не могу получить javah к Работа. В частности ...

Мой класс Java находится здесь:

/Users/HKS/Code/MusicPlayer-Android/dspLibrary/src/main/java/com/company/audio/LibDSP.java` 

Из этой папки ...

/Users/HKS/Code/MusicPlayer-Android/dspLibrary/src/main/java/` 

... Я попытался запустить ...

javah com.company.audio.LibDSP 
javah -classpath . com.company.audio.LibDSP 
javah -classpath /Applications/Android\ Studio.app/sdk/platforms/android-16/android.jar:. -jni com.company.audio.LibDSP 

... Я также пробовал это из папки, содержащей файл .java ...

javah LibDSP 
javah -classpath . LibDSP 

Все дают обычные ...

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

Есть идеи?

Непредвиденные многословные журналы показать что-то странное в пути поиска ...

[ Search Path: /System/Library/Java/JavaVirtualMachines....../Contents/Classes/charsets.jar//Applications/Android Studio.app/sdk/platforms/android-16/android.jar:. ] 

Обратите внимание, как кажется, нет Сепаратор для тех, добавленных с -classpath. Я пробовал заранее «:», и это не имеет значения. Я предполагаю, что это ошибка в подробном выводе, а не в основной функциональности.

ответ

4

Получил это! Ему нужен скомпилированный класс, а не источник. Кроме того, папка класса - ./build/intermediates/classes/debug скрыта от проекта в Android Studio.

Это линия, которая, наконец, работала для меня. Из корневой папки моего модуля (/Users/HKS/Code/MusicPlayer-Android/dspLibrary/):

javah -classpath /Applications/Android\ Studio.app/sdk/platforms/android-16/android.jar:./build/intermediates/classes/debug -jni -d src/main/jni -force com.company.audio.LibDSP 

Обратите внимание на -d флаг папка вывода, и -force гарантирует, что он перезаписывает существующие файлы.