我有一个只有一个类的小型 C++ 库项目。
class Test
{
public:
Test(){};
~Test(){};
int SomeFunc() { return 5; }
}
我可以通过 Android NDK 构建此类。 (问题 1)。 我可以在 Java 应用程序中使用 .so 文件。我如何从 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.) 添加调用以在调用 Activity 中加载库(本例中为 MainActivity.java):
static {
System.loadLibrary("main_jni");
}
4.) 在调用 Activity 中定义 native 函数:
native int SomeFunc();
5.) 从 Activity 中调用它:
@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.) 重新构建并运行应用程序
关于android - 如何通过 Android NDK 编译 C++ 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13654678/