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

文档序号:8412371阅读:来源:国知局
图说明】
[0076] 通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通 技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明 的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
[0077] 图1是本发明一个实施例提供的一种加载插件的方法流程图;
[0078] 图2是本发明一个实施例提供的一种加载插件的具体方法流程图;
[0079] 图3是本发明一个实施例提供的一种加载插件的装置结构框图。
【具体实施方式】
[0080] 下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开 的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应该被这里阐述的实施 例所限制。相反,提供这些实施例是为了能够透彻地理解本公开,并且能够将本公开的范围 完整的传达给本领域的技术人员。
[0081] 实施例一
[0082] 本发明实施例提供了一种加载插件的方法。其可以通过对Android下的应用程序 进行改进实现,实施在安装有Android操作系统的终端设备上,例如手机,平板、手持电脑 等用户移动终端设备。
[0083] 图1是本实施例提供的一种加载插件的方法流程图。该方法具体包括步骤S102 至步骤S106。
[0084] S102 :当插件被触发时,获取插件的资源。
[0085] S104 :新建插件的context,并将操作系统预先为插件的主应用的分配的context 替换为插件的context。
[0086] 其中,插件的context指向插件的资源。
[0087] S106 :主应用根据被替换后的context加载插件的资源,其中,被替换后的 context 为插件的 context。
[0088] 本发明实施例提供了一种加载插件的方法。当插件被触发时,获取插件的资源, 新建插件的context,并将操作系统预先为插件的主应用的分配的context替换为插件的 context,根据被替换后的context加载插件的资源,可以解决在Android原生系统下由于 不能获取插件context导致的不能加载插件的资源的问题,并且该方法对系统生成的其他 对象没有影响,不会导致兼容性问题,即使系统发生了演进,插件仍然能够正确加载。
[0089] 实施例二
[0090] 本实施例为上述实施例一的一种具体应用场景,通过本实施例,能够更加清楚、具 体地阐述本发明所提供的方法。
[0091] 如图2所示,为本发明实施例提供的一种加载插件的具体方法流程图,该方法包 括步骤S201至S206。
[0092] 首先,执行步骤S201,当插件被触发时,获取插件的安装包存档信息 PackageArchiveInfo0
[0093] 其中,插件即为主程序的一个模块。在基于插件开发的应用程序中,通常可包括多 个模块,其中每一个模块可通过一个插件进行实现。目前,由于Android下的应用程序的升 级不便,应用程序的插件化已成为一种趋势。
[0094]例如,在一款优化软件中,可以包括垃圾清理、自启动程序管理、木马扫描等功能, 其中,每一个功能可单独开发成一个模块,作为优化软件的一个插件。当优化软件需要增加 新功能"硬件测试"时,只需再写一个插件释放到主程序下即可,而无需更新整个应用程序, 开发者也不需再重新对整个应用程序进行打包编译。
[0095] 通常情况下,插件为一个apk文件,用户在下载后,可直接释放到主程序的指定目 录上,即完成了插件的安装。
[0096] 需要说明的是,为了使得插件能够被加载,在插件的apk内部应由开发者对其至 少规定一个入口(Entry),用于完成插件的加载过程。
[0097] 为了实现插件的入口,在本实施例中,可以采用如下方式:
[0098] 使用主程序中自定义的ClassLoader对象替换掉系统原生的ClassLoader对象。
[0099] 在自定义的ClassLoader中可以实现对应用程序的类或资源的特定加载方式,例 如,在加载插件的activity组件时,重定向应用程序的context为插件的context,以实现 对插件的完整加载。
[0100] 具体地,对于使用主程序中自定义的ClassLoader对象替换掉系统原生的 ClassLoader对象的方法可以包括:
[0101] 当应用程序的进程启动时,获取操作系统为应用程序建立的PackageInfo对象, 获取PackageInfo对象中的mClassLoader字段,修改mClassLoader字段中的地址,使其 指向自定义的ClassLoader对象地址,从而完成了自定义的ClassLoader对象对原生的 ClassLoader的替换,使得可以通过自定义的ClassLoader对象加载应用程序。
[0102] 对于插件的触发,通常可以包括两种情况:
[0103] 一种是用户的主动点击,当用户需要插件对应的功能时,点击该插件以启动。
[0104] 另一种是当主程序启动时,触发插件自动加载。例如,某些优化功能,在主程序启 动时即需要插件运行。
[0105] 在本步骤S201中,获取插件的安装包存档信息PackageArchiveInfo可通过如下 方法:
[0106] 首先,获取插件的PackageManager的对象;
[0107] 然后,再调用mContext. getPackageManagerO接口来实现获取插件的安装包存 档信息。
[0108] 例如,在本实施例中,将PackageManager对象定义为pm,则可通过如下代码实现 获取插件的PackageManager对象:
[0109]
【主权项】
1. 一种加载插件的方法,包括: 当插件被触发时,获取所述插件的资源; 新建所述插件的上下文context,并将操作系统预先为所述插件的主应用的分配的context替换为所述插件的context,其中所述插件的context指向所述插件的资源; 所述主应用根据被替换后的context加载所述插件的资源,其中,所述被替换后的context为所述插件的context。
2. 根据权利要求1所述的方法,其中,在获取所述插件的资源之前,还包括: 获取所述插件的安装包存档信息。
3. 根据权利要求2所述的方法,其中,所述获取所述插件的安装包存档信息,包括: 获取所述插件的PackageManager对象; 根据所述PackageManager对象获取所述插件的安装包存档信息; 将所述安装包存档信息下的预设变量修改为预设路径; 其中,所述预设路径为所述插件的存储路径。
4. 根据权利要求1至3任一项所述的方法,其中,在新建所述插件的context之前,所 述方法还包括: 新建所述插件的DexClassLoader类; 其中,所述DexClassLoader类用来传递所述插件的可执行代码路径。
5. 根据权利要求4所述的方法,其中,所述新建所述插件的上下文context,并将操作 系统预先为所述插件的主应用的分配的context替换为所述插件的context,包括: 为所述插件建立继承自ContextThemeWrapper类的context; 重写用于加载所述插件的资源和可执行代码的方法函数,在所述重写后的函数中返回 所述插件的context。
6. 根据权利要求5所述的方法,其中,所述用于加载所述插件的资源和可执行代码的 方法函数,包括: getClassLoader、getResources和getAssets。
7. 根据权利要求1所述的方法,其中,在所述插件被触发前或所述插件被触发时,所述 方法还包括: 判断所述插件是否可用; 当所述插件不可用时,向服务器发送获取插件列表的请求;其中,所述插件列表中保存 有所述主应用所包括的插件的插件名称、插件版本、插件的数字摘要值以及插件的下载地 址。 接收发送的所述插件列表; 根据所述插件列表中所述插件的下载地址下载新版本的插件。
8. 根据权利要求7所述的方法,其中,所述根据所述插件列表中所述插件的下载地址 下载新版本的插件之后,所述方法还包括: 验证下载得到的新版本的插件的数字摘要值与插件列表中保存的摘要值是否相同,当 相同时,执行所述获取所述插件的资源的步骤。
9. 根据权利要求1所述的方法,其中,所述方法还包括; 替换操作系统的ClassLoader对象为所述主应用自定义的ClassLoader对象; 其中,所述自定义的ClassLoader对象用于实现所述插件的加载。
10. -种加载插件的装置,包括: 资源获取模块,适于当插件被触发时,获取所述插件的资源; 第一建立模块,适于新建所述插件的上下文context,并将操作系统预先为所述插件的 主应用的分配的context替换为所述插件的context,其中所述插件的context指向所述插 件的资源; 加载模块,适于所述主应用根据被替换后的context加载所述插件的资源,其中,所述 被替换后的context为所述插件的context。
【专利摘要】本发明提供了一种加载插件的方法、装置和移动终端,涉及计算机领域。本发明实施例通过当插件被触发时,获取插件的资源,新建插件的context,并将操作系统预先为插件的主应用的分配的context替换为插件的context,根据被替换后的context加载插件的资源,可以解决在Android原生系统下由于不能获取插件context导致的不能加载插件的资源的问题,并且该方法对系统生成的其他对象没有影响,不会导致兼容性问题,即使系统发生了演进,插件仍然能够正确加载。
【IPC分类】G06F9-445
【公开号】CN104731625
【申请号】CN201510142846
【发明人】宋照春, 张炅轩, 姚彤
【申请人】北京奇虎科技有限公司, 奇智软件(北京)有限公司
【公开日】2015年6月24日
【申请日】2015年3月27日
当前第2页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1