我是Android新手,正在尝试创建一个简单的SDK + NDK概念。我跟着下面的步骤:Android:生成.so文件时出错
- 下载NDK
- 提取zip文件
- 创建新的Android项目。
- 在项目下创建新文件夹jni。
- 根据需要定义UI。
- 创建一个java文件来调用所有的本地方法。用“本机”前缀声明所有这些方法。使用
system.loadLibrary("")
有静态块加载库。 - 使用
javah -jni filename
- 创建相应的头文件将生成的filename.h文件移至jni文件夹。
- 编写包含.h文件的c文件,并在.h文件中实现这些方法并保存它。
创建MK文件,具有下列内容:
LOCAL_PATH:= $(叫我-DIR)
包括$(CLEAR_VARS)
LOCAL_MODULE:=
LOCAL_SRC_FILES:= .C
包括$( BUILD_SHARED_LIBRARY)- 转到命令提示符项目文件夹
- 给
<ndkfolder>/ndk-build
- .so文件,将产生
但我被困在“12”点,出现以下错误:
**"Compile thumb : com_cts_c2dmclient_NativeLib <= com_cts_c2dmclient_NativeLib.c
jni/com_cts_c2dmclient_NativeLib.c:3:40: fatal error: com_cts_c2dmclient_NativeL
ib: No such file or directory
compilation terminated.
make: *** [obj/local/armeabi/objs/com_cts_c2dmclient_NativeLib/com_cts_c2dmclien
t_NativeLib.o] Error 1**
注:创建成功.h文件。
我com_exampleservice_NativeLib.c文件
#include "stdio.h"
#include "malloc.h"
#include <com_exampleservice_NativeLib.h>
JNIEXPORT jint JNICALL Java_com_exampleservice_NativeLib_loop
(JNIEnv * env,jobject obj,jint v1, jint v2){
int loop;
unsigned long int *array;
if(v2 == 0){
array = (unsigned long int *)malloc(v1 * sizeof(unsigned long int));}
else if(v2 == 1)
{
array = realloc(array,sizeof(array)+v1);
}
else{
}
array[0] = 1;
array[1] = 1;
for (loop = 2; loop < v1; loop++) {
array[loop] = array[loop - 1] + array[loop - 2];
}
for (loop = 0; loop < v1; loop++) {
}
if(v2 == 2)
{
free(array);
}
return 0;
}
放入您的Native-C文件。 – Dharmendra 2012-08-06 13:37:45
我添加了我的c文件 – Sudarshan 2012-08-06 13:40:22
你能告诉我你的包名和你正在加载这个lib的类的名字吗? – Dharmendra 2012-08-06 13:44:03