安卓,将外部库导入 NDK
Android, import external library to NDK
我正在使用NDK在Android上制作Android Shapefile阅读器应用程序。我想使用C++来解析形状文件。我找到了库"Shapefile C Library"。Github:https://github.com/sw897/shapelib。
我正在使用Android工作室,不知道如何将其导入我的Android项目,因此我可以使用以下描述的功能:http://shapelib.maptools.org/shp_api.html
有什么提示吗?
首先,开始破解Google的Hello-JNI示例: https://github.com/googlesamples/android-ndk/tree/master/hello-jni
将其用作试验台。
然后,使用public native
方法创建一个 Java 类,以便与库进行交互。 高级 API,可能将文件名或缓冲区传递给 SHPOpenLL,并返回指向 ShapeFile 上下文的指针 (ShapeHandle
)。 看起来您的库是用 C 编写的,因此您应该能够编写一个类似的接口来查询传递ShapeHandle
指针的 (jint) C 样式强制转换的 shapefile。
接下来,您需要使用javah
来生成 shapefile 界面的标题。 生成标头后,可以使用它来在 .cc 文件中实现接口。 从那里你基本上会对你的 C 接口进行 Java 调用,它会返回 jobjects。(jint,jbool,jstring等)
我正在查看您想要使用的ShapeLib,虽然它很容易,但会有一些陷阱。
- 您需要为文件 I/O 实现 SAHooks。 我建议查看NVFile以获取有关如何访问APK文件(或下载的文件)的示例。您需要使用 activity.context.assetmanager 初始化它。 然后用nv_file来包装FRead/FSeek/etc...
- 将信息传递回Java将是困难的。 就个人而言,我会构建一个 Java 类来保存形状信息并在
C
端填写它。 但是,您可能想一次从SHPObject
查询这些参数。 会很慢,但不太容易出错。
例如
// Java
MyJavaShapeObject obj = new MyJavaShapeObject();
_c_retrieveShapeObj((jint)pShapeFile, obj);
// C
java_blah_blah_c_retrieveShapeObj(JNIEnv* env, jclass activity, jint theShapeFile, jobject theObj){
ShapeHandle pShapeFileHandle = (ShapeHandle)theShapeFile; // c style conversion
// http://stackoverflow.com/questions/11647646/how-to-use-the-jni-to-change-the-fields-of-a-java-class
// http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/functions.html#wp16613
// http://stackoverflow.com/a/36759159/7949696
}
相关文章:
- 如何使用ndk-build.cmd构建Android.so文件
- 尝试导入pybind-opencv模块时出现libgtk错误
- 导入库可以跨dll版本工作吗
- Android NDK传感器向事件队列报告奇怪的间隔
- 建议在运行时将带有类实例的列表从c++导入qml
- 导入/导出变量时出错
- Android NDK 编译 LAME HAVE_MPGLIB > 'interface.h' 文件未找到
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 将QT项目导入Visual Studio 2019会给我带来很多LNK2001错误
- NDK:如何通过ndkr15c包含"RefBase.h"?
- 是否可以将函数导入命名空间,但不能导出它?
- Android NDK clang 编译器错误在 Windows 上显示'No such file or directory'
- 如何将 CLion C++ 项目导入 Visual Studio?
- 为什么使用 NDK 不能存在不同的 stl 实现?
- Python 3.8 不能与 Pybind11 一起导入 [Windows]
- 无法将标准库导入本机 android 项目中的头文件
- 尝试了解在导入的静态方法上使用删除方法时的错误
- 在 python 模块中导入子模块时PyImport_Import失败
- 安卓,将外部库导入 NDK
- 如何使用ndk在eclipse中导入和编辑C++代码