CN102880456B - 插件加载方法及系统 - Google Patents

插件加载方法及系统 Download PDF

Info

Publication number
CN102880456B
CN102880456B CN201210271385.6A CN201210271385A CN102880456B CN 102880456 B CN102880456 B CN 102880456B CN 201210271385 A CN201210271385 A CN 201210271385A CN 102880456 B CN102880456 B CN 102880456B
Authority
CN
China
Prior art keywords
plug
interface
unit
file
readjustment
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201210271385.6A
Other languages
English (en)
Other versions
CN102880456A (zh
Inventor
王鑫
张建法
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Qizhi Business Consulting Co ltd
Beijing Qihoo Technology Co Ltd
Original Assignee
Beijing Qihoo Technology Co Ltd
Qizhi Software Beijing Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Qihoo Technology Co Ltd, Qizhi Software Beijing Co Ltd filed Critical Beijing Qihoo Technology Co Ltd
Priority to CN201210271385.6A priority Critical patent/CN102880456B/zh
Publication of CN102880456A publication Critical patent/CN102880456A/zh
Application granted granted Critical
Publication of CN102880456B publication Critical patent/CN102880456B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Stored Programmes (AREA)

Abstract

本申请提供了一种创建插件方法及装置,其中,所述方法包括:生成待创建插件的配置文件,所述配置文件中包括定义的插件调用接口和回调接口;依据所述插件的配置文件实现所述定义的插件调用接口和回调接口;生成用于描述所述插件个性化信息的属性文件;根据所述插件调用接口和回调接口以及所述属性文件生成插件;对所述插件进行签名。本申请可以提高插件的完整性和安全性,避免插件被非法篡改,保证加载的插件在实际中的有效应用。

Description

插件加载方法及系统
技术领域
本申请涉及插件处理的技术领域,特别是涉及一种创建插件方法及装置。
背景技术
在软件开发中,为了方便对软件进行功能扩展,往往采用插件方式进行开发,将软件所能实现的一个一个功能封装在插件中,最后将各个插件集成在软件主程序包中,通过与主程序代码文件一同发布实现插件的加载。
插件使得程序运行时具有较高的运行效率,因此在现有的很多操作系统,例如Android系统,都具有相当广泛的应用。现有的创建插件的方式是在程序初始化和运行中对源文件进行编译,并打包生成插件包,得到所要加载的插件。目前插件使用过程中的一个问题是缺乏安全性,因为插件在创建的过程中没有任何安全机制,极有可能被外部的脚本文件修改而添加一些不安全或恶意的代码,而且其安全性只能通过调试人员查看源文件来保证。但对于插件的广泛运用,通过这种方式保证安全性几乎是不可能的。
因而,目前本领域技术人员迫切需要解决的一个技术问题就是:如何保证创建的插件完整性和安全性,以确保用户使用插件的有效性。
发明内容
本申请提供了一种创建插件方法及装置,用以保证所述插件的完整性和安全性,保证所述插件在实际中的有效应用。
为了解决上述问题,本申请公开了一种创建插件方法,包括:
生成待创建插件的配置文件,所述配置文件中包括定义的插件调用接口和回调接口;
依据所述插件的配置文件实现所述定义的插件调用接口和回调接口;
生成用于描述所述插件个性化信息的属性文件;
根据所述插件调用接口和回调接口以及所述属性文件生成插件;
对所述插件进行签名。
优选地,所述插件调用接口包括插件环境配置接口和插件主调接口,所述回调接口包括插件生命周期接口和事件监听接口;
其中,所述插件环境配置接口包括:用于插件配置信息的配置接口PluginEnv,用于插件初始化操作的初始化接口prepare,用于当前插件版本信息的版本接口getVersion,用于验证插件正确性的验证接口verifyPlugin,以及用于测试插件完整性的测试接口testPlugin;
所述插件主调接口包括:插件的主体部分PluginMain,用于构造插件UI界面的界面接口buildMainView,以及用于关联插件的生命周期与主程序的关联接口registePluginLifeCycle;
所述插件生命周期接口包括:用于插件初始化数据时回调的初始化接口onPluginCreate,用于插件开始运行时回调的运行接口onPluginStart,用于插件运行界面已经准备完毕时回调的准备接口onPluginResume,用于当插件处于暂停状态时回调的暂停接口onPluginPause,用于插件停止运行时回调的停止接口onPluginStop,用于插件运行过程中出现错误时回调的错误接口onPluginError,用于插件销毁时回调用的销毁接口onPluginDestory,以及用于插件内部产生操作事件后回调到主程序的事件接口setOnPluginEventListener;
所述事件监听接口包括用于插件内部产生操作事件后回调到主程序的事件接口setOnPluginEventListener。
优选地,在所述依据插件的配置文件实现所述定义的插件调用接口和回调接口的步骤之前,还包括:
在操作系统平台上,新建一个空的工程;
在所述工程中导入相关联库文件。
优选地,所述操作系统平台为Android系统平台,所述插件为JAR插件,所述根据插件调用接口和回调接口以及所述属性文件生成插件的步骤包括:
将所述插件调用接口和回调接口编译成Java源程序.java文件,将所述Java源程序.java文件转换成Java字节代码.class文件;
将所述Java字节代码.class文件打包成可执行文件classes.dex;
将所述可执行文件classes.dex和属性文件打包成JAR插件。
优选地,在所述对插件进行签名的步骤之后,还包括:
将所述插件中的冗余数据和无效数据进行删除。
本申请实施例还公开了一种创建插件的装置,包括:
接口定义模块,用于生成待创建插件的配置文件,所述配置文件中定义的插件调用接口和回调接口;
接口实现模块,用于依据所述插件的配置文件实现所述定义的插件调用接口和回调接口;
属性文件生成模块,用于生成属性文件,所述属性文件用于描述所述插件的个性化信息;
插件生成模块,用于根据所述插件调用接口和回调接口以及所述属性文件生成插件;
签名模块,用于对所述插件进行签名。
优选地,所述插件调用接口包括插件环境配置接口和插件主调接口,所述回调接口包括插件生命周期接口和事件监听接口;
其中,所述插件环境配置接口包括:用于插件配置信息的配置接口PluginEnv,用于插件初始化操作的初始化接口prepare,用于当前插件版本信息的版本接口getVersion,用于验证插件正确性的验证接口verifyPlugin,以及用于测试插件完整性的测试接口testPlugin;
所述插件主调接口包括:插件的主体部分PluginMain,用于构造插件UI界面的界面接口buildMainView,以及用于关联插件的生命周期与主程序的关联接口registePluginLifeCycle;
所述插件生命周期接口包括:用于插件初始化数据时回调的初始化接口onPluginCreate,用于插件开始运行时回调的运行接口onPluginStart,用于插件运行界面已经准备完毕时回调的准备接口onPluginResume,用于当插件处于暂停状态时回调的暂停接口onPluginPause,用于插件停止运行时回调的停止接口onPluginStop,用于插件运行过程中出现错误时回调的错误接口onPluginError,用于插件销毁时回调用的销毁接口onPluginDestory,以及用于插件内部产生操作事件后回调到主程序的事件接口setOnPluginEventListener;
所述事件监听接口包括用于插件内部产生操作事件后回调到主程序的事件接口setOnPluginEventListener。
优选地,还包括:
工程新建模块,用于在操作系统平台上,新建一个空的工程;
关联库导入模块,用于在所述工程中导入相关联库文件。
优选地,操作系统平台为Android系统平台,所述插件为JAR插件,所述插件生成模块包括:
编译子模块,用于将所述插件调用接口和回调接口编译成Java源程序.java文件;
转换子模块,用于将所述Java源程序.java文件转换成Java字节代码.class文件;
可执行文件打包子模块,用于将所述Java字节代码.class文件打包成可执行文件classes.dex;
插件打包子模块,用于将所述可执行文件classes.dex和属性文件打包成JAR插件。
优选地,所述装置还包括:
优化模块,用于将所述插件中的冗余数据和无效数据进行删除。
与现有技术相比,本申请包括以下优点:
本申请通过在创建插件的过程中,针对插件整体进行签名,具体通过定义和实现所述插件的调用接口和回调接口,并根据该调用接口和回调接口,运用jar命令生成插件,最后对所述插件进行数字签名,使得主程序在加载插件时可以依据所述签名对插件进行验证,并只在验证通过的情况下加载所述插件,因此,可以提高插件的完整性和安全性,避免插件被非法篡改,保证加载的插件在实际中的有效应用,从而减少了网络传输过程中出现数据错误,避免因为出现异常而导致反复下载或加载而增加的时间成本和流程成本。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1是本申请的创建插件的方法实施例一的步骤流程图;
图2是本申请的创建插件的方法中插件环境配置接口的代码示意图;
图3是本申请的创建插件的方法中插件主调接口的代码示意图;
图4是本申请的创建插件的方法中生命周期接口的代码示意图;
图5是本申请的创建插件的方法中事件监听接口的代码示意图;
图6是本申请的创建插件的方法实施例二的步骤流程图;
图7是本申请的创建插件的装置实施例的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
本申请实施例的核心构思之一在于,在创建插件的过程中,针对插件整体进行签名,使得主程序在加载插件时可以依据所述签名对插件进行验证,并只在验证通过的情况下加载所述插件,从而进一步提高插件的安全性。
参照图1,示出本申请的一种创建插件的方法实施例一的步骤流程图,具体可以包括以下步骤:
步骤101,生成待创建插件的配置文件,所述配置文件中包括定义的插件调用接口和回调接口。
为了方便调用插件功能,规避使用反射机制,可以将待创建插件提供的功能抽象成接口的形式,生成待创建插件的配置文件。使得接口与具体的实现分离。同时,考虑到有些调用需要传回数据,在定义的插件调用接口的同时,可以定义相对应的回调接口。
在本申请实施例具体应用的一种示例中,所涉及的调用接口可以包括插件环境配置接口(Plug-in Environment Profile Interface)和插件主调接口(Plus-in Main Interface)。如图2所示,所述插件环境配置接口主要用于存储插件配置信息,验证插件正确性,测试插件完整性以及插件的初始化操作。所述插件环境配置接口可以包括:用于插件配置信息的配置接口PluginEnv;用于插件初始化操作的初始化接口prepare;用于当前插件版本信息的版本接口getVersion;用于验证插件正确性的验证接口verifyPlugin,例如实现该接口的时候可以鉴权当前系统环境是否与该插件匹配,该插件是否与调用者版本匹配等条件;以及用于测试插件完整性的测试接口testPlugin,在实现的时候可以遍历该插件提供功能,检测功能是否完整且正确,并将检测结果返回。其余属于具体功能的接口,可以根据需要自定义。
所述插件主调接口主要是完成插件构建和提供主要功能调用接口。如图3所示,所述插件主调接口可以包括插件的主体部分PluginMain,该主体部分主要提供界面的构造,监听器的注册,生命周期的控制以及主要功能的实现;用于构造插件UI界面的界面接口buildMainView;用于关联插件的生命周期与主程序的关联接口registePluginLifeCycle,该关联接口使主程序能够获取插件的运行状态;以及用于插件内部产生操作事件后回调到主程序的事件接口setOnPluginEventListener。本领域技术人员还可以扩展定义其他的事件接口,以事件接口setOnPluginEventListener为例,例如可以增加用于实现对触摸事件回调的触摸接口setOnPluginTouchListener,或用于实现对点击事件回调的点击接口setOnPluginClickListener。另外,还可以增加用来销毁插件、释放内存的销毁接口onDestory。
所述插件环境配置接口和插件主调接口是插件中最重要的也是主体部分。其余功能性接口可以参考所述主体部分PluginMain来实现。
在本申请实施例所涉及的回调接口可以包括插件生命周期接口和事件监听接口。所述插件生命周期接口可以用于主程序与插件运行状态之间的通信。该接口可以在主程序中实现。如图4所示,所述插件生命周期接口可以包括用于插件初始化数据时回调的初始化接口onPluginCreate,用于插件开始运行时回调的运行接口onPluginStart,用于插件运行界面已经准备完毕时回调的准备接口onPluginResume,用于当插件处于暂停状态时回调的暂停接口onPluginPause,用于插件停止运行时回调的停止接口onPluginStop,用于插件运行过程中出现错误时回调的错误接口onPluginError,以及插件销毁时回调用的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插件的数字签名过程。在加载所述插件时需要对所述数字签名进行验证,若验证通过,说明所述插件是合法的,可以安全使用。否则,验证不通过,不加载所述插件。
在本申请实施例具体应用的一种示例中,可以加载所述插件。将所述插件进行加载可以采用常见的加载方法,例如,采用系统提供的类加载器,如引导加载器(Bootstrap class loader)、扩展加载器(Extensionsclass 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算法(Message Digest Algorithm MD5,消息摘要算法第五版)计算出所述下载得到的插件的唯一hash(哈希)值,即MD5值来实现。MD5算法的典型应用是对一段信息(Message)产生信息摘要(Message-Digest),以防止被篡改。MD5算法将整个文件当作一个大文本信息,通过其不可逆的字符串变换算法,产生了这个唯一的MD5信息摘要。
当然,本领域技术人员根据实际情况采用其它算法计算可执行文件的哈希值均是可行的,例如采用sha-1、RIPEMD以及Haval等算法,本申请对此无需加以限制。
数字签名(Digital Signature)是使用数字证书来识别软件的发布商和使用hash算法来确保软件的完整性一种技术。在Windows操作系统中,微软认证码技术使用Windows受信任的根证书颁发机构颁发的代码签名证书,对软件代码进行数字签名,从而保证了软件代码来自真实的发行者和保证软件代码没有被非法篡改。软件代码数字签名仍然采用PKI(Public Key Infrastructure,公钥基础设施)双钥技术,整个数字签名过程是,数据源发送方使用自己的私钥对数据校验和或其他与数据内容有关的变量进行加密处理,完成对数据的合法“签名”,数据接收方则利用对方的公钥来解读收到的“数字签名”,并将解读结果用于对数据完整性的检验,以确认签名的合法性。
举例而言,生成数字签名的过程为:
1)对要签名的所述插件创建MD5值;
2)使用所述插件的私钥来加密上述MD5值;
3)将被加密的MD5值和所述插件的数字证书插入到要签名的所述插件。
相应地,数字签名的验证过程为:
1)对要验证的所述插件创建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,用于构造插件UI界面的界面接口buildMainView,以及用于关联插件的生命周期与主程序的关联接口registePluginLifeCycle;
所述插件生命周期接口包括:用于插件初始化数据时回调的初始化接口onPluginCreate,用于插件开始运行时回调的运行接口onPluginStart,用于插件运行界面已经准备完毕时回调的准备接口onPluginResume,用于当插件处于暂停状态时回调的暂停接口onPluginPause,用于插件停止运行时回调的停止接口onPluginStop,用于插件运行过程中出现错误时回调的错误接口onPluginError,用于插件销毁时回调用的销毁接口onPluginDestory,以及用于插件内部产生操作事件后回调到主程序的事件接口setOnPluginEventListener。
所述事件监听接口包括用于插件内部产生操作事件后回调到主程序的事件接口setOnPluginEventListener。
更为优选的是,所述的装置还可以包括以下模块:
工程新建模块,用于在操作系统平台上,新建一个空的工程;
关联库导入模块,用于在所述工程中导入相关联库文件。
在本申请的一种优选实施例中,操作系统平台为Android系统平台,所述插件为JAR插件,所述的插件生成模块还可以包括以下子模块:
编译子模块,用于将所述插件调用接口和回调接口编译成Java源程序.java文件;
转换子模块,用于将所述Java源程序.java文件转换成Java字节代码.class文件;
可执行文件打包子模块,用于将所述Java字节代码.class文件打包成可执行文件classes.dex;
插件打包子模块,用于将所述可执行文件classes.dex和属性文件打包成JAR插件。
在这种情况下,所述的装置还可以包括以下模块:
优化模块,用于将所述插件中的冗余数据和无效数据进行删除。
对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。

