私はAndroidを初めて使用し、単純なSDK+NDKの概念を作成しようとしています。私は以下の手順に従いました:
- NDKをダウンロード
- zipファイルを抽出します
- 新しいAndroidプロジェクトを作成します。
- プロジェクトの下に新しいフォルダjniを作成します。
- 必要に応じてUIを定義します。
- すべてのネイティブメソッドを呼び出すJavaファイルを作成します。これらすべてのメソッドを「ネイティブ」プレフィックスで宣言します。を使用してライブラリをロードする静的ブロックがあります
system.loadLibrary("")
。 - を使用して対応するヘッダーファイルを作成します
javah -jni filename
- 生成されたfilename.hファイルをjniフォルダーに移動します。
- .hファイルを含み、.hファイルのメソッドを実装するcファイルを作成して保存します。
次の内容でmkファイルを作成します。
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE:=
LOCAL_SRC_FILES:= .c
include $(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;
}