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

【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.dtcms.com/a/212645.html

相关文章:

  • Java集合框架基础知识点全面解析
  • Go 语言基础1 Slice,map,string
  • 计算机视觉(图像算法工程师)学习路线
  • where is the examples of stm32h743i demo project inside of stm32cubeh7
  • 电商小程序店铺详情页:头部无限分类与筛选功能实现
  • 书生五期--端侧小模型论文分类微调打榜
  • 搭建 C/C++_CMake_Boost_git 开发环境
  • 计算机视觉中的可重复性:深入案例分析与Python代码实现
  • 【MySQL】08.视图
  • TiDB:从快速上手到核心原理与最佳实践
  • 【时时三省】(C语言基础)函数的嵌套调用
  • python学习day28
  • Linux 系统常用核心库----用户态程序运行的基石
  • 广东省省考备考(第二十天5.25)—言语:逻辑填空(听课后强化训练)
  • 前端常见的安全问题
  • java高级 -Junit单元测试
  • 用VMWare架飞牛nas 启用Intel千兆网卡
  • 基于点标注的弱监督目标检测方法研究
  • Linux Kernel调试:强大的printk(一)
  • 程序代码模块化设计的架构方法论
  • 《仿盒马》app开发技术分享-- 定位获取(端云一体)
  • LangChain02-Agent与Memory模块
  • React整合【ECharts】教程003:关系图的构建和基本设置
  • 在langchain4j中 UserMessage注解和SystemMessage两个注解的区别
  • MyBatis-Plus整合SpringBoot及使用
  • 将 Shp 导入 PostGIS 空间数据的五种方式(全)
  • 数据集全解析:从基础概念到实践应用的完整指南
  • 消息队列kafka的基础概念和部署
  • Lambda表达式的方法引用详解
  • PCB 通孔是电容性的,但不一定是电容器