【技术实现步骤摘要】
一种应用程序运行时加载动态库的方法和装置
[0001]本专利技术涉及
Android
应用程序开发
,尤其涉及一种应用程序运行时加载动态库的方法和装置
。
技术介绍
[0002]在
Android
开发中,经常需要在运行时加载一些动态库,以调用
native
代码功能
。
有些情况下动态库并不会在
apk
安装包内被安装,而是在需要时才下载再加载
。
目前常见软件运行时加载动态库的方案是
hook
系统的
classloader
,在动态库的查找路径中插入新的路径,然后在加载动态库时,系统会自动从新的路径下查找新的动态库
。
[0003]但是这种方案在多线程环境下可能会导致线程同步从而引起软件崩溃的问题,因为插入新路径和查找动态库可能在两个线程中同时执行,此时就会导致无法正确地查找到正确的动态库来加载
。
目前解决这种线程同步的最简单的方法就是针对调用的地方加同步锁,如果插入新路径和加载动态库是在软件设计方的代码中进行的,则可以简单地枷锁进行控制,但如果是在第三方
SDK
中实现的,由于第三方
SDK
中代码软件设计方无法进行修改,则无法避免线程同步的出现
。
技术实现思路
[0004]有鉴于此,本专利技术提供一种应用程序运行时加载动态库的方法和装置,以解决上述提及的至少一个问题
。 ...
【技术保护点】
【技术特征摘要】
1.
一种应用程序运行时加载动态库的方法,其特征在于,所述方法包括:创建提供插入新路径方法和加载动态库方法的代理类;为所述插入新路径方法和所述加载动态库方法添加同步锁以保证线程安全;在应用程序打包时识别出系统插入新路径的第一字节码,将所述第一字节码替换调用所述代理类的插入新路径方法,同时识别出系统加载动态库的第二字节码,将所述第二字节码替换成调用所述代理类的加载动态库方法;软件运行时通过调用所述代理类中的插入新路径方法和加载动态库方法来实现运行时加载动态库
。2.
如权利要求1所述的应用程序运行时加载动态库的方法,其特征在于,为所述插入新路径方法和所述加载动态库方法添加同步锁以保证线程安全之后,所述方法还包括:添加一个
Gradle
任务,在应用程序打包时的
Transform
阶段遍历应用程序所有
class
文件
。3.
如权利要求2所述的应用程序运行时加载动态库的方法,其特征在于,所述识别出系统插入新路径的第一字节码,将所述第一字节码替换调用所述代理类的插入新路径方法包括:通过
ASM
解析
class
文件的字节码结构;遍历
ASM
解析得到的字节码结构,检测是否有插入新路径方法的调用;响应于检测到有插入新路径方法的调用,通过
ASM
修改所述
class
文件,将插入新路径方法的调用修改为所述代理类中的插入新路径方法
。4.
如权利要求2所述的应用程序运行时加载动态库的方法,其特征在于,所述识别出系统加载动态库的第二字节码,将所述第二字节码替换成调用所述代理类的加载动态库方法包括:通过
ASM
解析
class
文件的字节码结构;遍历
ASM
解析得到的字节码结构,检测是否有加载动态库方法的调用;响应于检测到有加载动态库方法的调用,通过
ASM
修改所述
class
文件,将加载动态库方法的调用修改为所述代理类中的加载动态库方法
。5.
一种应用程序运行时加载动态库的装置,其特征在于,所述装置包括:创建单元,用于创建提供插入新路径方法和加载动态库方法的代理类;同步单元,用于为所述插入新路径...
【专利技术属性】
技术研发人员:彭露,
申请(专利权)人:探探科技北京有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。