Qt for android调用aar库,但aar无法加载库内部so的问题

1 篇文章 0 订阅

声明

本文仅用以记录个人针对该问题的猜测及处理办法,欢迎交流探讨,但若由于采用或借鉴此方法而导致的任何问题,本人不承担任何责任。

目录

声明

问题描述

解决思路


问题描述

在qt下开发安卓端的一个应用,调试一款社保读卡器过程中,调用aar时出现加载so失败

解决思路

在网上搜索了下,大致都是android studio下的aar加载so的问题,有相关性,但可参考信息不够,不过这里整理下,大致意思以下几种:

1. 添加aar后,clean再make,试过,但问题依旧

2. aar中要System.loadLibrary()来调用so库,这个我在看aar中java文件里调用部分,这里是有的,问题不在这儿

3. so库文件放的位置不对,这个跟我这个问题不搭边,aar库在原本的安卓demo下工作正常

所以我的思路一个是就事论事,问题在哪儿从哪儿解决,一个是换个思路;

不过在没有头绪的情况下,我尝试换个思路,直接调用so文件,原则上应该没问题,参考aar里的调用方法就可以;

步骤:

1. 用压缩包打开aar文件,将jni中的两个文件夹拖出来,里面就是so的库文件
2. 将so放到项目的lib依赖目录下,并在pro中添加进去

 ANDROID_ABIS=  armeabi-v7a arm64-v8a
 for(abi,ANDROID_ABIS):{
            ANDROID_EXTRA_LIBS = $$PWD/android/libs/$${abi}/libreader.so

            LIBS += -L$$PWD/android/libs/$${abi} -lreader
  }
3. 代码里根据aar中java的方法去调用
4. 编译

但是,最后在编译这步又出了问题,函数未定义;这个问题咋说呢,厂家做全平台时,安卓的so也用的java,入参是java的,这里没法直接去用,符号直接给过滤掉了(比如String,qt里给java是jstring,但这么用符号不对)。

折腾了一下,又回到起点,还是直接用aar吧,不过这次重新编译竟然可以了,所以怀疑是不是得显式在qt里把so放进去才行(因为改会直接用aar时,我没有移除上面添加的so文件),不过好在可以用了。

所以我整理下,解决方法是,把aar中的so单独拎出来显式给pro管理

各位有遇到的没,可以留言讨论下

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值