一种创建插件方法及装置的制作方法

文档序号:6374294阅读:134来源:国知局
专利名称:一种创建插件方法及装置的制作方法
技术领域
本申请涉及插件处理的技术领域,特别是涉及一种创建插件方法及装置。
背景技术
在软件开发中,为了方便对软件进行功能扩展,往往采用插件方式进行开发,将软件所能实现的一个一个功能封装在插件中,最后将各个插件集成在软件主程序包中,通过与主程序代码文件一同发布实现插件的加载。插件使得程序运行时具有较高的运行效率,因此在现有的很多操作系统,例如Android系统,都具有相当广泛的应用。现有的创建插件的方式是在程序初始化和运行中对源文件进行编译,并打包生成插件包,得到所要加载的插件。目前插件使用过程中的一个问
题是缺乏安全性,因为插件在创建的过程中没有任何安全机制,极有可能被外部的脚本文件修改而添加一些不安全或恶意的代码,而且其安全性只能通过调试人员查看源文件来保证。但对于插件的广泛运用,通过这种方式保证安全性几乎是不可能的。因而,目前本领域技术人员迫切需要解决的一个技术问题就是如何保证创建的插件完整性和安全性,以确保用户使用插件的有效性。

发明内容
本申请提供了一种创建插件方法及装置,用以保证所述插件的完整性和安全性,保证所述插件在实际中的有效应用。为了解决上述问题,本申请公开了一种创建插件方法,包括生成待创建插件的配置文件,所述配置文件中包括定义的插件调用接口和回调接Π ;依据所述插件的配置文件实现所述定义的插件调用接口和回调接口 ;生成用于描述所述插件个性化信息的属性文件;根据所述插件调用接口和回调接口以及所述属性文件生成插件;对所述插件进行签名。优选地,所述调用接口包括插件环境配置接口和插件主调接口,所述回调接口包括插件生命周期接口和事件监听接口 ;其中,所述插件环境配置接口包括用于插件配置信息的配置接口 PluginEnv,用于插件初始化操作的初始化接口 prepare,用于当前插件版本信息的版本接口getVersion,用于验证插件正确性的验证接口 verifyPlugin,以及用于测试插件完整性的测试接口 testPlugin ;所述插件主调接口包括插件的主体部分PluginMain,用于插件初始化操作的初始化接口 prepare,用于构造插件UI界面的界面接口 buiIdMainView,以及用于关联插件的生命周期与主程序的关联接口 registePluginLifeCycle ;所述插件生命周期接口包括用于插件初始化数据时回调的初始化接口onPluginCreate,用于插件开始运行时回调的运行接口 onPluginStart,用于插件运行界面已经准备完毕时回调的准备接口 onPluginResume,用于当插件处于暂停状态时回调的暂停接口 onPluginPause,用于插件停止运行时回调的停止接口 onPluginStop,用于插件运行过程中出现错误时回调的错误接口 onPluginEiror,用于插件销毁时回调用的销毁接口 onPluginDestory,以及用于插件内部产生操作事件后回调到主程序的事件接口SetOnPluginEventListener ;所述事件监听接口包括用于插件内部产生操作事件后回调到主程序的事件接口SetOnPluginEventListenerο优选地,在所述依据插件的配置文件实现所述定义的插件调用接口和回调接口的步骤之前,还包括在操作系统平台上,新建一个空的工程;在所述工程中导入相关联库文件。优选地,所述操作系统平台为Android系统平台,所述插件为JAR插件,所述根据插件调用接口和回调接口以及所述属性文件生成插件的步骤包括将所述调用接口和回调接口编译成Java源程序.Java文件,将所述Java源程序.java文件转换成Java字节代码.Class文件;将所述Java字节代码.class文件打包成可执行文件classes, dex ;将所述可执行文件classes, dex和属性文件打包成JAR插件。优选地,在所述对插件进行签名的步骤之后,还包括将所述插件中的冗余数据和无效数据进行删除。本申请实施例还公开了一种创建插件的装置,包括接口定义模块,用于生成待创建插件的配置文件,所述配置文件中定义的插件调用接口和回调接口;接口实现模块,用于依据所述插件的配置文件实现所述定义的插件调用接口和回调接口 ;属性文件生成模块,用于生成属性文件,所述属性文件用于描述所述插件的个性化信息;插件生成模块,用于根据所述插件调用接口和回调接口以及所述属性文件生成插件; 签名模块,用于对所述插件进行签名。优选地,所述调用接口包括插件环境配置接口和插件主调接口,所述回调接口包括插件生命周期接口和事件监听接口 ;其中,所述插件环境配置接口包括用于插件配置信息的配置接口 PluginEnv,用于插件初始化操作的初始化接口 prepare,用于当前插件版本信息的版本接口getVersion,用于验证插件正确性的验证接口 verifyPlugin,以及用于测试插件完整性的测试接口 testPlugin ;所述插件主调接口包括插件的主体部分PluginMain,用于插件初始化操作的初始化接口 prepare,用于构造插件UI界面的界面接口 buiIdMainView,以及用于关联插件的生命周期与主程序的关联接口 registePluginLifeCycle ;
所述插件生命周期接口包括用于插件初始化数据时回调的初始化接口onPluginCreate,用于插件开始运行时回调的运行接口 onPluginStart,用于插件运行界面已经准备完毕时回调的准备接口 onPluginResume,用于当插件处于暂停状态时回调的暂停接口 onPluginPause,用于插件停止运行时回调的停止接口 onPluginStop,用于插件运行过程中出现错误时回调的错误接口 onPluginEiror,用于插件销毁时回调用的销毁接口 onPluginDestory,以及用于插件内部产生操作事件后回调到主程序的事件接口SetOnPluginEventListener ;所述事件监听接口包括用于插件内部产生操作事件后回调到主程序的事件接口SetOnPluginEventListenerο优选地,还包括工程新建模块,用于在操作系统平台上,新建一个空的工程;关联库导入模块,用于在所述工程中导入相关联库文件。优选地,操作系统平台为Android系统平台,所述插件为JAR插件,所述插件生成模块包括编译子模块,用于将所述调用接口和回调接口编译成Java源程序.java文件;转换子模块,用于将所述Java源程序.java文件转换成Java字节代码.Class文件;可执行文件打包子模块,用于将所述Java字节代码.class文件打包成可执行文件 classes, dex ;插件打包子模块,用于将所述可执行文件classes, dex和属性文件打包成JAR插件。优选地,所述装置还包括优化模块,用于将所述插件中的冗余数据和无效数据进行删除。与现有技术相比,本申请包括以下优点本申请通过在创建插件的过程中,针对插件整体进行签名,具体通过定义和实现所述插件的调用接口和回调接口,并根据该调用接口和回调接口,运用jar命令生成插件,最后对所述插件进行数字签名,使得主程序在加载插件时可以依据所述签名对插件进行验证,并只在验证通过的情况下加载所述插件,因此,可以提高插件的完整性和安全性,避免插件被非法篡改,保证加载的插件在实际中的有效应用,从而减少了网络传输过程中出现数据错误,避免因为出现异常而导致反复下载或加载而增加的时间成本和流程成本。


