Re: [問題] NDK的helloworld

看板AndroidDev作者 (有些事,有時候。。。)時間12年前 (2012/05/31 23:05), 編輯推噓2(201)
留言3則, 2人參與, 最新討論串3/4 (看更多)
※ 引述《serflygod (serflygod)》之銘言: : 各位你們好 : 我初次碰NDK,新手第一次當然跑helloworld : 但一直碰壁無法成功 : 希望各位幫助一下 : ※有先在cygwin執行過ndk-build,生出so檔 : hello-jni.h檔: : http://i.imgur.com/y9Xsb.jpg
: hello-jni.c檔: : http://i.imgur.com/flVFJ.jpg
: HelloJni.java檔: : http://i.imgur.com/WyMeU.jpg
: 檔案結構: : http://i.imgur.com/QxPyK.jpg
: Android.mk檔: : http://i.imgur.com/KYOuH.jpg
: 出現的錯誤訊息: : http://i.imgur.com/obSSg.jpg
: 主要問題就是聯結不到"stringFromJNI" : 但我已經用靜態的方法把它們連在一起了啊Q_Q : 弄了整整兩天了 : 還是找不到問題所在 : 另外eclipse一直說我的#include <檔案.h> unresolved inclusion : header檔裡面則是 : JNIEXPORT jstring JNICALL com_example_hellojni_HelloJni_stringFromJNI(JNIEnv : *, jobject); : 一直出現syntax error : 我查網路試了很多方法還是解決不了 : 像是這幾篇: : http://pyleaf.iteye.com/blog/1408043 : (裡面提到的解決方法:C/C++ General -> Paths and Symbols : 但我沒C/C++這選項) : http://hi.baidu.com/otss/blog/item/911cb762cb1fe6c8e6113a7a.html : (裡面提到右键你的工程-->C/C++ Build-->Discovery Options-->(找到)Discovery : profile: (选择)GCC per project scanner info profile) : 但我右鍵我的project,也是沒有找到c/C++的選項...*_* : 我的project右鍵會出現的選項: : http://i.imgur.com/dCv5J.jpg
: 在想是不是我創造project選錯選項 : 但我也是跟著別人的教程走的啊OTZ 已經很多版友跟你說了 c function 名字不對啦。 我這只是稍為補充一下,對這篇教學的看法。 他有提到東西要用 javah 產生,又寫上產生的規則。。。 若是我寫教學的話,我連規則都不會想提, 因為自己依規則去填是很容易填錯的。 它的教材的內容看起來眼熟,原來就是 ndk 內的 sample: qty:hello-jni qrtt1$ tree . ├── AndroidManifest.xml ├── bin │ ├── HelloJni-debug-unaligned.apk │ ├── HelloJni-debug.apk │ ├── HelloJni.ap_ │ ├── classes │ │ └── com │ │ └── example │ │ └── hellojni │ │ ├── HelloJni.class │ │ ├── R$attr.class │ │ ├── R$string.class │ │ └── R.class │ └── classes.dex ├── build.xml ├── default.properties ├── gen │ └── com │ └── example │ └── hellojni │ └── R.java ├── jni │ ├── Android.mk │ └── hello-jni.c ├── libs │ └── armeabi │ ├── gdb.setup │ ├── gdbserver │ └── libhello-jni.so ├── local.properties ├── obj │ └── local │ └── armeabi │ ├── libhello-jni.so │ └── objs-debug │ └── hello-jni │ ├── hello-jni.o │ └── hello-jni.o.d ├── proguard.cfg ├── res │ └── values │ └── strings.xml ├── src │ └── com │ └── example │ └── hellojni │ └── HelloJni.java └── tests ├── AndroidManifest.xml ├── default.properties └── src └── com └── example └── HelloJni └── HelloJniTest.java 28 directories, 27 files 反正 IDE 都幫你產生好 class 了。那就呼叫一下 javah 嚕。 qty:hello-jni qrtt1$ javah -jni -classpath bin/classes com.example.hellojni.HelloJni 產生完後,會有一個檔名不太好看的 header,你再改成你喜歡的。 重點是用它產生出來的 function name 就不會錯了,只要貼上到 .c 就 OK qty:hello-jni qrtt1$ cat com_example_hellojni_HelloJni.h /* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class com_example_hellojni_HelloJni */ #ifndef _Included_com_example_hellojni_HelloJni #define _Included_com_example_hellojni_HelloJni #ifdef __cplusplus extern "C" { #endif /* * Class: com_example_hellojni_HelloJni * Method: stringFromJNI * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_example_hellojni_HelloJni_stringFromJNI (JNIEnv *, jobject); /* * Class: com_example_hellojni_HelloJni * Method: unimplementedStringFromJNI * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_example_hellojni_HelloJni_unimplementedStringFromJNI (JNIEnv *, jobject); #ifdef __cplusplus } #endif #endif -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.43.119.235

06/01 00:26, , 1F
NDK內的Hellojni 我照著跑沒有任何問題
06/01 00:26, 1F

06/01 00:26, , 2F
原PO應該比對自己寫的跟sample差異即可
06/01 00:26, 2F

06/01 12:41, , 3F
太感謝各位了,我跑出來了
06/01 12:41, 3F
文章代碼(AID): #1FnuZKIt (AndroidDev)
討論串 (同標題文章)
文章代碼(AID): #1FnuZKIt (AndroidDev)