Re: [問題] NDK的helloworld
※ 引述《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
06/01 00:26, 1F
→
06/01 00:26, , 2F
06/01 00:26, 2F
推
06/01 12:41, , 3F
06/01 12:41, 3F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 4 篇):