0

私はAndroidを初めて使用し、単純なSDK+NDKの概念を作成しようとしています。私は以下の手順に従いました:

  1. NDKをダウンロード
  2. zipファイルを抽出します
  3. 新しいAndroidプロジェクトを作成します。
  4. プロジェクトの下に新しいフォルダjniを作成します。
  5. 必要に応じてUIを定義します。
  6. すべてのネイティブメソッドを呼び出すJavaファイルを作成します。これらすべてのメソッドを「ネイティブ」プレフィックスで宣言します。を使用してライブラリをロードする静的ブロックがありますsystem.loadLibrary("")
  7. を使用して対応するヘッダーファイルを作成しますjavah -jni filename
  8. 生成されたfilename.hファイルをjniフォルダーに移動します。
  9. .hファイルを含み、.hファイルのメソッドを実装するcファイルを作成して保存します。
  10. 次の内容でmkファイルを作成します。

    LOCAL_PATH:= $(call my-dir)
    include $(CLEAR_VARS)
    LOCAL_MODULE:=
    LOCAL_SRC_FILES:= .c
    include $(BUILD_SHARED_LIBRARY)

  11. コマンドプロンプトでプロジェクトフォルダに移動します
  12. 与える<ndkfolder>/ndk-build
  13. .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;
}
4

2 に答える 2

0

私もNDKを初めて使用しました。

以前SWIGは、JavaJNIコードを手動で記述する必要はありませんでした

このチュートリアルは役に立ちました:

于 2012-08-06T14:42:07.783 に答える
0

あなたのAndroid.mkファイルはあなたの質問ではうまく見えません。

ファイルがc ファイルの近くのディレクトリにcom_exampleservice_NativeLib.h存在することを確認してください。jni

次のように、インクルード パスにディレクトリを追加する必要がある場合があります。

  LOCAL_C_INCLUDES += $(LOCAL_PATH)/include

これは$(LOCAL_C_INCLUDES)絶対パスのリストでなければならないことに注意してください。$(LOCAL_SRC_FILES)$(LOCAL_PATH)

もう 1 つの注意点は、com_exampleservice_NativeLib.cファイル内での#includeディレクティブまたは名前付けの使用が正しくないことです。行くべきだ

#include <stdio.h>
#include <malloc.h>
#include "com_exampleservice_NativeLib.h"

#include <ファイル名> と #include "ファイル名" の違いを参照してください。詳細な説明のために。

于 2012-08-08T08:01:25.697 に答える