Claims (8)

1.一种创建插件方法,其特征在于,包括:
生成待创建插件的配置文件,所述配置文件中包括定义的插件调用接口和回调接口;所述插件调用接口包括插件环境配置接口和插件主调接口,所述回调接口包括插件生命周期接口和事件监听接口;
依据所述插件的配置文件实现所述定义的插件调用接口和回调接口;
生成用于描述所述插件个性化信息的属性文件;
根据所述插件调用接口和回调接口以及所述属性文件生成插件;
对所述插件进行签名;
将所述插件中的冗余数据和无效数据进行删除。
2.如权利要求1所述的方法,其特征在于,
其中,所述插件环境配置接口包括:用于插件配置信息的配置接口PluginEnv,用于插件初始化操作的初始化接口prepare,用于当前插件版本信息的版本接口getVersion,用于验证插件正确性的验证接口verifyPlugin,以及用于测试插件完整性的测试接口testPlugin;
所述插件主调接口包括:插件的主体部分PluginMain,用于构造插件UI界面的界面接口buildMainView,以及用于关联插件的生命周期与主程序的关联接口registePluginLifeCycle;
所述插件生命周期接口包括:用于插件初始化数据时回调的初始化接口onPluginCreate,用于插件开始运行时回调的运行接口onPluginStart,用于插件运行界面已经准备完毕时回调的准备接口onPluginResume,用于当插件处于暂停状态时回调的暂停接口onPluginPause,用于插件停止运行时回调的停止接口onPluginStop,用于插件运行过程中出现错误时回调的错误接口onPluginError,用于插件销毁时回调用的销毁接口onPluginDestory,以及用于插件内部产生操作事件后回调到主程序的事件接口setOnPluginEventListener;
所述事件监听接口包括用于插件内部产生操作事件后回调到主程序的事件接口setOnPluginEventListener。
3.如权利要求1所述的方法,其特征在于,在所述依据插件的配置文件实现所述定义的插件调用接口和回调接口的步骤之前,还包括:
在操作系统平台上,新建一个空的工程;
在所述工程中导入相关联库文件。
4.如权利要求3所述的方法,其特征在于,所述操作系统平台为Android系统平台,所述插件为JAR插件,所述根据插件调用接口和回调接口以及所述属性文件生成插件的步骤包括:
将所述插件调用接口和回调接口编译成Java源程序.java文件,将所述Java源程序.java文件转换成Java字节代码.class文件;
将所述Java字节代码.class文件打包成可执行文件classes.dex;
将所述可执行文件classes.dex和属性文件打包成JAR插件。
5.一种创建插件的装置,其特征在于,包括:
接口定义模块,用于生成待创建插件的配置文件,所述配置文件中定义的插件调用接口和回调接口;所述插件调用接口包括插件环境配置接口和插件主调接口,所述回调接口包括插件生命周期接口和事件监听接口;
接口实现模块,用于依据所述插件的配置文件实现所述定义的插件调用接口和回调接口;
属性文件生成模块,用于生成属性文件,所述属性文件用于描述所述插件的个性化信息;
插件生成模块,用于根据所述插件调用接口和回调接口以及所述属性文件生成插件;
签名模块,用于对所述插件进行签名;
优化模块,用于将所述插件中的冗余数据和无效数据进行删除。
6.如权利要求5所述的装置,其特征在于,
其中,所述插件环境配置接口包括:用于插件配置信息的配置接口PluginEnv,用于插件初始化操作的初始化接口prepare,用于当前插件版 本信息的版本接口getVersion,用于验证插件正确性的验证接口verifyPlugin,以及用于测试插件完整性的测试接口testPlugin;
所述插件主调接口包括:插件的主体部分PluginMain,用于构造插件UI界面的界面接口buildMainView,以及用于关联插件的生命周期与主程序的关联接口registePluginLifeCycle;
所述插件生命周期接口包括:用于插件初始化数据时回调的初始化接口onPluginCreate,用于插件开始运行时回调的运行接口onPluginStart,用于插件运行界面已经准备完毕时回调的准备接口onPluginResume,用于当插件处于暂停状态时回调的暂停接口onPluginPause,用于插件停止运行时回调的停止接口onPluginStop,用于插件运行过程中出现错误时回调的错误接口onPluginError,用于插件销毁时回调用的销毁接口onPluginDestory,以及用于插件内部产生操作事件后回调到主程序的事件接口setOnPluginEventListener;
所述事件监听接口包括用于插件内部产生操作事件后回调到主程序的事件接口setOnPluginEventListener。
7.如权利要求5所述的装置,其特征在于,还包括:
工程新建模块,用于在操作系统平台上,新建一个空的工程;
关联库导入模块,用于在所述工程中导入相关联库文件。
8.如权利要求5所述的装置,其特征在于,操作系统平台为Android系统平台,所述插件为JAR插件,所述插件生成模块包括:
编译子模块,用于将所述插件调用接口和回调接口编译成Java源程序.java文件;
转换子模块,用于将所述Java源程序.java文件转换成Java字节代码.class文件;
可执行文件打包子模块,用于将所述Java字节代码.class文件打包成可执行文件classes.dex;
插件打包子模块,用于将所述可执行文件classes.dex和属性文件打包成JAR插件。
CN201210271385.6A 2012-07-31 2012-07-31 插件加载方法及系统 Active CN102880456B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201210271385.6A CN102880456B (zh) 2012-07-31 2012-07-31 插件加载方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210271385.6A CN102880456B (zh) 2012-07-31 2012-07-31 插件加载方法及系统

