一种应用程序的加载方法、装置和移动终端的制作方法

文档序号:8412368阅读:283来源:国知局
一种应用程序的加载方法、装置和移动终端的制作方法
【技术领域】
[0001] 本发明涉及计算机领域,具体涉及一种应用程序的加载方法、装置和移动终端。
【背景技术】
[0002] 目前,Android(安卓)操作系统在移动终端领域得到了广泛的应用,大量的手机、 平板电脑采用Android操作系统。在Android操作系统中,应用程序通过Java编译,并且 对每个应用程序提供了独立的Java虚拟机支持其运行,同时提供了大量的对象供虚拟机 使用。
[0003] 其中,ClassLoader对象为其中最重要的一个对象,其主要对类的请求提供服务, 用以在应用程序启动或运行时完成dex文件以及资源等文件的加载。但是由于Android操 作系统采用了较高的安全机制,ClassLoader对象对应用程序的限制也很明显。
[0004] 例如:ClassLoader对象提供的类只支持对应用程序的dex文件或资源文件的加 载,却不能支持对于应用程序下的插件的dex文件或资源文件的加载,导致开发者对于插 件的开发受限制很大。
[0005] 为了能够轻松灵活的开发Android下的应用程序,开发者希望能够重写Android 下的ClassLoader对象,也即自定义ClassLoader对象,以实现开发者希望的功能。但是目 前的情况是,在应用程序启动时,Android会默认使用自身的ClassLoader对象,而无法通 过自定义的ClassLoader对象去加载应用程序。

【发明内容】

