【技术实现步骤摘要】
动态加载插件的方法、装置及电子设备
本专利技术涉及插件加载
,尤其是涉及一种动态加载插件的方法、装置及电子设备。
技术介绍
在Android5.0之后,开始使用新的Android运行环境ART(AndroidRunTime)来替代之前的Dalvik运行环境,ART机制与Dalvik机制不同,在Dalvik虚拟机中,系统源码文件是libdvm.so,采用即时编译(JIT,JustInTime)的方案,即在应用运行时通过即时编译器将字节码转换为机器码,该编译方案会影响应用的运行效率;在ART虚拟机中,系统源码文件是libart.so,采用预编译(AOT,AheadOfTime)的方案,即在应用第一次安装时字节码就会预先编译成机器码,该编译方案能够提高应用的运行效率。有时为了实现一些特定的功能,应用在运行时需要通过API接口动态调用外部的插件,即动态加载插件。然而,在通过API接口调用外部插件进行动态加载时也会触发系统的AOT编译优化,导致加载过慢,应用在运行时内存消耗严重,影响整个应用的运行效率和流畅度,甚至出现应用卡顿等现象,特别是在性能较差的低版本机型尤其明显。
技术实现思路
有鉴于此,本专利技术的目的在于提供一种动态加载插件的方法、装置及电子设备,以缓解Android应用运行时动态加载插件会降低应用运行效率的问题,并提高插件数据存入类加载器的效率,在不影响应用运行的情况下能够快速加载插件。第一方面,本专利技术实施例提供了一种动态加载插件的方法,所述方法应用于安装有安卓系统的 ...
【技术保护点】
1.一种动态加载插件的方法,其特征在于,所述方法应用于安装有安卓系统的电子设备,所述电子设备预存有空DexFile对象且安装有目标应用,所述目标应用对应的指定位置存储有目标应用的插件数据,所述空DexFile对象包含有DexFile的数据结构;所述方法包括:/n响应于所述目标应用的运行事件,将所述指定位置的插件数据加载至第一内存地址中,以加载所述空DexFile对象的方式在所述空DexFile对象的cookie中记录所述第一内存地址;/n将记录有所述第一内存地址的所述空DexFile对象保存至类加载器的元素数组中,以在所述类加载器启动时调用所述插件数据。/n
【技术特征摘要】
1.一种动态加载插件的方法,其特征在于,所述方法应用于安装有安卓系统的电子设备,所述电子设备预存有空DexFile对象且安装有目标应用,所述目标应用对应的指定位置存储有目标应用的插件数据,所述空DexFile对象包含有DexFile的数据结构;所述方法包括:
响应于所述目标应用的运行事件,将所述指定位置的插件数据加载至第一内存地址中,以加载所述空DexFile对象的方式在所述空DexFile对象的cookie中记录所述第一内存地址;
将记录有所述第一内存地址的所述空DexFile对象保存至类加载器的元素数组中,以在所述类加载器启动时调用所述插件数据。
2.根据权利要求1所述的方法,其特征在于,将所述指定位置的插件数据加载至第一内存地址中,以加载所述空DexFile对象的方式在所述空DexFile对象的cookie中记录所述第一内存地址的步骤,包括:
通过所述目标应用的主线程对应的第一子线程将所述指定位置的插件数据加载至第一内存地址中;
通过所述主线程对应的第二子线程在第二内存地址中加载所述空DexFile对象;
当所述第一子线程和所述第二子线程结束,通过所述主线程获取所述插件数据的cookie,将所述空DexFile对象中的cookie替换为所述插件数据的cookie;其中,所述插件数据的cookie中记录有所述第一内存地址。
3.根据权利要求2所述的方法,其特征在于,所述安卓系统中的系统libart.so允许所述目标应用通过dlopen函数访问。
4.根据权利要求1所述的方法,其特征在于,所述安卓系统中的系统libart.so禁止所述目标应用通过dlopen函数访问,所述系统libart.so的指定函数中预设有hook断点;
将所述指定位置的插件数据加载至第一内存地址中,以加载所述空DexFile对象的方式在所述空DexFile对象的cookie中记录所述第一内存地址的步骤,包括:
通过所述目标应用的主线程将所述指定位置的插件数据加载至第一内存地址中;
通过所述主线程调用DexFile的加载器加载所述空DexFile对象,在加载所述空DexFile对象的过程中,通过所述libart.so的指定函数中的hook断点获取所述第一内存地址,将所述第一内存地址记录于所述空DexFile对象的cookie中。
5.根据权利要求4所述的方法,其特征在于,所述指定函数包括open函数和mmap函数;
在加...
【专利技术属性】
技术研发人员:舒文,梁海滨,张为兰,
申请(专利权)人:网易杭州网络有限公司,
类型:发明
国别省市:浙江;33
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。