Publications (2)

Publication Number Publication Date
CN102880456A CN102880456A (zh) 2013-01-16
CN102880456B true CN102880456B (zh) 2016-08-31

Family

ID=47481795

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210271385.6A Active CN102880456B (zh) 2012-07-31 2012-07-31 插件加载方法及系统

Country Status (1)

Country Link
CN (1) CN102880456B (zh)

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104657158B (zh) * 2013-11-20 2018-02-23 北京先进数通信息技术股份公司 一种业务系统中业务处理的方法和装置
CN103927180B (zh) * 2014-04-21 2017-02-15 广州市久邦数码科技有限公司 一种基于安卓系统的功能插件的实现方法及其系统
CN105224874B (zh) * 2014-06-24 2018-06-15 深圳市茁壮网络股份有限公司 基于中间件插件框架的插件安全控制方法及客户端
CN105677374A (zh) * 2014-11-18 2016-06-15 北京娜迦信息科技发展有限公司 处理、运行安装包的方法及装置
CN105677377A (zh) * 2014-11-19 2016-06-15 北京娜迦信息科技发展有限公司 安卓应用的升级方法和装置
CN104598247A (zh) * 2015-02-03 2015-05-06 厦门美图网科技有限公司 一种第三方库的校验方法和系统
CN105138351B (zh) * 2015-07-31 2019-10-18 百度在线网络技术(北京)有限公司 一种为宿主配置插件包的方法与装置
CN105138377A (zh) * 2015-09-14 2015-12-09 沈阳时尚实业有限公司 一种可配置插件调度及动态加载的远程自动化限电方法
CN105204871B (zh) * 2015-10-30 2019-06-25 亚信科技(南京)有限公司 一种插件式开发方法和装置
CN106445595B (zh) * 2016-09-23 2020-05-15 北京奇虎科技有限公司 插件的Application对象的构建方法及装置
CN106657265A (zh) * 2016-11-14 2017-05-10 晶赞广告(上海)有限公司 一种服务框架系统
CN107967424A (zh) * 2017-11-02 2018-04-27 北京奇虎科技有限公司 一种插件的验证方法、装置、终端设备和存储介质
CN108021389B (zh) * 2017-11-15 2021-01-01 武汉斗鱼网络科技有限公司 一种Android中引入ARouter的方法及装置
CN112035097B (zh) * 2020-08-25 2023-10-13 华东计算技术研究所(中国电子科技集团公司第三十二研究所) 基于银河锐华操作系统的c++适配层的装置
CN112068898B (zh) * 2020-09-01 2024-04-19 上海熙菱信息技术有限公司 一种可配置插件式服务集成系统及方法
CN112131000B (zh) * 2020-09-23 2024-02-06 腾讯科技(深圳)有限公司 一种插件应用程序的内存释放方法及装置
CN112115517A (zh) * 2020-09-24 2020-12-22 北京人大金仓信息技术股份有限公司 一种数据库插件的检验方法、装置、设备及介质
CN113849845B (zh) * 2021-11-29 2022-03-18 统信软件技术有限公司 对插件文件打包的方法和装置、计算设备和可读存储介质
WO2023123018A1 (zh) * 2021-12-29 2023-07-06 深圳晶泰科技有限公司 插件全生命周期的信息获取方法、装置及存储介质
CN116521622B (zh) * 2023-06-30 2023-09-22 中邮消费金融有限公司 一种基于数据快照自动化管理数据的方法及系统

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6182279B1 (en) * 1997-08-12 2001-01-30 International Business Machines Corporation Method and apparatus for storing templates in a component system
CN101887376A (zh) * 2010-07-09 2010-11-17 中兴通讯股份有限公司 Widget引擎加载脚本插件的方法及Widget引擎
CN102520967A (zh) * 2011-12-28 2012-06-27 深圳市融创天下科技股份有限公司 一种创建与使用移动平台插件的方法、系统和移动终端

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6182279B1 (en) * 1997-08-12 2001-01-30 International Business Machines Corporation Method and apparatus for storing templates in a component system
CN101887376A (zh) * 2010-07-09 2010-11-17 中兴通讯股份有限公司 Widget引擎加载脚本插件的方法及Widget引擎
CN102520967A (zh) * 2011-12-28 2012-06-27 深圳市融创天下科技股份有限公司 一种创建与使用移动平台插件的方法、系统和移动终端

