一种加载插件的方法、装置和移动终端的制作方法

文档序号:8412371阅读:199来源:国知局
一种加载插件的方法、装置和移动终端的制作方法
【技术领域】
[0001] 本发明涉及计算机领域,具体涉及一种加载插件的方法、装置和移动终端。
【背景技术】
[0002] 目前,Android(安卓)操作系统在移动终端领域得到了广泛的应用,大量的手机、 平板电脑采用Android操作系统。Android操作系统采用Linux内核,由于Linux内核的安 全机制,再加上Android操作系统的dalvik的特殊机制,Android操作系统中的应用程序 很难进行扩展。
[0003] 在Android操作系统下,应用程序的apk被安装到操作系统中后,就很难进行扩 展。对应用程序中进行微小的升级,都需要重新对代码进行打包,用户需再次使用新的apk 进行安装,从而使得在Android系统中的应用程序不那么灵活。
[0004] 近来出现了插件机制,将应用的功能划分模块,每个模块对应于一个插件集中在 一个apk中。有了这种插件机制,在对应用程序进行拓展或升级时,只需要改动相应的插件 即可。
[0005] 目前,Android操作系统下通过DexClassLoader来实现对插件的加载。但是,通常 情况下,一个插件由类、资源等部分组成,插件的资源可包括其界面图片、背景音乐等内容, 而DexClassLoader只能实现对插件的类的加载,却不能实现对插件的资源的加载,会导致 插件加载后显示错误、无法完全显示等问题。

【发明内容】

