一种桌面应用程序插件化的实现方法技术

技术编号:13633195 阅读:77 留言:0更新日期:2016-09-02 15:51
本发明专利技术提供了一种桌面应用程序插件化的实现方法,包括:S1在桌面主程序中加入DroidPlugin框架;S2在主程序的Application的onCreate方法中初始化DroidPlugin模块;S3通过DroidPlugin中InstallPackage方法模拟系统的安装方式安装第三方应用程序;S4主程序进程监控S3中的信息流,在程序向系统抛出真实的启动方式之前进行拦截,步骤S2中的安装管理通过包名判断此次启动的组件是否属于已插件化安装的应用程序,如果是,则对启动方式进行替换;S5Android系统在收到新的Intent之后进行解析,对第三方应用程序进行初始化打开,以实现应用程序的插件化。

【技术实现步骤摘要】

本专利技术涉及移动终端桌面应用程序加载
,尤其涉及一种桌面应用程序插件化的实现方法
技术介绍
目前桌面程序由于有过多的第三方应用程序代码插入到主程序中,造成桌面程序包体过大,模块间耦合过于紧密导致的较高崩溃概率;而且安卓系统对于工程65536方法数量的限制问题。
技术实现思路
针对现有技术的不足,本专利技术的目的在于提供一种桌面应用程序插件化的实现方法。为实现上述目的,本专利技术采用的技术方案如下:一种桌面应用程序插件化的实现方法,所述方法包括以下步骤:S1、在桌面主程序中加入DroidPlugin框架;S2、在主程序的Application的onCreate方法中初始化DroidPlugin模块,此时DroidPlugin会对主程序的进程中的IActivityManager、IPackageManager以及WIFI、Notification、Windows相关的模块进行替换,使得主进程与系统ActivityManagerService和PackageManagerService的底层信息流可以在DroidPlugin模块内监控;S3、通过DroidPlugin中InstallPackage方法模拟系统的安装方式,把第三方应用程序的安装包中资源解压并拷贝到主程序的私有目录中,并将该应用
程序信息加入到主程序已安装程序的列表中,此时,主程序已安装程序列表包含系统原有的安装程序加上通过DroidPlugin安装的程序;当主程序需要启动已模拟安装的应用程序中的任一Activity、Service、Provider、Broadcast组件时,只需要按照Android系统规定的方式启动,如需要启动一个Activity界面,只需要在程序中向系统发送启动Intent,参数传入第三方应用程序的真实参数;S4、主程序进程监控步骤S3中的信息流,在程序向系统抛出真实的启动方式之前进行拦截,此时步骤S2中的安装管理通过包名判断此次启动的组件是否属于已插件化安装的应用程序,如果是,则对启动方式进行替换,新建一个Intent,将启动的对象替换为启动DroidPlugin中的组件,并把真实的启动Intent对象,包含在这个新的Intent中;S5、Android系统在收到新的Intent之后进行解析,发现这个Intent启动的对象是DroidPlugin的已经注册的组件时,系统为这个组件进行初始化,并最终又把Intent传回到主程序中,主程序在接收到已经经过系统处理的Intent之后,把之前存入的真实启动Intent对象取出,并利用反射的方式,对第三方应用程序进行初始化,并最终打开第三方应用程序中组件,达到不安装就可以打开第三方应用程序的目的,以实现应用程序的插件化。进一步,所述方法还包括如下步骤:S6、对插件应用程序的进程内存释放的管理,对插件应用程序运行过程进行监控,监控其Activity的启动与销毁,并记录当前进程中的Activity数量,在Activity启动时,数量+1,在Activity销毁时,数量-1,当维护的数量为0时,杀死对应的进程。进一步,所述对插件应用程序的进程内存释放的管理的实现步骤如下:在ActivityThread进程中,对mInstrumentation对象使用JAVA中的Proxy代理原理进行挂钩,Activity的生命周期通过代理通知控制模块;当mInstrumentation中调用onActivityCreate时,记录此时的pid进程号,同时记录当前Activity的类名到以Pid为key的数组中,并且遍历当前的数组,找到其他Pid,如果此进程不属于桌面应用程序独立化之后的账号服务进程,则调用Android系统提供的killProcess,杀死其它的进程;mInstrumentation调用onActivityDestory时,表示Activity已经被系统销毁,此时找到以Pid为Key的对应的Activity数组,将对应Activity类名移除,如果此时这个数组的数量为0,并且如果此进程不属于桌面应用程序独立化之后的账号服务进程,则调用Android系统提供的killProcess的方法,杀死这个进程,否则不做操作。相对于现有技术,本专利技术所述的技术方案利用DroidPlugin开源模块,建立一套动态加载的、免安装的打开第三方应用程序的框架,并在此基础上,从三个方面进行实现:第一,对原本属于桌面应用程序内部的桌面主题商店和账号的服务模块进行解耦处理,独立出这两块的功能,并生成一个独立的应用程序文件,这样既降低了模块间的耦合度,又减小了桌面应用程序包体大小,并且可以彻底的规避谷歌系统对于工程65536方法数量的限制问题;第二,通过动态管理和加载独立第三方应用程序,提供各类最便捷和专业的信息给用户,如点击桌面widget天气图标,跳过安装过程打开墨迹天气,点击桌面新闻widget,跳过安装过程打开今日头条等;第三,对桌面应用程序的进程内存管理,实现打开任何多个插件应用程序,桌面应用程序的运行内存都不会有过大
的增长。为了充分地了解本专利技术的目的、特征和效果,以下将结合附图对本专利技术的构思、具体结构及产生的技术效果作进一步说明。附图说明图1是本专利技术桌面应用程序插件化的实现方法的流程示意图。具体实施方式下面将结合附图以及具体实施方法来详细说明本专利技术,在本专利技术的示意性实施及说明用来解释本专利技术,但并不作为对本专利技术的限定。具体实施例如图1所示,一种桌面应用程序插件化的实现方法,所述方法包括以下步骤:S101:在桌面主程序中加入DroidPlugin框架;S102:在主程序的Application的onCreate方法中初始化DroidPlugin模块,此时DroidPlugin会对主程序的进程中的IActivityManager、IPackageManager以及WIFI、Notification、Windows相关的模块进行替换,相关模块具体包括:IAudioService、IClipboard、IContentService、IGraphicStats、IInputMethodManager、IMediaRouterService、IMountService、INotificationManager、ISearchManager、ISessionManager、IWifiManager、IWindowManager),使得主进程与系统ActivityManagerService和PackageManagerService的底层信息流可以在DroidPlugin模块内监控;S103:通过DroidPlugin中InstallPackage方法模拟系统的安装方式,把
第三方应用程序的安装包中资源解压并拷贝到主程序的私有目录中,并将该应用程序信息加入到主程序已安装程序的列表中,此时,主程序已安装程序列表包含系统原有的安装程序加上通过DroidPlugin安装的程序;当主程序需要启动已模拟安装的应用程序中的任一Activity、Service、Provider、Broadcast组件时,只需要按照Android系统规定的方式启动,如需要启动一个Activity界面,只需要在本文档来自技高网
...

