项目升级到Android31版本dlopen找不到系统so库文件
简介
最近有个海外项目需要把之前项目从30版本升级到31版本,升级后发现就发现一个问题:
因为我们的项目是系统签名的apk,所以集成到系统中后是没有任何问题的,但是当我们手动安装后就会出现使用dlopen
去加载系统的so库(/system/lib64/libSysMultiscreenAudio.tct.so
)失败问题。
查找问题
于是我就想之前30版本的是没有问题,那么31版本的就会有这个问题,肯定是31版本的应该是对权限进行了加强了。于是我就去google官网去查30到31到底有啥区别,最终在这个连接找到了:行为变更:以 Android 12 为目标平台的应用
解决问题
我在我项目中的清单文件中加入<uses-native-library>
标签后,编译apk时报错,而且也会有警告,输入标签也不会有提示
这里报错的原因是因为gradle版本太低了导致的,
如果不想升级gradle版本可以使用<uses-library>
标签,而且<uses-library>
标签在输入的时候会有提示。
<uses-library android:name="libSysMultiscreenAudio.tct.so" android:required="false" />
最终进行测试发现这个标签还真的可以。
分类:
问题解决
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂
· 凌晨三点救火实录:Java内存泄漏的七个神坑,你至少踩过三个!