作者qrtt1 (有些事,有时候。。。)
看板AndroidDev
标题Re: [问题] NDK的helloworld
时间Thu May 31 23:05:54 2012
※ 引述《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
1F:推 shietsd:NDK内的Hellojni 我照着跑没有任何问题 06/01 00:26
2F:→ shietsd:原PO应该比对自己写的跟sample差异即可 06/01 00:26
3F:推 serflygod:太感谢各位了,我跑出来了 06/01 12:41