如何使用本机库

时间:2014-06-25 04:47:58

标签: android c++ android-ndk

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

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

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

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

  4. 我决定在线使用某些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”,但没有提供调用库函数的有用方法。

    请帮助我,在上述假设下,我该如何继续使用此库。有没有在线教程来帮助我解决这个问题?

    谢谢:)

1 个答案:

答案 0 :(得分:2)

这与@Gabe Sechan在评论中已经提到的一样简单。

  

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

您需要将JNI包装器添加到本机库。例如,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.我对本地图书馆有基本了解。例如,使用System.loadlibrary()加载本机库,例如调用简单的本机C函数。

那就是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();
}

希望这会有所帮助:)