4

1つのクラスを持つ小さなC++ライブラリプロジェクトがあります。

class Test
{
public:
Test(){};
~Test(){};
int SomeFunc() { return 5; }
}

このクラスはAndroidNDKを介して構築できます。(質問1)。.soファイルをJavaアプリケーションに使用できます。JavaコードからSomeFuncメソッドを呼び出す方法(質問2)。

4

3 に答える 3

9

手順は次のとおりです。

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.)アプリケーションを再構築して実行します

于 2012-12-01T01:01:28.257 に答える
0

質問を正しく理解しているかどうかはわかりませんが、このリンクはあなたに役立つかもしれません。 私は個人的には非常に基本的なことを除いてCのことをあまり知りませんが、NDKでもっとCに到達することを楽しみにしています。

于 2012-11-30T23:49:20.480 に答える
0

cで記述したコードが何であれ、java_urpackagename_class_methodnameのように定義する必要があります。このコードを使用する前に、まずpublic native int ABC();のようなjavaクラスでネイティブメソッドを作成する必要があります。このメソッドを使用することを伝えます。使用するには、必要に応じてAndroid.mkまたはApplication.mkを作成します。.soは、JavaクラスがCコードで何をしたいのかを知るのに役立ちます。

于 2012-12-01T00:23:35.353 に答える