例如,我有一个名为HelperLib
的C ++库。我有一些假设:
我可以将这个项目编译成* so文件。 (通过一些在线帮助我在Android上构建这个库的教程)。
我可以在C / C ++中使用这个库。通过图书馆网站上的官方教程。
我对本地库有基本的了解。例如,使用System.loadlibrary()
加载本机库,例如调用简单的本机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”,但没有提供调用库函数的有用方法。
请帮助我,在上述假设下,我该如何继续使用此库。有没有在线教程来帮助我解决这个问题?
谢谢:)
答案 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();
}
希望这会有所帮助:)