[0006] 鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上 述问题的一种加载插件的方法、相应地装置和移动终端。
[0007] 依据本发明的一个方面,提供一种加载插件的方法,包括:
[0008] 当插件被触发时,获取所述插件的资源;
[0009] 新建所述插件的上下文context,并将操作系统预先为所述插件的主应用的分配 的context替换为所述插件的context,其中所述插件的context指向所述插件的资源;
[0010] 所述主应用根据被替换后的context加载所述插件的资源,其中,所述被替换后 的context为所述插件的context。
[0011] 可选地,在获取所述插件的资源之前,还包括:
[0012] 获取所述插件的安装包存档信息。
[0013] 可选地,所述获取所述插件的安装包存档信息,包括:
[0014] 获取所述插件的PackageManager对象;
[0015] 根据所述PackageManager对象获取所述插件的安装包存档信息;
[0016] 将所述安装包存档信息下的预设变量修改为预设路径;
[0017] 其中,所述预设路径为所述插件的存储路径。
[0018] 可选地,在新建所述插件的context之前,所述方法还包括:
[0019] 新建所述插件的DexClassLoader类;
[0020] 其中,所述DexClassLoader类用来传递所述插件的可执行代码路径。
[0021] 可选地,所述新建所述插件的上下文context,并将操作系统预先为所述插件的主 应用的分配的context替换为所述插件的context,包括:
[0022] 为所述插件建立继承自ContextThemeWrapper类的context ;
[0023] 重写用于加载所述插件的资源和可执行代码的方法函数,在所述重写后的函数中 返回所述插件的context。
[0024] 可选地,所述用于加载所述插件的资源和可执行代码的方法函数,包括:
[0025] getClassLoader、getResources 和 getAssets〇
[0026] 可选地,在所述插件被触发前或所述插件被触发时,所述方法还包括:
[0027] 判断所述插件是否可用;
[0028] 当所述插件不可用时,向服务器发送获取插件列表的请求;其中,所述插件列表中 保存有所述主应用所包括的插件的插件名称、插件版本、插件的数字摘要值以及插件的下 载地址。
[0029] 接收发送的所述插件列表;
[0030] 根据所述插件列表中所述插件的下载地址下载新版本的插件。
[0031] 可选地,所述根据所述插件列表中所述插件的下载地址下载新版本的插件之后, 所述方法还包括:
[0032] 验证下载得到的新版本的插件的数字摘要值与插件列表中保存的摘要值是否相 同,当相同时,执行所述获取所述插件的资源的步骤。
[0033] 可选地,所述方法还包括;
[0034] 替换操作系统的ClassLoader对象为所述主应用自定义的ClassLoader对象;
[0035] 其中,所述自定义的ClassLoader对象用于实现所述插件的加载。
[0036] 依据本发明的另一个方面,提供一种加载插件的装置,包括:
[0037] 资源获取模块,适于当插件被触发时,获取所述插件的资源;
[0038] 第一建立模块,适于新建所述插件的上下文context,并将操作系统预先为所述插 件的主应用的分配的context替换为所述插件的context,其中所述插件的context指向所 述插件的资源;
[0039] 加载模块,适于所述主应用根据被替换后的context加载所述插件的资源,其中, 所述被替换后的context为所述插件的context。
[0040] 可选地,所述装置还包括:
[0041] 信息获取模块,适于在获取所述插件的资源之前,获取所述插件的安装包存档信 息。
[0042] 可选地,所述信息获取模块,包括:
[0043] 对象获取单元,适于获取所述插件的PackageManager对象;
[0044] 信息获取单元,适于根据所述PackageManager对象获取所述插件的安装包存档 信息;
[0045] 变量修改单元,适于将所述安装包存档信息下的预设变量修改为预设路径;
[0046] 其中,所述预设路径为所述插件的存储路径。
[0047] 可选地,所述装置还包括:
[0048] 第二建立模块,适于在新建所述插件的context之前,新建所述插件的 DexClassLoader 类;
[0049] 其中,所述DexClassLoader类用来传递所述插件的可执行代码路径。
[0050] 可选地,所述第一建立模块包括:
[0051 ] 上下文建立单元,适于为所述插件建立继承自ContextThemeWrapper类的 context ;
[0052] 重写单元,适于重写用于加载所述插件的资源和可执行代码的方法函数,在所述 重写后的函数中返回所述插件的context。
[0053] 可选地,所述用于加载所述插件的资源和可执行代码的方法函数,包括:
[0054] getClassLoader、getResources 和 getAssets〇
[0055] 可选地,所述装置还包括:插件下载模块;
[0056] 所述插件下载模块包括:
[0057] 可用判断单元,适于在所述插件被触发前或所述插件被触发时,判断所述插件是 否可用;
[0058] 请求发送单元,适于当所述插件不可用时,向服务器发送获取插件列表的请求;其 中,所述插件列表中保存有所述主应用所包括的插件的插件名称、插件版本、插件的数字摘 要值以及插件的下载地址。
[0059] 列表接收单元,适于接收发送的所述插件列表;
[0060] 插件下载单元,适于根据所述插件列表中所述插件的下载地址下载新版本的插 件。
[0061] 可选地,所述装置还包括:
[0062] 验证模块,适于在根据所述插件列表中所述插件的下载地址下载新版本的插件之 后,验证下载得到的新版本的插件的数字摘要值与插件列表中保存的摘要值是否相同,当 相同时,执行所述获取所述插件的资源的步骤。
[0063] 可选地,所述装置还包括;
[0064] 入口实现模块,适于替换操作系统的ClassLoader对象为所述主应用自定义的 ClassLoader 对象;
[0065] 其中,所述自定义的ClassLoader对象用于实现所述插件的加载。
[0066] 依据本发明的另一个方面,提供一种移动终端,所述移动终端包括:
[0067] 存储器;
[0068] 一个或多个处理器;
[0069] 其中,所述一个或多个处理器被配置为执行如下方法:
[0070] 当插件被触发时,获取所述插件的资源;
[0071] 新建所述插件的上下文context,并将操作系统预先为所述插件的主应用的分配 的context替换为所述插件的context,其中所述插件的context指向所述插件的资源;
[0072] 所述主应用根据被替换后的context加载所述插件的资源,其中,所述被替换后 的context为所述插件的context。
[0073] 本发明实施例提供了一种加载插件的方法、装置和移动终端,通过当插件被触发 时,获取插件的资源,新建插件的context,并将操作系统预先为插件的主应用的分配的 context替换为插件的context,根据被替换后的context加载插件的资源,可以解决在 Android原生系统下由于不能获取插件context导致的不能加载插件的资源的问题,并且 该方法对系统生成的其他对象没有影响,不会导致兼容性问题,即使系统发生了演进,插件 仍然能够正确加载。
[0074] 上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段, 而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够 更明显易懂,以下特举本发明的【具体实施方式】。
[0075] 根据下文结合附图对本发明具体实施例的详细描述,本领域技术人员将会更加明 了本发明的上述以及其他目的、优点和特征。
【附
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1