我是 Android 新手,正在尝试创建一个简单的 SDK+NDK 概念。我按照以下步骤操作:
- 下载 NDK
- 解压压缩文件
- 创建新的安卓项目。
- 在项目下创建新文件夹 jni。
- 根据需要定义 UI。
- 创建一个 java 文件来调用所有的本地方法。用“native”前缀声明所有这些方法。使用静态块加载库
system.loadLibrary("")
。 - 使用创建相应的头文件
javah -jni filename
- 将生成的 filename.h 文件移动到 jni 文件夹。
- 编写包含 .h 文件的 c 文件,并实现 .h 文件中的方法并保存。
创建mk文件,内容如下:
LOCAL_PATH := $(call my-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;
}