【技术保护点】
一种桌面应用程序插件化的实现方法,其特征在于,所述方法包括以下步骤:S1、在桌面主程序中加入DroidPlugin框架;S2、在主程序的Application的onCreate方法中初始化DroidPlugin模块,此时DroidPlugin会对主程序的进程中的IActivityManager、IPackageManager以及WIFI、Notification、Windows相关的模块进行替换,使得主进程与系统ActivityManagerService和PackageManagerService的底层信息流可以在DroidPlugin模块内监控;S3、通过DroidPlugin中InstallPackage方法模拟系统的安装方式,把第三方应用程序的安装包中资源解压并拷贝到主程序的私有目录中,并将该应用程序信息加入到主程序已安装程序的列表中,此时,主程序已安装程序列表包含系统原有的安装程序加上通过DroidPlugin安装的程序;当主程序需要启动已模拟安装的应用程序中的任一Activity、Service、Provider、Broadcast组件时,只需要按照Android系统规定的方式启动,如需要启动一个Activity界面,只需要在程序中向系统发送启动Intent,参数传入第三方应用程序的真实参数;S4、主程序进程监控步骤S3中的信息流,在程序向系统抛出真实的启动方式之前进行拦截,此时步骤S2中的安装管理通过包名判断此次启动的组件是否属于已插件化安装的应用程序,如果是,则对启动方式进行替换,新建一个Intent,将启动的对象替换为启动DroidPlugin中的组件,并把真实的启动Intent对象,包含在这个新的Intent中;S5、Android系统在收到新的Intent之后进行解析,发现这个Intent启动的对象是DroidPlugin的已经注册的组件时,系统为这个组件进行初始化,并最终又把Intent传回到主程序中,主程序在接收到已经经过系统处理的Intent之后,把之前存入的真实启动Intent对象取出,并利用反射的方式,对第三方应用程序进行初始化,并最终打开第三方应用程序中组件,达到不安装就可以打开第三方应用程序的目的,以实现应用程序的插件化。...

【技术特征摘要】
1.一种桌面应用程序插件化的实现方法,其特征在于,所述方法包括以下步骤:S1、在桌面主程序中加入DroidPlugin框架;S2、在主程序的Application的onCreate方法中初始化DroidPlugin模块,此时DroidPlugin会对主程序的进程中的IActivityManager、IPackageManager以及WIFI、Notification、Windows相关的模块进行替换,使得主进程与系统ActivityManagerService和PackageManagerService的底层信息流可以在DroidPlugin模块内监控;S3、通过DroidPlugin中InstallPackage方法模拟系统的安装方式,把第三方应用程序的安装包中资源解压并拷贝到主程序的私有目录中,并将该应用程序信息加入到主程序已安装程序的列表中,此时,主程序已安装程序列表包含系统原有的安装程序加上通过DroidPlugin安装的程序;当主程序需要启动已模拟安装的应用程序中的任一Activity、Service、Provider、Broadcast组件时,只需要按照Android系统规定的方式启动,如需要启动一个Activity界面,只需要在程序中向系统发送启动Intent,参数传入第三方应用程序的真实参数;S4、主程序进程监控步骤S3中的信息流,在程序向系统抛出真实的启动方式之前进行拦截,此时步骤S2中的安装管理通过包名判断此次启动的组件是否属于已插件化安装的应用程序,如果是,则对启动方式进行替换,新建一个Intent,将启动的对象替换为启动DroidPlugin中的组件,并把真实的启动Intent对象,包含在这个新的Intent中;S5、Android系统在收到新的Intent之后进行解析,发现这个Intent启动的对象是DroidPlugin的已经注册的组件时,系统为这个组件进行初始化,...

【专利技术属性】
技术研发人员:邓裕强张杰敏郑相灿蒋旭文谭文浩
申请(专利权)人:广州市久邦数码科技有限公司广州恒业软件科技有限公司
类型:发明
国别省市:广东;44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1