我是JNI和NDK代码中的菜鸟,我必须创建一个方法来使用静态库,其中包含许多用C ++创建的方法和标题。我必须用Java调用它们。我会尝试解释我的问题,我想解决这个问题很多天。
我会试着用一些代码解释一下。
我在cpp中搜索此方法:
#include <iostream>
#include <HDTManager.hpp>
using namespace std;
using namespace hdt;
int main(int argc, char *argv[]) {
// Load HDT file
HDT *hdt = HDTManager::mapHDT("/storage/emulated/0/Download/linkedmdb.hdt");
// Enumerate all triples matching a pattern ("" means any)
IteratorTripleString *it = hdt->search("","","Batman");
while(it->hasNext()){
TripleString *triple = it->next();
cout << "Result: " << triple->getSubject() << ", " << triple>getPredicate() << ", " << triple->getObject() << endl;
}
delete it;
delete hdt;
}
我有一个扩展名为“.a”的静态库,其中包含search.cpp所依赖的所有头文件和代码。
总之,我的问题是,如果你能帮助我创建一个从本机调用中使用这个方法的Java类,那么我可以阅读很多页面而且我不能这样做。我认为我必须在一个jni文件夹中的cpp文件中创建这个方法到Android项目中并创建一个使用静态库“libhdt.a”的Android.mk,这样可以创建一个共享库“.so” Android代码使用loadLibrary方法使用。
另一个问题是如何加载包含我必须搜索的数据的库,位于movile手机的存储中,我在说这个代码行:
HDT *hdt = HDTManager::mapHDT("/storage/emulated/0/Download/linkedmdb.hdt");