私はandroidndkの初心者です。ndk-r8dで提供される「TwoLibs」サンプルに従って構築された共有ライブラリを読み込もうとしています。Androidプロジェクトに単純な共有ライブラリをロードしているときに次のエラーが発生します
"コンパイルサム:jbmc <= jbmc.c jni / jbmc.c:1:19:致命的なエラー:mylib.h:そのようなファイルまたはディレクトリのコンパイルは終了しませんでした。make:* * [obj / local / armeabi / objs / jbmc / jbmc.o]エラー1*
私は次のコードを使用しています:
Android.mk
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := mylib
LOCAL_SRC_FILES := libmylib.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := jbmc
LOCAL_SRC_FILES := jbmc.c
LOCAL_SHARED_LIBRARIES := mylib
include $(BUILD_SHARED_LIBRARY)
次のネイティブCソースを使用して、ネイティブでライブラリ関数を使用します。
jbmc.c
#include "mylib.h"
#include <jni.h>
JNIEXPORT jstring JNICALL Java_com_example_test1_TestActivity_myfunct(JNIEnv* env, jobject thiz, jstring str)
{
str = myf(str);
return (*env)->NewStringUTF(env, str);
}
ここで、ライブラリ関数は任意の文字列を受け入れ、別の文字列を返します。
jniには次の階層があります。
/ jni
- Android.mk
- jbmc.c
- libmylib.so
私が使用しているテストアクティビティでは、次のようになります。
public native String myfunct(String abc);
static{
System.loadLibrary("jbmc");
System.loadLibrary("mylib");
}
ヘッダーを読み込めない、または見つからないと思います。LOCAL_EXPORT_C_INCLUDES:= $(LOCAL_PATH)を使用して、ヘッダーをローカルパスにエクスポートしましたが。
NDKPrebuiltライブラリのサポートで入手可能なドキュメントを参照しています