jni加载第三方so_Android调用第三方SO动态链接库 找不到.so库

本文介绍了在Android中如何通过JNI加载第三方SO动态链接库,包括将SO文件放入指定目录,修改Android.mk文件以及解决不同处理器架构的问题。讨论了两种加载方式,一种是直接加载,另一种是通过创建自定义SO进行间接调用,并分析了选择方案的依据和考虑因素。
摘要由CSDN通过智能技术生成

1、在jni目录下新目录prebuilt,在此目录下新文件Androidusc.mk(名字随便取),将第三方库.so复制到此目录

2、打开Androidusc.mk添加内容,例如第三方库是libScreenPop.so:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := ScreenPop

LOCAL_SRC_FILES := libScreenPop.so

include $(PREBUILT_SHARED_LIBRARY)

3、修改jni目录下的Android.mk文件,加入一条语句:

include $(LOCAL_PATH)/prebuilt/Androidusc.mk

Clean工程,完成。

Android找不到第三方so库

你在linux下写一个X86处理器的库,要在java里用,而且在arm处理器下。

是这意思吗?

Android怎调用第三方SO动态链接库

已了解解决方案:

1.将SO文件直接放到libs/armeabi下,然后代码中System.loadLibrary("xxx");再publicnativestaticintxxx_xxx_xxx();接下来就可以直接调用xxx_xxx_xxx()方法;

2.第二种方案,创建自己的SO文件,在自己的SO文件里调用第三方SO,再在程序中调用自己的SO,这种比较复杂,需要建java类文件,生成.h文件,编写C源文件include之前生成的.h文件并实现相应方法,最后用androidNDK开发包中的ndk-build脚本生成对应的.so共享库;

求解:网上说的第二种方案,是自己引用so库,最后声称JAR------

解决方案:首先要看这个SO是不是JNI规范的SO,比如有没有返回JNI不直接支持的类型。也就是说这个SO是不是可以直接当作JNI来调用。如果答案是否定的,你只能选第二个方案。如果答案是肯定的,还要看你是不是希望这个SO的库直接暴露给JAVA层,如果答案是否定的,你只能选第二个方案,比如你本身也是一个库的提供者。一般如果你只有SO,就说明这个是别人提供给你的,你可以要求对方给你提供配套的JAVA调用文件。

1、这个要看这个SO是不是符合JNI调用的规范。还要看你自己的意愿。

2、因为第二种方法最灵活,各种情况都可以实现。

3、可以------

解决方案:看能不能直接从JAVA调用的最简单的方法就是看SO里的函数名是不是Java_XXX_XXX_XXX格式的是就可以,你可以自己写一个配套的JAVA文件,注意一下SO函数名和JAVA函数名的转换规则,或者向SO提供方索要;不是的话就选第二种方案吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值