我是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