项目升级到Android31版本dlopen找不到系统so库文件
简介
最近有个海外项目需要把之前项目从30版本升级到31版本,升级后发现就发现一个问题:
因为我们的项目是系统签名的apk,所以集成到系统中后是没有任何问题的,但是当我们手动安装后就会出现使用dlopen去加载系统的so库(/system/lib64/libSysMultiscreenAudio.tct.so)失败问题。
查找问题
于是我就想之前30版本的是没有问题,那么31版本的就会有这个问题,肯定是31版本的应该是对权限进行了加强了。于是我就去google官网去查30到31到底有啥区别,最终在这个连接找到了:行为变更:以 Android 12 为目标平台的应用

| uses-native-library标签的用法 | 非NDK原生共享库 |
|---|---|
![]() |
![]() |
解决问题
我在我项目中的清单文件中加入<uses-native-library>标签后,编译apk时报错,而且也会有警告,输入标签也不会有提示

这里报错的原因是因为gradle版本太低了导致的,
如果不想升级gradle版本可以使用<uses-library>标签,而且<uses-library>标签在输入的时候会有提示。

<uses-library
android:name="libSysMultiscreenAudio.tct.so"
android:required="false" />
最终进行测试发现这个标签还真的可以。





浙公网安备 33010602011771号