我有一個類的小型C++庫項目。 如何通過Android NDK編譯C++項目
class Test
{
public:
Test(){};
~Test(){};
int SomeFunc() { return 5; }
}
我可以建立使用Android NDK這一類。 (問題1)。 我可以使用.so文件導入到Java應用程序中。我如何從Java代碼調用SomeFunc方法(問題2)。
我有一個類的小型C++庫項目。 如何通過Android NDK編譯C++項目
class Test
{
public:
Test(){};
~Test(){};
int SomeFunc() { return 5; }
}
我可以建立使用Android NDK這一類。 (問題1)。 我可以使用.so文件導入到Java應用程序中。我如何從Java代碼調用SomeFunc方法(問題2)。
我不確定我是否正確地理解了這些問題,但this link could be useful to you. 除了非常基本的知識外,我個人對C的瞭解不多,但我期待用NDK獲得更多的C。
無論你的代碼在C寫的,你需要定義它像java_urpackagename_class_methodname然後使用此代碼ü需要首先創建Java類中的本地方法一樣公共本土INT ABC()之前;告訴你,你要使用這種方法。要使用它,根據需要創建一個Android.mk或Application.mk。 .so將幫助你的java類知道你的c代碼想要做什麼。
步驟如下:
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建造」 命令從項目的根文件夾(注意:刷新此步驟後在Eclipse項目)
7)重新構建和運行應用程序
'NDK-build'沒有按」在cpp代碼中選擇編譯器錯誤。 –