当前位置: 首页 > ops >正文

【Android】System分区应用自带库与原生库同名问题分析

System分区应用自带库与原生库同名问题分析

问题背景

某系统应用发生必现崩溃问题。崩溃log如下

0*-** **:**:**.** 66666 66666 E ***** aar error:: java.lang.UnsatisfiedLinkError: dlopen failed: cannot 
locate symbol "_TTT_TTT_TTT" 
referenced by "/system/app/LINDUO/lib/arm64/liblinduo.so"... 
0*-** **:**:**.** 66666 66666 E offline_da aar error:: at java.lang.Runtime.loadLibrary0(Runtime.java) 
  • 根据Log提示,动态库依赖时找不到_TTT_TTT_TTT这个符号。检索liblinduo.so依赖的动态库。发现,_TTT_TTT_TTT这个符号,在应用自带的libA.so这个库中。
nm -D linA.so | grep _TTT_TTT_TTT
  • 检查进程对应的map文件,/proc/66666/maps,发现加载了系统中的libA.so(/system/lib64/libA.so)。

相关知识点

动态库加载优先级

  1. 应用私有目录
  2. 自定义注入路径
  3. 系统目录
  • Android 7.0+强制/system分区的应用使用AOSP原生库,即使应用自带同名库也会被忽略。可以理解为,Aosp的原生库比如libA.so是Aosp自身依赖的。如果系统应用自带了libA.so,那么system分区的应用,就会忽略这个库。因为,不能让应用自带的库把系统的原生库替换了。

解决System分区应用自带库与原生库同名问题

  1. 把应用挪到/vendor分区,或者作为后装应用(可以的话),利用Android命名空间机制隔离(参考Asop官网原生库的命名空间)
    在这里插入图片描述
  2. 重命名应用自带的动态库,把动态库改成其他名字。
  3. 使用和系统版本统一的动态库。
  4. 应用使用静态库,静态依赖。
http://www.xdnf.cn/news/8796.html

相关文章:

  • PPO算法详解
  • 第八章:数据幻域 · 状态与响应的涌动之力
  • 【音视频开发】音视频基础概念
  • 技术第一篇:odoo18 的登录认证机制
  • a+b+c+d==0(用哈希表进行优化)
  • 进行性核上性麻痹患者饮食指南:防呛咳、补营养的科学吃法
  • Java NPE为什么不会导致进程崩溃(CoreDump)
  • 同为科技 智能PDU产品选型介绍 EN10/G801FLR
  • 多角色多端状态控制与锁控制
  • Java Web
  • 一周学会Pandas2之Python数据处理与分析-Pandas2数据合并与对比-df.combine_first():填充合并
  • 李白、杜甫和白居易三者之间是否存在交集?
  • 6.4.2_1最短路径问题_BFS算法
  • 简单了解下Nacos
  • 【C语言指南】二维数组:概念、初始化与遍历
  • 5GC网络中的QoS Flow级QoS控制
  • Arduino Uno 热敏传感器实验
  • 防火墙高可用(HA)主备验证实验(eNSP)
  • 构造题(Constructive Problem)
  • ROS云课三分钟-阿克曼车式移动机器人倒车入库出库测试实验
  • python | vscode | 使用uv快速创建虚拟环境(实现一个项目一个虚拟环境,方便环境管理)
  • ADS学习笔记(三) 瞬态仿真
  • 【每天一个知识点】计算思维
  • java基础(面向对象高级部分)
  • [学习]浅谈C++异常处理(代码示例)
  • 2025.5.22 Axure 基础与线框图制作学习笔记
  • Linux中的文件系统和软硬连接
  • OpenGL环境配置
  • GAMES104 Piccolo引擎搭建配置
  • 【IPMV】图像处理与机器视觉:Lec12 Blob Detector 斑点检测