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

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

问题背景

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

bash 复制代码
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这个库中。
bash 复制代码
nm -D linA.so | grep _TTT_TTT_TTT

相关知识点

动态库加载优先级

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

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

  1. 把应用挪到/vendor分区,或者作为后装应用(可以的话),利用Android命名空间机制隔离(参考Asop官网原生库的命名空间
  2. 重命名应用自带的动态库,把动态库改成其他名字。
  3. 使用和系统版本统一的动态库。
  4. 应用使用静态库,静态依赖。
相关推荐
00后程序员张7 小时前
对比 Ipa Guard 与 Swift Shield 在 iOS 应用安全处理中的使用差异
android·开发语言·ios·小程序·uni-app·iphone·swift
悠哉清闲9 小时前
不同车型drawable不同
android·开发语言
00后程序员张11 小时前
在 iOS 设备上同时监控 CPU、GPU 与内存的方法
android·ios·小程序·https·uni-app·iphone·webview
测试_AI_一辰11 小时前
项目实践笔记 9:打卡/日报Agent项目Bug 修改与稳定性收口(v1.0)
android·开发语言·人工智能·功能测试·ai编程·ab测试
马 孔 多 在下雨11 小时前
Kotlin协程进阶王炸之作-Kotlin的协程到底是什么
android·开发语言·kotlin
冬奇Lab11 小时前
【Kotlin系列15】多平台开发实战:一次编写,多端运行
android·开发语言·kotlin
Dxy123931021612 小时前
告别默认排序:MySQL自定义排序的“炼金术”
android·数据库·mysql
请叫我大虾12 小时前
发现一个jdk中ArrayList的小BUG
android·java·bug
一起养小猫12 小时前
Flutter for OpenHarmony 实战:双控制系统实现(按钮+键盘)
android·flutter·计算机外设·harmonyos
_李小白13 小时前
【Android 美颜相机】第十八天:GPUImageChromaKeyBlendFilter 解析
android·数码相机