android - 如何通过 Android NDK 编译 C++ 项目

标签 android c++ mobile

我有一个只有一个类的小型 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/

相关文章:

c++ - 在 C++ 中,我无法掌握指针和类

url - 我应该在 robots.txt 中包含移动网站 URL 吗?

css - 如何定位黑莓浏览器?

c++ - SQLite3 C++ 查询靠近 "CASE": syntax error

c++ - 为什么 C++ 中 std::string 的复制方法在此程序中显示出奇怪的行为?

c - Symbian 移动操作系统 - 如何编写 C 应用程序?

android - android "app lock"应用程序如何工作?

java - 查找 Android 库包名称和版本

javascript - React Native 中的 list 合并失败

Android 8.0 DownloadManager 无法在移动数据中运行