一种用于Android系统的插件加载方法及装置技术领域
本发明涉及插件技术领域,尤其涉及一种用于Android系统的插件加载方法及装
置。
背景技术
在现有技术中,随着Android系统和应用的不断迭代,应用包的体积不断增大,项
目越来越臃肿;项目新功能的添加,无法确定与用户匹配性;发生严重异常往往牵一发而动
全身,只能紧急发布补丁版本,强制用户进行更新。结果频繁的更新,反而容易降低用户使
用黏性。或者是公司业务的不断发展,业务越来越多,需要用户安装的同系应用越来越多,
传统方式需要通过安装引导用户下载新应用并安装,给用户操作带来极大的不便,同时转
化率较低。
故,有必要提出一种新的技术方案,以解决上述技术问题。
发明内容
有鉴于此,本发明的目的在于提供一种用于Android系统的插件加载方法及装置,
旨在解决现有技术中存在的需要用户安装的同系应用越来越多,传统方式需要通过安装引
导用户下载新应用并安装,给用户操作带来极大的不便,同时转化率较低的问题。
为解决上述技术问题,本发明实施例提供了以下技术方案:
本发明实施例提供了一种用于Android系统的插件加载方法,所述用于Android系统的
插件加载方法,包括以下步骤:
接收程序或者用户对插件入口的操作指令;
根据所述操作指令,判断所述插件是否存在;
如果判断出所述插件存在,则启动插件进程解析并运行所述插件的安装包;
启动所述插件对应的代理类;
实例化插件类,并对插件类进行动态注入所述代理类对应的属性值,以使所述插件加
载完成;
对所述插件类进行生命周期进行回调,完成模拟Android运行时环境。
为解决上述技术问题,本发明实施例还提供了以下技术方案:
本发明实施例还提供了一种用于Android系统的插件加载装置,所述用于Android系统
的插件加载装置,包括:
接收模块,用于接收程序或者用户对插件入口的操作指令;
判断模块,用于根据所述操作指令,判断所述插件是否存在;
解析模块,用于如果判断出所述插件存在,则启动插件进程解析并运行所述插件的安
装包;
启动模块,用于启动所述插件对应的代理类;
注入模块,用于实例化插件类,并对插件类进行动态注入所述代理类对应的属性值,以
使所述插件加载完成;
回调模块,用于对所述插件类进行生命周期进行回调,完成模拟Android运行时环境。
相对于现有技术,本发明的用于Android系统的插件加载方法及装置,通过插件可
以实现将自己的应用分拆,某些功能可以在插件中实现,用到时再进行下载,而且不用预集
成或者安装。如果有新功能的添加,不需要更新应用,只要预留插件管理,便可以通过添加
插件的方式,动态更新自己的应用;该功能需要改进或扩展,更新插件即可,无需频繁安装
或卸载。对应同系应用,正常的引流方式只能引导用户进行新应用的下载和安装;如果使用
插件化开发,则无需安装应用,关闭插件功能也十分方便,省去应用安装和卸载的过程,可
以实现无缝引流。
附图说明
图1是本发明实施例一提供的用于Android系统的插件加载方法的实现流程示意
图;
图2是本发明实施例二提供的用于Android系统的插件加载方法的实现流程示意图;
图3是本发明实施例三提供的用于Android系统的插件加载装置的模块示意图;
图4是本发明实施例四提供的用于Android系统的插件加载装置的模块示意图。
具体实施方式
请参照附图中的图式,其中相同的组件符号代表相同的组件,本发明的原理是以
实施在一适当的运算环境中来举例说明。以下的说明是基于所示例的本发明的具体实施
例,其不应被视为限制本发明未在此详述的其它具体实施例。
本发明原理以上述文字来说明,其并不代表为一种限制,本领域技术人员将可了
解到以下所述的多种步骤及操作亦可实施在硬件当中。本发明的原理使用许多其它泛用性
或特定目的运算、通信环境或组态来进行操作。
本发明提供的用于Android系统的插件加载方法及装置,主要应用于终端设备,
如:手机、电脑、个人数字助理(Personal Digital Assistant,PDA)等。
以下将分别进行详细说明。
实施例一
请参阅图1,所示为本发明实施例提供的用于Android系统的插件加载方法。
所述用于Android系统的插件加载方法,应用于终端设备中,具体包括如下步骤:
在步骤S101中,接收程序或者用户对插件入口的操作指令;
在本发明实施例中,插件为:免安装运行的dex或者apk文件。
在步骤S102中,根据所述操作指令,判断所述插件是否存在;
在本发明实施例中,如果判断出所述插件不存在,则下载最新插件。
在步骤S103中,如果判断出所述插件存在,则启动插件进程解析并运行所述插件
的安装包;
在本发明实施例中,如果判断出所述插件存在,则进一步判断所述插件是否为最新版
本的插件,如果判断出是最新版本的插件,则启动插件进程解析并运行所述插件的安装包。
如果判断出不是最新版本的插件,则下载最新插件。
其中,解析所述插件的安装包,初始化该APK的文件包信息(PackageInfo);初始化
该APK对应的类装载器(DexClassloader);初始化该APK对应的资源管理器
(AssetManager);初始化该APK对应的资源(Resources);借助初始化好的资源管理器
(AssetManager)解析APK包中的AndroidManifest.xml配置文件。
在步骤S104中,启动所述插件对应的代理类;
进一步的,修改代理类(ProxyActivity)的获取资源(getResources())和资源管理器
(getAssets())方法的返回值为相应的插件对象,实现插件Activity中可以获取到APK包中
drawable和assets目录下的内容;修改代理类(ProxyActivity)的获取包管理类方法
(getPackageManager())的返回值为插件自定义PackageManager,实现在插件中能直接获
取到插件本身APK包的PackageInfo等信息。
在步骤S105中,实例化插件类,并对插件类进行动态注入所述代理类对应的属性
值,以使所述插件加载完成;
具体的,通过调用其类装载器(DexClassloader)的装载类(loadClass)的方法实现对
插件安装包中类的加载。
在本发明实施例中,所述对插件类进行动态注入所述代理类对应的属性值的步
骤,具体包括但不限于以下几点:
对插件类进行动态注入资源及元数据接口,便于运行时实现资源和元数据的存取。
对插件类进行动态注入自定义Instrumentation实现对跳转类的重定向;其中,自
定义Instrumentation注入插件Activity中,当插件Activity需要进行跳转时,重定向
Intent中指定的类名为相应类型的代理类,再由系统启动代理Activity。
对插件类进行动态注入宿主Window对象实现对插件界面的展示以及交互。其中,
对插件类进行动态注入宿主Window对象实现对插件界面的展示以及交互的步骤,具体包
括:通过Java的反射机制将代理Activity动态注入至newInstance生成的Activity类中,将
其转变成伪Activity类;此时的插件Activity类可以自主控制ProxyActivity的屏幕
(PhoneWindow)
在步骤S106中,对所述插件类进行生命周期进行回调,完成模拟Android运行时环境。
在本发明实施例中,对所述插件类进行生命周期进行回调后,用户与插件便可开
始交互。
实施例二
请参阅图2,作为本发明另一实施例,当应用需要增加新功能时,所述方法还包括:
在步骤S201中,获取动态功能列表;
在步骤S202中,检查该列表中的功能对应的插件是否存在;
在步骤S203中,如果存在,则解析所述插件的安装包;如果不存在,则下载该功能对应
的插件文件。
在步骤S204中,对插件进行预加载;
在步骤S205中,接收用户选择的功能;
在步骤S206中,启动所述选择的功能对应的插件,此时,用户与新功能便可开始交互。
由上可知,本发明提供的用于Android系统的插件加载方法,通过插件可以实现将
自己的应用分拆,某些功能可以在插件中实现,用到时再进行下载,而且不用预集成或者安
装。如果有新功能的添加,不需要更新应用,只要预留插件管理,便可以通过添加插件的方
式,动态更新自己的应用;该功能需要改进或扩展,更新插件即可,无需频繁安装或卸载。对
应同系应用,正常的引流方式只能引导用户进行新应用的下载和安装;如果使用插件化开
发,则无需安装应用,关闭插件功能也十分方便,省去应用安装和卸载的过程,可以实现无
缝引流。
实施例三
请参阅图3,为本发明实施例提供的用于Android系统的插件加载装置,为了便于说明,
仅示出了与本发明实施例相关的部分。所述用于Android系统的插件加载装置包括:接收模
块101、判断模块102、解析模块103、启动模块104、注入模块105、回调模块106。所述用于
Android系统的插件加载装置可以是内置于终端设备中的软件单元、硬件单元或者是软硬
件结合的单元。
接收模块101,用于接收程序或者用户对插件入口的操作指令;
判断模块102,用于根据所述操作指令,判断所述插件是否存在;
解析模块103,用于如果判断出所述插件存在,则启动插件进程解析并运行所述插件的
安装包;
启动模块104,用于启动所述插件对应的代理类;
注入模块105,用于实例化插件类,并对插件类进行动态注入所述代理类对应的属性
值,以使所述插件加载完成;
回调模块106,用于对所述插件类进行生命周期进行回调,完成模拟Android运行时环
境。
作为本发明一实施例,所述用于Android系统的插件加载装置,还包括:
第一修改模块,用于修改代理类(ProxyActivity)的获取资源(getResources())和资
源管理器(getAssets())方法的返回值为相应的插件对象,实现插件Activity中可以获取
到APK包中drawable和assets目录下的内容;
第二修改模块,用于修改代理类(ProxyActivity)的获取包管理类方法
(getPackageManager())的返回值为插件自定义PackageManager,实现在插件中能直接获
取到插件本身APK包的PackageInfo等信息。
在本发明实施例中,所述注入模块包括:
注入子模块,用于对插件类进行动态注入自定义Instrumentation实现对跳转类的重
定向;以及
对象注入模块,用于对插件类进行动态注入宿主Window对象实现对插件界面的展示以
及交互。
具体的,
所述对象注入模块,还用于通过Java的反射机制将代理Activity动态注入至
newInstance生成的Activity类中,将其转变成伪Activity类;此时的插件Activity类自主
控制ProxyActivity的屏幕。
实施例四
请参阅图4,作为本发明另一实施例,所述用于Android系统的插件加载装置,还包括:
获取模块201,用于获取动态功能列表;
检查模块202,用于检查该列表中的功能对应的插件是否存在;
安装包解析模块203,用于如果存在,则解析所述插件的安装包;
加载模块204,用于对插件进行预加载;
功能接收模块205,用于接收用户选择的功能;
插件启动模块206,用于启动所述选择的功能对应的插件。
由上可知,本发明提供的用于Android系统的插件加载装置,通过插件可以实现将
自己的应用分拆,某些功能可以在插件中实现,用到时再进行下载,而且不用预集成或者安
装。如果有新功能的添加,不需要更新应用,只要预留插件管理,便可以通过添加插件的方
式,动态更新自己的应用;该功能需要改进或扩展,更新插件即可,无需频繁安装或卸载。对
应同系应用,正常的引流方式只能引导用户进行新应用的下载和安装;如果使用插件化开
发,则无需安装应用,关闭插件功能也十分方便,省去应用安装和卸载的过程,可以实现无
缝引流。
本发明实施例提供的用于Android系统的插件加载方法及装置属于同一构思,其
具体实现过程详见说明书全文,此处不再赘述。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可
以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储
介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,Random
Access Memory)、磁盘或光盘等。
综上所述,虽然本发明已以优选实施例揭露如上,但上述优选实施例并非用以限
制本发明,本领域的普通技术人员,在不脱离本发明的精神和范围内,均可作各种更动与润
饰,因此本发明的保护范围以权利要求界定的范围为准。