android - 如何使用原生库

标签 android c++ android-ndk

例如,我有一个名为 HelperLib 的 C++ 库.我有一些假设:

  1. 我可以把这个项目编译成*so文件。 (通过一些帮助我在 Android 上构建这个库的在线教程)。

  2. 我可以在 C/C++ 中使用这个库。通过图书馆网站上的官方教程。

  3. 我对本地库有基本的了解。例如,使用 System.loadlibrary() 加载 native 库,例如调用简单的原生 C 函数。

当我决定在线使用一些 C++ 库时,我经常遇到的那些假设。他们提供了如何使用的教程,还有一些提供了如何在 Android 上构建这个库。

但是有了所有这些,我仍然不知道如何在 Android 上使用这个库。从哪儿开始?在我可以使用这个库之前,我应该做些什么?例如。

///// this is a C++ source file to use library
int main() {
   HelperLib lib = new HelperLib(); // just for example
   lib.initialize();
   /// demo how this library was used
   lib.makeConnection();
   lib.closeConnection();
   return 0;
}

基于以上代码,是否可以移植到Android层,如何移植?通过调用 line-by-line 是否简单函数作为 C++ 示例?或者我们必须做“别的事情”?这让我困惑了很多次,当很多人说“Android 的教程端口库”时,却没有提供调用库函数的有用方法。

请帮助我,根据上述假设,我怎样才能继续使用这个库。有没有在线教程可以帮助我解决这个问题?

谢谢:)

最佳答案

就像@Gabe Sechan一样简单已经在评论中提到了。

1.I can compile this project into *so file. (by some tutorial online that help me build this library on Android).

您需要将 JNI 包装器添加到 native 库。例如,wrapper.cpp:

HelperLib lib;

void Java_com_example_hqt_MainActivity_initialize() {
    lib = new HelperLib();
    lib.initialize();
}

void Java_com_example_hqt_MainActivity_makeConnection() {
    lib.makeConnection();
}

然后

3.I have a basic knowledge about native library. For example, loading a native library using System.loadlibrary(), calling simple native C function for example.

也就是说,在 MainActivity.java 中:

static {
    Log.d(TAG, "loadLibrary");
    System.loadLibrary("mynativelibrary");
}

public static native void initialize();
public static native void makeConnection();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // Init native library
    initialize();
}

public void makeNativeConnection() {
    makeConnection();
}

希望这有帮助:)

关于android - 如何使用原生库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24400381/

相关文章:

android - 我们可以在android NDK代码中使用系统IPC吗

android - 单击TDateEdit(FMX Control)导致Android应用程序崩溃

java - 删除其中一项后,如何立即在 listView 中更新每项显示的总价?

连接到 IPv4 地址时 C++ winsock 连接被拒绝

android - 错误 : Program "/NDK-build" not found in PATH

android - Android FFmpeg 和 SOX 的二进制文件

java - 使用 Appium 脚本自动化 android 模拟器和浏览器

java - 如何使用自动链接 :phone? 让一个字符串中的多个电话号码可点击

c++ - 随机数导致问题

c++ - 在 IE 中 fork 或复制用户浏览器 session