1つのクラスを持つ小さなC++ライブラリプロジェクトがあります。
class Test
{
public:
Test(){};
~Test(){};
int SomeFunc() { return 5; }
}
このクラスはAndroidNDKを介して構築できます。(質問1)。.soファイルをJavaアプリケーションに使用できます。JavaコードからSomeFuncメソッドを呼び出す方法(質問2)。
手順は次のとおりです。
1.)プロジェクトの「jni」フォルダーにAndroid.mkを作成します。
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := main_jni
LOCAL_CFLAGS :=
LOCAL_SRC_FILES := main.cpp
LOCAL_LDLIBS :=
include $(BUILD_SHARED_LIBRARY)
2.)「jni」フォルダにmain.cppを作成します。
#include <jni.h>
using namespace std;
#ifdef __cplusplus
extern "C" {
#endif
class Test {
public:
Test(){};
~Test(){};
int SomeFunc() { return 5; }
};
jint Java_com_example_activity_MainActivity_SomeFunc(JNIEnv *env, jobject thiz)
{
Test *test = new Test();
return test->SomeFunc();
}
#ifdef __cplusplus
}
#endif
3.)呼び出しを追加して、呼び出しアクティビティ(この例ではMainActivity.java)にライブラリをロードします。
static {
System.loadLibrary("main_jni");
}
4.)呼び出し元のアクティビティでネイティブ関数を定義します。
native int SomeFunc();
5.)アクティビティから呼び出します。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView text = (TextView) this.findViewById(R.id.text);
text.setText(String.valueOf(SomeFunc()));
}
6.)プロジェクトのルートフォルダーから「ndk-build」コマンドを実行します(注:この手順の後にEclipseでプロジェクトを更新してください)
7.)アプリケーションを再構築して実行します
質問を正しく理解しているかどうかはわかりませんが、このリンクはあなたに役立つかもしれません。 私は個人的には非常に基本的なことを除いてCのことをあまり知りませんが、NDKでもっとCに到達することを楽しみにしています。
cで記述したコードが何であれ、java_urpackagename_class_methodnameのように定義する必要があります。このコードを使用する前に、まずpublic native int ABC();のようなjavaクラスでネイティブメソッドを作成する必要があります。このメソッドを使用することを伝えます。使用するには、必要に応じてAndroid.mkまたはApplication.mkを作成します。.soは、JavaクラスがCコードで何をしたいのかを知るのに役立ちます。