通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中图I是本申请的创建插件的方法实施例一的步骤流程图;图2是本申请的创建插件的方法中插件环境配置接口的代码示意图;图3是本申请的创建插件的方法中插件主调接口的代码示意图;图4是本申请的创建插件的方法中生命周期接口的代码示意图5是本申请的创建插件的方法中事件监听接口的代码示意图;图6是本申请的创建插件的方法实施例二的步骤流程图;图7是本申请的创建插件的装置实施例的结构示意图。
具体实施例方式下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。本申请实施例的核心构思之一在于,在创建插件的过程中,针对插件整体进行签名,使得主程序在加载插件时可以依据所述签名对插件进行验证,并只在验证通过的情况
下加载所述插件,从而进一步提高插件的安全性。参照图1,示出本申请的一种创建插件的方法实施例一的步骤流程图,具体可以包括以下步骤步骤101,生成待创建插件的配置文件,所述配置文件中包括定义的插件调用接口和回调接口。为了方便调用插件功能,规避使用反射机制,可以将待创建插件提供的功能抽象成接口的形式,生成待创建插件的配置文件。使得接口与具体的实现分离。同时,考虑到有些调用需要传回数据,在定义的插件调用接口的同时,可以定义相对应的回调接口。在本申请实施例具体应用的一种示例中,所涉及的调用接口可以包括插件环境配置接口(Plug-in Environment Profile Interface)和插件主调接口(Plus-in MainInterface)。如图2所示,所述插件环境配置接口主要用于存储插件配置信息,验证插件正确性,测试插件完整性以及插件的初始化操作。所述插件环境配置接口可以包括用于插件配置信息的配置接口 PluginEnv ;用于插件初始化操作的初始化接口 prepare ;用于当前插件版本信息的版本接口 getVersion ;用于验证插件正确性的验证接口 verifyPlugin,例如实现该接口的时候可以鉴权当前系统环境是否与该插件匹配,该插件是否与调用者版本匹配等条件;以及用于测试插件完整性的测试接口 testPlugin,在实现的时候可以遍历该插件提供功能,检测功能是否完整且正确,并将检测结果返回。其余属于具体功能的接口,可以根据需要自定义。所述插件主调接口主要是完成插件构建和提供主要功能调用接口。如图3所示,所述插件主调接口可以包括插件的主体部分PluginMain,该主体部分主要提供界面的构造,监听器的注册,生命周期的控制以及主要功能的实现;用于插件初始化操作的初始化接口 prepare ;用于构造插件UI界面的界面接口 buildMainView ;用于关联插件的生命周期与主程序的关联接口 registePluginLifeCycle,该关联接口使主程序能够获取插件的运行状态;以及用于插件内部产生操作事件后回调到主程序的事件接口 SetOnPluginEventListener。本领域技术人员还可以扩展定义其他的事件接口,以事件接口 SetOnPluginEventListener为例,例如可以增加用于实现对触摸事件回调的触摸接口 setOnPluginTouchListener,或用于实现对点击事件回调的点击接口 setOnPluginClickListener。另外,还可以增加用来销毁插件、释放内存的销毁接口onDestory0所述插件环境配置接口和插件主调接口是插件中最重要的也是主体部分。其余功能性接口可以参考所述主体部分PluginMain来实现。在本申请实施例所涉及的回调接口可以包括插件生命周期接口和事件监听接口。所述插件生命周期接口可以用于主程序与插件运行状态之间的通信。该接口可以在主程序中实现。如图4所示,所述插件生命周期接口可以包括用于插件初始化数据时回调的初始化接口 onPluginCreate,用于插件开始运行时回调的运行接口 onPluginStart,用于插件运行界面已经准备完毕时回调的准备接口 onPluginResume,用于当插件处于暂停状态时回调的暂停接口 onPluginPause,用于插件停止运行时回调的停止接口 onPluginStop,用于插件运行过程中出现错误时回调的错误接口 onPluginEiror,以及插件销毁时回调用的onPluginDestory接口。回调接口可以对插件的运行状态进行详细的拆分,可以使主程序精准把握插件的运行状态。所述事件监听接口主要用于用户操作事件的传递。如图5所示,所述事件监听接口包括用于插件内部产生操作事件后回调到主程序的事件接口 setOnPluginEventListener。步骤102,依据所述插件的配置文件实现所述定义的插件调用接口和回调接口。具体的,调用接口和回调接口中声明了方法,但不定义方法体,因此接口只是定义了一组对外的公共接口。与类相比,接口只规定了一个类的基本形式,不涉及任何实现细节。依据所述插件的配置文件实现所述定义的插件调用接口和回调接口就是指类实现插件的调用接口和回调接口,基本上类似于类的继承,但调用接口和回调接口的实现是通过关键字implements来实现的。实现调用接口和回调接口的类具有接口规定的行为,而且要实现调用接口和回调接口中的所有方法。在类中实现接口所定义的方法时,方法的声明与接口所定义的完全一致。步骤103,生成用于描述所述插件个性化信息的属性文件。生成的用于描述所述插件个性化信息的属性文件是操作系统平台上开发所述插件的全局配置文件。所述属性文件提供了操作系统平台所需要的关于所述插件的信息,即在所述插件的任何代码运行之前操作系统平台所拥有的信息。本申请优选的一个实施例中,可以生成添加了所述插件版本信息的manifest属性文件,所述版本信息可以包括所述插件的版本号。步骤104,根据所述插件调用接口和回调接口以及所述属性文件生成插件。本步骤生成插件的过程可以采用各种方式,在本申请的一种优选实施例中,所述操作平台为Android平台,所述插件为JAR插件,具体的,根据所述调用接口和回调接口编写Java源程序.java文件,并编译生成Java字节代码.class文件,然后通过jar命令将字节代码.class文件打包成可执行文件classes, dex,最后将可执行文件classes, dex和属性文件打包生成JAR插件。步骤105,对所述插件进行签名。为了避免插件被非法篡改,确保插件被合法并且安全的使用,对所述插件进行签名可以通过多种方法来实现。在本申请实施例具体应用的一种示例中,使用jarsigner签名工具对JAR插件进行签名。具体的,所述jarsigner签名工具首先对要签名的JAR插件创建MD5值,然后使用JAR插件的私钥来加密上述MD5值,最后将被加密的MD5值和所述插件的数字证书插入到要签名的JAR插件中,这样就完成了 JAR插件的数字签名过程。在加载所述插件时需要对所述数字签名进行验证,若验证通过,说明所述插件是合法的,可以安全使用。否则,验证不通过,不加载所述插件。在本申请实施例具体应用的一种示例中,可以加载所述插件。将所述插件进行加载可以采用常见的加载方法,例如,采用系统提供的类加载器,如引导加载器(Bootstrapclass loader)、扩展加载器(Extensions class loader)、系统加载器等等。可以理解,力口载插件还可以采用自定的类加载器来实现加载。例如,通过继承java. lang. ClassLoader类的方式实现的类加载器,从而满足特殊的需求。参照图6,示出本申请的一种创建插件的方法实施例二的步骤流程图,在本实施例中,所述操作系统平台为Android系统平台,所述插件为JAR插件,所述实施例具体包括如下步骤步骤601,在操作系统平台上,新建一个空的Android工程。具体的,在开发环境中新建一个Android的工程,所述Android工程包括Java基本库。步骤602,在所述Android工程中导入相关联库文件。具体的,所述相关联库文件包括需应用的库函数,主程序调用插件时所需服务性文件。 步骤603,在所述导入了相关联库文件的Android工程中,生成待创建插件的配置文件,所述配置文件中包括定义的插件调用接口和回调接口。步骤604,在所述导入了相关联库文件的Android工程中,依据所述插件的配置文件实现所述定义的插件调用接口和回调接口。步骤605,将所述调用接口和回调接口编译成Java源程序.java文件,将所述Java源程序.java文件转换成Java字节代码.class文件。例如,可以使用Java编译器编译所述Java源程序.java文件,然后将所述Java源程序.java文件转换成Java字节代码.class文件。步骤606,将所述Java字节代码.class文件打包成可执行文件classes, dex。例如,可以使用dx. bat工具,将Java字节代码.class文件打包成可执行文件classes, dex。步骤607,生成用于描述所述插件个性化信息的属性文件。步骤608,将所述可执行文件classes, dex和属性文件打包成JAR插件。例如,可以使用jar命令,将所述可执行文件classes, dex和属性文件打包成JAR插件。步骤609,对所述插件进行签名。具体的,本申请实施例中对所述插件进行签名可以通过MD5算法(MessageDigest Algorithm MD5,消息摘要算法第五版)计算出所述下载得到的插件的唯一 hash(哈希)值,即MD5值来实现。MD5算法的典型应用是对一段信息(Message)产生信息摘要(Message-Digest),以防止被篡改。MD5算法将整个文件当作一个大文本信息,通过其不可逆的字符串变换算法,产生了这个唯一的MD5信息摘要。当然,本领域技术人员根据实际情况采用其它算法计算可执行文件的哈希值均是可行的,例如采用sha-l、RIPEMD以及Haval等算法,本申请对此无需加以限制。数字签名(Digital Signature)是使用数字证书来识别软件的发布商和使用hash算法来确保软件的完整性一种技术。在Windows操作系统中,微软认证码技术使用Windows受信任的根证书颁发机构颁发的代码签名证书,对软件代码进行数字签名,从而保证了软件代码来自真实的发行者和保证软件代码没有被非法篡改。软件代码数字签名仍然采用PKI (Public Key Infrastructure,公钥基础设施)双钥技术,整个数字签名过程是,数据源发送方使用自己的私钥对数据校验和或其他与数据内容有关的变量进行加密处理,完成对数据的合法“签名”,数据接收方则利用对方的公钥来解读收到的“数字签名”,并将解读结果用于对数据完整性的检验,以确认签名的合法性。举例而言,生成数字签名的过程为I)对要签名的所述插件创建MD5值;2)使用所述插件的私钥来加密上述MD5值;3)将被加密的MD5值和所述插件的数字证书插入到要签名的所述插件。相应地,数字签名的验证过程为I)对要验证的所述插件创建MD5值;2)使用所述插件的公钥来解密被加密的MD5值;3)比较解密的MD5值和新创建的MD5值,如果匹配说明所述插件验证通过,反之,则说明验证未通过。若验证通过,则可以进行后续加载步骤,若验证未通过,则停止加载。优选地,在停止加载后,还可以增加相应的处理步骤。例如,重新请求服务器匹配,或者给出其它的下载地址重新下载插件等等,并重复验证,直到验证通过。步骤610,将所述插件中的冗余数据和无效数据进行删除。在本申请实施例具体应用的一种示例中,为了使所述插件在运行时与应用程序间的交互更加有效率,使用Android内置的优化工具zipalign对插件进行优化,将所述插件中的冗余数据和无效数据进行删除。具体的,应用所述优化工具zipalign,根据数据结构对齐标准DSA对所述插件进行对齐优化,去除冗余数据和删除无效数据,从而提高所述插件与应用程序间的交互效率。本申请的创建插件方法可以针对插件整体进行签名,具体是通过对插件的调用接口和回调接口进行定义,并实现所述调用接口和回调接口,然后根据所述调用接口和回调接口,运用相关jar命令生成插件,最后对所述插件进行数字签名,使得主程序在加载插件时可以依据所述签名对插件进行验证,并且,只在验证通过的情况下加载所述插件,因此,可以提高插件的完整性和安全性,避免插件被非法篡改,保证加载的插件在实际中的有效应用,从而减少了网络传输过程中出现数据错误,避免因为出现异常而导致反复下载或加载而增加的时间成本和流程成本。需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。参照图7,示出本申请的创建插件动态加载方法中插件的装置实施例的结构框图,具体可以包括如下模块接口定义模块701,用于生成待创建插件的配置文件,所述配置文件中包括定义的插件调用接口和回调接口。接口实现模块702,用于依据所述插件的配置文件实现所述定义的插件调用接口和回调接口。属性文件生成模块703,用于生成属性文件,所述属性文件用于描述所述插件的个
性化信息。插件生成模块704,用于根据所述插件调用接口和回调接口以及所述属性文件生成插件。签名模块705,用于对所述插件进行签名。实施例中,所述接口定义模块701可以包括所述调用接口包括插件环境配置接口和插件主调接口,所述回调接口包括插件生命周期接口和事件监听接口;其中,所述插件环境配置接口包括用于插件配置信息的配置接口 PluginEnv,用于插件初始化操作的初始化接口 prepare,用于当前插件版本信息的版本接口getVersion,用于验证插件正确性的验证接口 verifyPlugin,以及用于测试插件完整性的测试接口 testPlugin ;所述插件主调接口包括插件的主体部分PluginMain,用于插件初始化操作的初始化接口 prepare,用于构造插件UI界面的界面接口 buildMainView,以及用于关联插件的生命周期与主程序的关联接口 registePluginLifeCycle ;所述插件生命周期接口包括用于插件初始化数据时回调的初始化接口onPluginCreate,用于插件开始运行时回调的运行接口 onPluginStart,用于插件运行界面已经准备完毕时回调的准备接口 onPluginResume,用于当插件处于暂停状态时回调的暂停接口 onPluginPause,用于插件停止运行时回调的停止接口 onPluginStop,用于插件运行过程中出现错误时回调的错误接口 onPluginEiror,用于插件销毁时回调用的销毁接口 onPluginDestory,以及用于插件内部产生操作事件后回调到主程序的事件接口SetOnPluginEventListenerο所述事件监听接口包括用于插件内部产生操作事件后回调到主程序的事件接口SetOnPluginEventListenerο更为优选的是,所述的装置还可以包括以下模块工程新建模块,用于在操作系统平台上,新建一个空的工程;关联库导入模块,用于在所述工程中导入相关联库文件。在本申请的一种优选实施例中,操作系统平台为Android系统平台,所述插件为JAR插件,所述的插件生成模块还可以包括以下子模块编译子模块,用于将所述调用接口和回调接口编译成Java源程序.java文件;转换子模块,用于将所述Java源程序.java文件转换成Java字节代码.Class文件;可执行文件打包子模块,用于将所述Java字节代码.class文件打包成可执行文件 classes, dex ;
插件打包子模块,用于将所述可执行文件classes, dex和属性文件打包成JAR插件。在这种情况下,所述的装置还可以包括以下模块优化模块,用于将所述插件中的冗余数据和无效数据进行删除。对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。在此提供的算法和显示不与任 何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式
的权利要求书由此明确地并入该具体实施方式
,其中每个权利要求本身都作为本发明的单独实施例。本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP )来实现根据本发明实施例的中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
权利要求
1.一种创建插件方法,其特征在于,包括 生成待创建插件的配置文件,所述配置文件中包括定义的插件调用接口和回调接口 ; 依据所述插件的配置文件实现所述定义的插件调用接口和回调接口; 生成用于描述所述插件个性化信息的属性文件; 根据所述插件调用接口和回调接口以及所述属性文件生成插件; 对所述插件进行签名。
2.如权利要求I所述的方法,其特征在于,所述调用接口包括插件环境配置接口和插件主调接口,所述回调接口包括插件生命周期接口和事件监听接口 ; 其中,所述插件环境配置接口包括用于插件配置信息的配置接口 PluginEnv,用于插件初始化操作的初始化接口 prepare,用于当前插件版本信息的版本接口 getVersion,用于验证插件正确性的验证接口 verifyPlugin,以及用于测试插件完整性的测试接口testPlugin ; 所述插件主调接口包括插件的主体部分PluginMain,用于插件初始化操作的初始化接口 prepare,用于构造插件UI界面的界面接口 buildMainView,以及用于关联插件的生命周期与主程序的关联接口 registePluginLifeCycle ; 所述插件生命周期接口包括用于插件初始化数据时回调的初始化接口onPluginCreate,用于插件开始运行时回调的运行接口 onPluginStart,用于插件运行界面已经准备完毕时回调的准备接口 onPluginResume,用于当插件处于暂停状态时回调的暂停接口 onPluginPause,用于插件停止运行时回调的停止接口 onPluginStop,用于插件运行过程中出现错误时回调的错误接口 onPluginEiror,用于插件销毁时回调用的销毁接口 onPluginDestory,以及用于插件内部产生操作事件后回调到主程序的事件接口SetOnPluginEventListener ; 所述事件监听接口包括用于插件内部产生操作事件后回调到主程序的事件接口SetOnPluginEventListenerο
3.如权利要求I所述的方法,其特征在于,在所述依据插件的配置文件实现所述定义的插件调用接口和回调接口的步骤之前,还包括 在操作系统平台上,新建一个空的工程; 在所述工程中导入相关联库文件。
4.如权利要求3所述的方法,其特征在于,所述操作系统平台为Android系统平台,所述插件为JAR插件,所述根据插件调用接口和回调接口以及所述属性文件生成插件的步骤包括 将所述调用接口和回调接口编译成Java源程序.java文件,将所述Java源程序.java文件转换成Java字节代码.Class文件; 将所述Java字节代码.class文件打包成可执行文件classes, dex ; 将所述可执行文件classes, dex和属性文件打包成JAR插件。
5.如权利要求I或2或3所述的方法,其特征在于,在所述对插件进行签名的步骤之后,还包括 将所述插件中的冗余数据和无效数据进行删除。
6.一种创建插件的装置,其特征在于,包括接口定义模块,用于生成待创建插件的配置文件,所述配置文件中定义的插件调用接口和回调接口; 接口实现模块,用于依据所述插件的配置文件实现所述定义的插件调用接口和回调接Π ; 属性文件生成模块,用于生成属性文件,所述属性文件用于描述所述插件的个性化信息; 插件生成模块,用于根据所述插件调用接口和回调接口以及所述属性文件生成插件; 签名模块,用于对所述插件进行签名。
7.如权利要求6所述的装置,其特征在于,所述调用接口包括插件环境配置接口和插件主调接口,所述回调接口包括插件生命周期接口和事件监听接口 ; 其中,所述插件环境配置接口包括用于插件配置信息的配置接口 PluginEnv,用于插件初始化操作的初始化接口 prepare,用于当前插件版本信息的版本接口 getVersion,用于验证插件正确性的验证接口 verifyPlugin,以及用于测试插件完整性的测试接口testPlugin ; 所述插件主调接口包括插件的主体部分PluginMain,用于插件初始化操作的初始化接口 prepare,用于构造插件UI界面的界面接口 buildMainView,以及用于关联插件的生命周期与主程序的关联接口 registePluginLifeCycle ; 所述插件生命周期接口包括用于插件初始化数据时回调的初始化接口onPluginCreate,用于插件开始运行时回调的运行接口 onPluginStart,用于插件运行界面已经准备完毕时回调的准备接口 onPluginResume,用于当插件处于暂停状态时回调的暂停接口 onPluginPause,用于插件停止运行时回调的停止接口 onPluginStop,用于插件运行过程中出现错误时回调的错误接口 onPluginEiror,用于插件销毁时回调用的销毁接口 onPluginDestory,以及用于插件内部产生操作事件后回调到主程序的事件接口SetOnPluginEventListener ; 所述事件监听接口包括用于插件内部产生操作事件后回调到主程序的事件接口SetOnPluginEventListenerο
8.如权利要求6所述的装置,其特征在于,还包括 工程新建模块,用于在操作系统平台上,新建一个空的工程; 关联库导入模块,用于在所述工程中导入相关联库文件。
9.如权利要求6所述的装置,其特征在于,操作系统平台为Android系统平台,所述插件为JAR插件,所述插件生成模块包括 编译子模块,用于将所述调用接口和回调接口编译成Java源程序.java文件; 转换子模块,用于将所述Java源程序.java文件转换成Java字节代码.Class文件;可执行文件打包子模块,用于将所述Java字节代码.class文件打包成可执行文件classes, dex ; 插件打包子模块,用于将所述可执行文件classes, dex和属性文件打包成JAR插件。
10.如权利要求6或7或8所述的装置,其特征在于,所述装置还包括 优化模块,用于将所述插件中的冗余数据和无效数据进行删除。
全文摘要
本申请提供了一种创建插件方法及装置,其中,所述方法包括生成待创建插件的配置文件,所述配置文件中包括定义的插件调用接口和回调接口;依据所述插件的配置文件实现所述定义的插件调用接口和回调接口;生成用于描述所述插件个性化信息的属性文件;根据所述插件调用接口和回调接口以及所述属性文件生成插件;对所述插件进行签名。本申请可以提高插件的完整性和安全性,避免插件被非法篡改,保证加载的插件在实际中的有效应用。
文档编号G06F9/44GK102880456SQ20121027138
公开日2013年1月16日 申请日期2012年7月31日 优先权日2012年7月31日
发明者王鑫, 张建法 申请人:北京奇虎科技有限公司, 奇智软件(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1