昨天晚上到今天一直在折腾这个第三方库文件,唉,要哭了,一直就是各种问题。现在详细说说怎么做,踩过哪些坑。
现有个第三方的C++动态库(libModel.so),这个libModel.so是要能被android调用的arm库啊,需要在android中,使用java直接调用,那么一般是两种方式:
1:libModel.so 符合JNI规范,能够直接在java层调用
2:libModel.so不符合规范,只是普通的c++动态库,那么只能是在JNI,写个c/c++函数,调用这个libModel.so库里面的函数,然后重新编译为libhello.so库,android调用这个libModel.so;其实就像给libModel.so再封装一层。
由于libModel.so不符合JNI规范,我只能采用第二种方式。
首先,创建一个HelloTest的android程序,然后在HelloTest中新建一个jni文件,在jni文件中仔创建一个prebuilt文件夹,里面存放libmodel.so,并且新建一个Android.mk。
Android.mk的内容如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := model
LOCAL_SRC_FILES

本文详细介绍了如何在Android应用中使用JNI调用不符合JNI规范的第三方C++动态库libModel.so。由于libModel.so不遵循JNI规则,作者采取了在JNI层封装的方法,创建新的libhello.so库。文章中提到了创建Android.mk和Application.mk文件的过程,以及遇到的错误和解决办法,包括iostream找不到的问题和库文件加载失败的错误。此外,还阐述了如何处理Java与C++间传递结构体参数的问题,提供了一种通过Java对象向C++传递参数的实现方案。

699

被折叠的 条评论
为什么被折叠?



