使用JNI 调用第三方c++动态库

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

昨天晚上到今天一直在折腾这个第三方库文件,唉,要哭了,一直就是各种问题。现在详细说说怎么做,踩过哪些坑。

现有个第三方的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 := libModel.so
 include $(PREBUILT_SHARED_LIBRARY)
  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值