2012-02-16 39 views
2

我花了幾個小時就沒有向前移動一英寸。我已經多次重做了這個項目,沒有其他的東西被留在場外。希望這裏的某個人能夠指出一些方向。Android NDK:Eclipse參數和javah

在Linux上的Eclipse IDE面板>運行>外部工具>外部工具配置:

Name: Dev javah 
Tab [main]: 
* location: /usr/java/jdk1.6.0_25/bin/javah 
* working directory: ${workspace_loc:/Dev/bin} 
* Arguments: ?? 

我曾嘗試:

* Arguments: -d ${workspace_loc:/Dev/jni} com.dev.DevActivity ${project_classpath:Dev} com.pkgpub.DevActivity 

這給了我:

1 error 
javadoc: error - Illegal package name: "/home/user/dev/Dev/bin/classes" 

,也嘗試過:

* Arguments: -d ${workspace_loc:/Dev/jni} com.dev.DevActivity 

這給了...

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

類似 -

* Arguments: -d ${workspace_loc:/Dev/jni} com.pkgpub.DevActivity 

這給了我:

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

但是當我運行:

which javah 
/usr/bin/which: no javah in (/usr/lib64/qt-3.3/bin:/usr/lib64/ccache:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/user/android-sdks/tools:/home/user/android-sdks/platform-tools:/opt/android/android-ndk-r7:/home/user/.local/bin:/home/user/bin:/home/user/android-sdks/tools:/home/user/android-sdks/platform-tools:/opt/android/android-ndk-r7:/home/user/android-sdks/tools:/home/user/android-sdks/platform-tools:/opt/android/android-ndk-r7) 

問題是......該項目沒有編譯,因爲javah對Eclipse NDK不可見,或者由於某些參數細節丟失了?在這種情況下,如何修復它?

謝謝。

回答

2

嘗試添加

-classpath bin/classes

作爲參數傳遞給JAVAH

+0

謝謝..是什麼意思? ... *參數:-d $ {workspace_loc:/ Dev/jni} com.dev.DevActivity $ {project_classpath:Dev/bin/classes} com.pkgpub.DevActivity .....因爲它不起作用。 – ThreaderSlash 2012-02-16 15:01:27

+0

只是要清楚,實際上我從linux控制檯運行javah。最後,我指定了兩個不同的參數--classpath和-bootclasspath。第一個說到javah在哪裏尋找你的java類第二個地方尋找java_sdk類(我作爲參數傳遞給android jar的路徑)。也許我誤解了你的問題。編輯:你改變了參數後錯誤仍然是相同的? – Blackbelt 2012-02-16 15:04:56

+0

執行參數... *參數:-d $ {workspace_loc:/ Dev/jni} com.dev.DevActivity $ {project_classpath:Dev/bin/classes} com.pkgpub.DevActivity ...錯誤更改爲://- 在「啓動Dev javah」期間發生內部錯誤。 項目路徑必須只有一個段。 // – ThreaderSlash 2012-02-16 15:10:48

0

@BlackBelt - 感謝的人您的建議!

這裏是工作,解決JAVAH側的編譯過程的參數:

-d ${workspace_loc:/Dev/jni} com.pkgpub.Dev -classpath ${workspace_loc:/Dev/bin/classes/} com.pkgpub.Dev 

哪裏pkgpub是軟件包名,和開發是項目的名稱。值得一提的是,該項目包含以下文件:\ src \ Dev.java; \ JNI \ Dev.c; \ JNI \ Dev.h; \ BIN ... \ pkgpub \ Dev.class。

現在它生成帶有正確內容的文件jni/com_pkgpub_Dev.h。太棒了!

但是,ndk-build仍然沒有完全鏈接,並且不會生成com_pkgpub_Dev.c文件。所以,從項目>項目生成 - 來了消息:

**** Build of configuration Build (GNU) for project Dev **** 
ndk-build 
make: *** No rule to make target `jni/com_pkgpub_Dev.c', needed by `obj/local/armeabi/objs/dev/com_pkgpub_Dev.o'. Stop. 
**** Build Finished **** 

從這個消息聽起來有些參數應該從文件/jni/Android.mk丟失:

LOCAL_PATH := $(call my-dir) 
include $(CLEAR_VARS) 
LOCAL_CFLAGS := -DHAVE_INTTYPES_H 
LOCAL_MODULE := dev 
LOCAL_SRC_FILES := com_pkgpub_Dev.c Dev.c 
include $(BUILD_SHARED_LIBRARY) 

爲了解決這,只需要創建缺少的文件「jni/com_pkgpub_Dev.c」。應根據文件「jni/com_pkgpub_Dev.h」中包含的自動生成代碼手動創建該文件內容。

現在,它的工作原理!

+0

歡迎您... ihmo bash is miles better – Blackbelt 2012-02-17 08:02:28

+1

參數:「 - d $ {workspace_loc:/ MyProject/jni} com.myproject.MyActivity -classpath $ {workspace_loc:/ MyProject/bin/classes}」Eclipse endups with this異常當我嘗試添加-classpath java.lang.IllegalArgumentException:不是一個有效的類名:-classpath – Maxim 2012-06-29 21:22:22

+0

它不工作,它給我一個錯誤。錯誤:無法訪問com.NDK.android_example2 com.NDK.android_example2的類文件未找到 javadoc:error - 找不到類com.NDK.android_example2。 – 2013-06-05 06:43:31

1

專爲Android:

使用類,如project_location/bin/classes倉之後,這個工作對我來說在Linux Fedora的

javah -d /var/www/project/jni/ -classpath /var/www/project/bin/classes/ com.android.TestClass