[0006] 鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上 述问题的一种应用程序的加载方法、相应地装置和移动终端。
[0007] 依据本发明的一个方面,提供一种应用程序的加载方法,包括:
[0008] 当应用程序的进程启动时,获取操作系统为所述应用程序建立的PackageInfo对 象;
[0009] 获取所述PackageInfo对象中的mClassLoader字段,所述mClassLoader字段用 于存储指向ClassLoader对象的地址;
[0010] 修改所述mClassLoader字段中的地址,使其指向自定义的ClassLoader对象地 址;
[0011] 通过所述自定义的ClassLoader对象加载所述应用程序。
[0012] 可选地,当应用程序的进程启动时,还包括:
[0013] 重写当所述应用程序的进程启动时调用的指定方法函数,使所述调用的指定方法 函数触发获取操作系统进程为所述应用程序建立的PackageInfo对象的操作。
[0014] 可选地,所述获取操作系统为所述应用程序建立的PackageInfo对象,包括:
[0015] 获取所述应用程序的Application对象;
[0016] 获取所述Application对象中的mBase对象;
[0017] 读取所述mBase对象中的mPackagelnfo字段,通过所述mPackagelnfo字段获取 所述操作系统为所述应用程序建立的PackageInfo对象;
[0018] 其中,所述mPackagelnfo字段中存储有所述PackageInfo对象的地址。
[0019] 可选地,在获取所述PackageInfo对象中的mClassLoader字段之前,所述方法还 包括:
[0020] 生成自定义的ClassLoader对象。
[0021] 可选地,所述生成自定义的ClassLoader对象,包括:
[0022] 重写所述ClassLoader对象下的方法函数,且使所述自定义的ClassLoader对象 继承自所述操作系统的ClassLoader对象。
[0023] 依据本发明的另一个方面,提供一种应用程序的加载装置,包括:
[0024] 对象获取模块,适于当应用程序的进程启动时,获取操作系统为所述应用程序建 立的PackageInfo对象;
[0025] 地址获取模块,适于获取所述PackageInfo对象中的mClassLoader字段,所述 mClassLoader字段用于存储指向ClassLoader对象的地址;
[0026] 替换模块,适于修改所述mClassLoader字段中的地址,使其指向自定义的 ClassLoader对象地址;
[0027] 加载模块,使用通过所述自定义的ClassLoader对象加载所述应用程序。
[0028] 可选地,所述装置还包括:
[0029] 调用模块,适于当应用程序的进程启动时,重写当所述应用程序的进程启动时调 用的指定方法函数,使所述指定方法函数触发获取操作系统进程为所述应用程序建立的 PackageInfo对象的操作。
[0030] 可选地,所述对象获取模块,包括:
[0031] 第一对象获取单元,适于获取所述应用程序的Application对象;
[0032] 第二对象获取单元,适于获取所述Application对象中的mBase对象;
[0033] 第三对象获取单元,适于读取所述mBase对象中的mPackagelnfo字段,通过所述 mPackagelnfo字段获取所述操作系统为所述应用程序建立的PackageInfo对象;
[0034] 其中,所述mPackagelnfo字段中存储有所述PackageInfo对象的地址。
[0035] 可选地,所述装置还包括:
[0036] 对象生成模块,适于在获取所述PackageInfo对象中的mClassLoader字段之前, 生成自定义的ClassLoader对象。
[0037] 可选地,所述对象生成模块具体适于按照如下方式生成自定义的ClassLoader对 象:
[0038] 重写所述ClassLoader对象下的方法函数,且使所述自定义的ClassLoader对象 继承自所述操作系统的ClassLoader对象。
[0039] 依据本发明的另一个方面,提供一种移动终端,所述移动终端包括:
[0040] 存储器;
[0041] 一个或多个处理器;
[0042] 其中,所述一个或多个处理器被配置为执行如下方法:
[0043] 当应用程序的进程启动时,获取操作系统为所述应用程序建立的PackageInfo对 象;
[0044] 获取所述PackageInfo对象中的mClassLoader字段,所述mClassLoader字段用 于存储指向ClassLoader对象的地址;
[0045] 修改所述mClassLoader字段中的地址,使其指向自定义的ClassLoader对象地 址;
[0046] 通过所述自定义的ClassLoader对象加载所述应用程序。
[0047] 本发明实施例提供了一种应用程序的加载方法、装置和移动终端,当应用程序的 进程启动时,获取操作系统为应用程序建立的PackageInfo对象,获取PackageInfo对象中 的mClassLoader字段,修改mClassLoader字段中的地址,使其指向自定义的ClassLoader 对象地址,从而完成了自定义的ClassLoader对象对原生的ClassLoader的替换,使得可以 通过自定义的ClassLoader对象加载应用程序。本发明实施例所提供的方法,可以完整的 使用自定义的ClassLoader替换原有的ClassLoader,通过对ClassLoader下的方法函数进 行重写,可以使得应用程序下的任何组件均能被正常的加载,使得应用程序的加载更加灵 活,使用场景广泛,可以完成对插件的资源、类等的加载,由于为ClassLoader的整体替换, 使用者无需考虑ClassLoader的替换即可使用,调用方式更加自然。
[0048] 上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段, 而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够 更明显易懂,以下特举本发明的【具体实施方式】。
[0049] 根据下文结合附图对本发明具体实施例的详细描述,本领域技术人员将会更加明 了本发明的上述以及其他目的、优点和特征。
【附图说明】
[0050] 通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通 技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明 的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
[0051] 图1是本发明一个实施例提供的一种应用程序的加载方法流程图;
[0052] 图2是本发明一个实施例提供的一种应用程序的具体加载方法流程图;
[0053] 图3是本发明一个实施例提供的一种应用程序的加载装置结构框图。
【具体实施方式】
[0054] 下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开 的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应该被这里阐述的实施 例所限制。相反,提供这些实施例是为了能够透彻地理解本公开,并且能够将本公开的范围 完整的传达给本领域的技术人员。
[0055] 实施例一
[0056] 本发明实施例提供了一种应用程序的加载方法。其可以通过对Android下的待加 载的应用程序进行改进实现,实施在安装有Android操作系统的终端设备上,例如手机,平 板、手持电脑等用户移动终端设备。
[0057] 图1是本实施例提供的一种应用程序的加载方法流程图。其中,该方法实现在应 用程序的安装包中,并在应用程序被安装后,每次启动的时候进行执行。应用了本实施例 一所提供的方法的应用程序,可以在其启动时用自身的ClassLoader对象替换掉操作系统 原生的ClassLoader,进而通过自身的ClassLoader更灵活的对应用程序的资源、类等的加 载,尤其是可以实现对具有插件的应用程序的加载,解决目前的操作系统不支持插件的加 载的问题。
[0058] 例如,其可以实现在安全软件中,用于支持该安全软件下的各种插件的加载。
[0059] 具体地,本实施例所提供的方法具体包括步骤S102至步骤S108。
[0060] S102 :当应用程序的进程启动时,获取操作系统为应用程序建立的PackageInfo 对象。
[0061] S104 :获取 PackageInfo 对象中的 mClassLoader 字段。
[0062] 其中,mClassLoader字段用于存储指向ClassLoader对象的地址。
[0063] S1
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1