例如,我有一个名为 HelperLib
的 C++ 库.我有一些假设:
我可以把这个项目编译成*so文件。 (通过一些帮助我在 Android 上构建这个库的在线教程)。
我可以在 C/C++ 中使用这个库。通过图书馆网站上的官方教程。
我对本地库有基本的了解。例如,使用
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/