Also Published As

Publication number Publication date
CN102880456A (zh) 2013-01-16

Similar Documents

Publication Publication Date Title
CN102880456B (zh) 插件加载方法及系统
Steffen et al. zkay: Specifying and enforcing data privacy in smart contracts
CN102830992B (zh) 插件加载方法及系统
KR100420569B1 (ko) 아키텍처중간프로그램의신뢰성있는컴파일아키텍처특정버전을발생시키기위한시스템및방법
Sinha et al. Moat: Verifying confidentiality of enclave programs
CN112153040B (zh) 一种区块链系统应用智能合约安装部署管理方法
CN102760219B (zh) 一种Android平台软件保护系统、方法及设备
CN108399329B (zh) 一种提高可信应用程序安全的方法
Bhargavan et al. Verified interoperable implementations of security protocols
KR100433319B1 (ko) 신뢰된소오스로부터의검사불가능한프로그램을사용하는장치로검사가능한프로그램을실행하기위한시스템및방법
CN103530534B (zh) 一种基于签名验证的Android程序ROOT授权方法
CN107111713A (zh) 软件系统的自动验证
CN104462959A (zh) 一种安卓应用的加固保护方法、服务器和系统
CN104426658B (zh) 对移动终端上的应用进行身份验证的方法及装置
Sardar et al. Demystifying attestation in intel trust domain extensions via formal verification
CN106709281B (zh) 补丁发放和获取方法、装置
CN106559223B (zh) 应用程序签名方法及装置
CN105471810B (zh) 软件授权信息的验证方法及系统
CN112965731B (zh) 基于Tinker的Flutter热更新方法、装置、设备及存储介质
de Carné de Carnavalet et al. Challenges and implications of verifiable builds for security-critical open-source software
CN105873030A (zh) 一种对终端应用进行副署签名的方法
CN104965701A (zh) 获取应用信息的方法及装置
CN109902500B (zh) 一种通过链接库实现业务调用数据安全的方法及系统
Bhargavan et al. Verifying policy-based web services security
Drzevitzky et al. Proof-carrying hardware: Concept and prototype tool flow for online verification

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CP03 Change of name, title or address

Address after: 100088 room 112, block D, 28 new street, new street, Xicheng District, Beijing (Desheng Park)

Patentee after: BEIJING QIHOO TECHNOLOGY Co.,Ltd.

Patentee after: Beijing Qizhi Business Consulting Co.,Ltd.

Address before: 100088 room 112, block D, 28 new street, new street, Xicheng District, Beijing (Desheng Park)

Patentee before: BEIJING QIHOO TECHNOLOGY Co.,Ltd.

Patentee before: Qizhi software (Beijing) Co.,Ltd.

CP03 Change of name, title or address
TR01 Transfer of patent right

Effective date of registration: 20240116

Address after: 100088 room 112, block D, 28 new street, new street, Xicheng District, Beijing (Desheng Park)

Patentee after: BEIJING QIHOO TECHNOLOGY Co.,Ltd.

Address before: 100088 room 112, block D, 28 new street, new street, Xicheng District, Beijing (Desheng Park)

Patentee before: BEIJING QIHOO TECHNOLOGY Co.,Ltd.

Patentee before: Beijing Qizhi Business Consulting Co.,Ltd.

TR01 Transfer of patent right