序:目前有个项目,以前不带so的时候可以内置嵌入到/system/app下面,现在接入so就遇到一启动就奔溃的问题,下面我来详细说说怎么解开这个问题的吧。

先说原因

产生的日志(apk的包名为com.dangbeiaddemo)java.lang.UnsatisfiedLinkError: Couldn't load dbasdpi from loader dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.dangbeiaddemo-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.dangbeiaddemo-1, /vendor/lib, /system/lib]]]: findLibrary returned null

根据日志的反馈,我去查看了下System.loadLibrary的源码看到一行

所以肉戏来了,关键点就在loader.findLibrary()

看了半天源码和资料,ClassLoader的那个findLibrary()实际上会在两个部分的文件夹中去寻找System.loadLibrary()要load的那个library,一个部分是,构造ClassLoader时,传进来的那个library path,另外一个部分是system property。在android系统中,查找要load的library,实际上会在nativeLibraryDirectories=[/data/app-lib/com.dangbeiaddemo-1, /vendor/lib, /system/lib]中查询。

我们通过log查看可以知道:loader为PathClassLoader,find的文件夹路径为[DexPathList[[zip file "/data/app/com.dangbeiaddemo-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.dangbeiaddemo-1, /vendor/lib, /system/lib]]]

注意:不同的手机不同的版本可能路基稍微有点不一样

所以就是一开始通过root 权限将apk直接push到/system/app目录下,导致启动无法加载so文件奔溃

解决方案

所以分多步入手:

1.尽量能加载出来so,下面这个方法在某些机型可用System.load(context.getDir("lib", 0).getParentFile().getAbsolutePath());

2.不能加载出来,我给它拷贝进去

当你push 一个apk到/system/app文件夹下面的时候,你可以push so文件到/system/lib文件下面,这样就可以正常运行了。

3.需要捕获异常才能进行二次调用。

正常情况下,第一次调用就会抛出UnsatisfiedLinkError,你需要try catch这个异常。一开始我是用Exception去捕获的,所以直接奔溃,下图为异常结构图:

4.实在无法加载的,必须要在代码里做处理,不调用native方法

参考链接:

android内置so库,带so库的apk正确内置到system/app详解相关推荐

  1. android仿知乎按钮动效,Android仿知乎客户端关注和取消关注的按钮点击特效实现思路详解...

    先说明一下,项目代码已上传至github,不想看长篇大论的也可以先去下代码,对照代码,哪里不懂点哪里. 代码在这https://github.com/zgzczzw/ZHFollowButton 前几 ...

  2. 一篇文章带你快速理解JVM运行时数据区 、程序计数器详解 (手画详图)值得收藏!!!

    受多种情况的影响,又开始看JVM 方面的知识. 1.Java 实在过于内卷,没法不往深了学. 2.面试题问的多,被迫学习. 3.纯粹的好奇. 很喜欢一句话:"八小时内谋生活,八小时外谋发展. ...

  3. python中read函数解释_Python内置函数解释教程,readwill(非常详细的代码演示截图),详解,看,了,就,会,很...

    内置函数 abs() 获取绝对值 all() 接受一个迭代器,如果迭代器的所有元素都为真,那么返回True,否则返回False any() 接受一个迭代器,如果迭代器里有一个元素为真,那么返回True ...

  4. android脚本实现自动捉妖,一起来捉妖自动行走辅助怎么用 自动行走辅助详解[多图]...

    一起来捉妖中行走是非常重要的,很多地方都需要玩家们多行走才能玩,接下来安族小编带大家来看一下自动行走辅助详解. 一起来捉妖自动行走辅助工具 1.下载一起来捉妖辅助"飞机助手"APP ...

  5. android 清理缓存动画,Android仿微信清理内存图表动画(解决surfaceView屏幕闪烁问题)demo实例详解...

    最近接了一个项目其中有功能要实现一个清理内存,要求和微信的效果一样.于是想到用surfaceView而不是继承view.下面小编给大家解析下实现思路. surfaceView是为了解决频繁绘制动画产生 ...

  6. 黑猫带你学UFS协议第11篇:两万字详解UFS协议信息单元(UPIU)

    1 前言 本文依据UFS3.1 JEDEC协议.网络资料及个人工作经验整理而成,如有错误请留言. 文章为个人辛苦整理,付费内容,禁止私自转载. 本文结合UFS3.1 JEDEC协议手册查看效果更佳. ...

  7. 黑猫带你学eMMC协议第11篇:eMMC擦除详解(erase/trim/discard/sanitize/secure erase/secure trim...)

    文/黑猫学长 本文依据eMMC JEDEC5.1及个人工作经验整理而成,如有错误请留言. 文章为个人辛苦整理,付费内容,已加入原创维权,禁止私自转载. 文章所在专栏:<黑猫带你学:eMMC协议详 ...

  8. Unbuntu环境编译 Android平台可用ffmpeg(带三方库fdk-aac和lame)

    零.准备 编译环境:Ubuntu16.0.4 NDK版本:android-ndk-r21c-linux-x86_64 ffmpeg版本:4.4.1 fdk-aac: fdk-aac-2.0.2 lam ...

  9. Python标准库:datetime 时间和日期模块 —— 时间的获取和操作详解

    datetime 时间和日期模块 datetime 模块提供了以简单和复杂的方式操作日期和时间的类.虽然支持日期和时间算法,但实现的重点是有效的成员提取以进行输出格式化和操作.该模块还支持可感知时区的 ...

  10. 库 家庭组 计算机 网络,Windows 8家庭组网络连接功能详解

    [牛华网]与早期版本的Windows操作系统相比,Windows 8的一大优势是可以便捷地建立网络连接.系统可以通建立"家庭组",使得家庭或小型企业充分利用Window的网络连接功 ...

最新文章

  1. minus oracle 顺序_oracle minus的用法来一波
  2. 推荐系统技术演进趋势:召回-排序-重排
  3. python安装numpy-Python使用pip安装Numpy模块
  4. python upper_Python 3中的模块级string.upper函数在哪里?
  5. HTML 和 JavaScript 编程
  6. 学会阅读英文计算机原著
  7. 6.网络层(4)---IP多播,NAT
  8. 转 GRE -- ME 似乎有件事,一直等待着我去做,努力去做。
  9. c语言 word转pdf,批量Word转PDF之捷径
  10. KeilC51基本关键字
  11. 笔记本开机速度怎么计算机,笔记本开机加速的步骤_如何给笔记本电脑开机提速-win7之家...
  12. 乐2 乐视X621_官方线刷包_救砖包_解账户锁
  13. 1047: 阿姆斯特朗数
  14. matplotlib.pyplot.pie()绘制饼图
  15. Windows 7 安装最新版 2021-3-1 的 tableau 时提示 “指定程序要求更新的 Windows 版本” 解决办法
  16. java 进销存 springmvc SSM crm 项目 系统
  17. OCR开源库Tesseract汉字识别训练
  18. 奥塔在线:VisualStudio中使用Git的详细配置说明
  19. CentOS 7+环境下PHP使用Imagick+ghostscript将PDF文件转为图片
  20. Java Socket udp协议在网络读卡器上的使用

热门文章

  1. 验收测试的名词解释_验收测试工作流程及准则
  2. IJCAI 2022 | 即插即用分类器模块:一行代码大幅提升零样本学习方法效果
  3. Openresty + GeoIP2实现IP归属国家查询
  4. 警告: A docBase E:/Tomcat/webapps/Test inside the host appBase has been specified, and will be ignored
  5. 003_创建simulink文件
  6. 程序员必读:摸清hash表的脾性
  7. 利用“3 of 9 barcode”字体实现一维条形码(只支持英文等ASCII字符)
  8. android拉起软键盘,移动端JavaScript拉起软键盘
  9. 魅族mx4 android5.0,第一手更新 魅族MX4Pro安卓5.0抢先体验
  10. openwrt新3路由lede动态dns如何使用,阿里云ddns+ipv6