CN106293817A - 一种替换插件的方法及装置 - Google Patents
一种替换插件的方法及装置 Download PDFInfo
- Publication number
- CN106293817A CN106293817A CN201610622353.4A CN201610622353A CN106293817A CN 106293817 A CN106293817 A CN 106293817A CN 201610622353 A CN201610622353 A CN 201610622353A CN 106293817 A CN106293817 A CN 106293817A
- Authority
- CN
- China
- Prior art keywords
- plug
- unit
- class
- apk
- replacement
- 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.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
- G06F9/44526—Plug-ins; Add-ons
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44536—Selecting among different versions
- G06F9/44542—Retargetable
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明实施例提供一种替换插件的方法及装置,包括:确定捕获到主程序中的插件进行替换的触发事件;确定需要替换的插件;对所述需要替换的插件通过替换插件中的类或替换插件的安卓安装包APK进行插件替换。采用本发明实施例能够使安卓系统可以替换插件。
Description
技术领域
本发明实施例涉及计算机处理技术领域,尤其涉及一种替换插件的方法及装置。
背景技术
在软件开发中,为了方便对软件进行功能扩展,可以采用插件方式进行开发,将软件所要实现的一个一个功能封装在插件中,最后将各插件集成在软件主程序包中一同发布。
现有技术的不足在于:现有技术中安卓系统不能支持插件替换。
发明内容
本发明提供一种替换插件的方法及装置,用以解决现有技术中安卓系统不支持替换插件的缺陷,实现安卓系统可以替换插件的目的。
本发明实施例提供一种替换插件的方法,包括:
确定捕获到主程序中的插件进行替换的触发事件;
确定需要替换的插件;
对所述需要替换的插件通过替换插件中的类或替换插件的安卓安装包APK(Android Package)进行插件替换。
本发明实施例提供一种替换插件的装置,包括:
第一确定模块,用于确定捕获到主程序中的插件进行替换的触发事件;
第二确定模块,用于确定需要替换的插件;
插件替换模块,用于对所述需要替换的插件通过替换插件中的类或替换插件的安卓安装包APK进行插件替换。
本发明实施例提供的一种替换插件的方法及装置,通过确定捕获到主程序中的插件进行替换的触发事件;确定需要替换的插件;对所述需要替换的插件通过替换插件中的类或替换插件的安卓安装包APK进行插件替换,能够使安卓系统可以替换插件。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例的替换插件的方法的流程图;
图2为本发明实施例一的替换插件的方法的流程图;
图3为本发明实施例二的替换插件的方法的流程图;
图4为本发明实施例的替换插件的装置的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为替换插件的方法的流程图,如图所示,可以包括如下步骤:
步骤101、确定捕获到主程序中的插件进行替换的触发事件;
步骤102、确定需要替换的插件;
步骤103、对所述需要替换的插件通过替换插件中的类或替换插件的安卓安装包APK进行插件替换。
对于步骤101的实施,这里提及的主程序为宿主程序,如乐视超级手机中的XX杀毒软件。插件是指附属程序,如XX杀毒软件中的“开机加速”插件、“日历”插件、“防盗”插件。首先检测是否发生主程序中的插件进行替换的触发事件,确定捕获到该触发事件,进入步骤102。
对于步骤103的实施,由于现有技术安卓不支持替换插件,本发明实施例中有两种实施方式可以实现插件替换。
第一种实施方式:
通过替换插件中的类进行插件替换。
实施中,所述替换插件中的类,具体包括:
通过自定义Classloader加载新的类;
通过动态修改内存中的字节码,将所述新的类装载到内存中。
具体的,Android(安卓)中的类加载继承自JVM(Java Virtual Machine,Java虚拟机),实现类的替换,关键角色还在于类装载器(ClassLoader),实际上类装载器不能重新载入一个已经载入的类(会缓存),但只要使用一个新的类装入器实例,就可以将类再次装入一个正在运行的应用程序。
实现类重新载入的关键有两点:
1、Classloader重写,通过自定义Classloader重新加载需要加载的类;
2、通过动态修改内存中的字节码,将修改过的class再次装载到内存中。
实施中,所述替换插件中的类是通过闲置替换方式或强制替换方式替换的。
具体的,可以采用两种方式(闲置替换、强制替换)替换缓存中的类,闲置替换为插件闲置(也即插件没有被使用)的时候进行插件替换,避免插件正在使用的时候替换造成用户使用中断;强制替换为无论插件是否正在使用都强制性地替换插件。
实施中,所述插件中的类是根据类的包名进行区分的。
具体的,每个类有类名,也有包名,现通过包名区分不同的类。
第二种实施方式:
通过替换插件的APK进行插件替换。
实施中,所述替换插件的APK为将当前APK替换为主程序所支持的最低插件版本和最高插件版本范围内的APK。
具体的,若主程序所支持的最低插件版本和最高插件版本范围内的APK包括当前APK,则替换为最新版本APK;若不包括当前APK,则替换为任一APK。
实施中,所述替换插件的APK,具体包括:
替换APK的类;
替换APK的资源。
具体的,一个插件APK包含两个部分,也需要替换这个两个部分,一个部分是DEX,也就是类替换部分;另一部分是Resources,涉及资源的替换。
实施中,所述替换APK的资源是采用新的AssetManager加载新APK的资源。
具体的,在Android中可以通过AssetManager加载一个APK的资源,通过这个AssetManager获得APK的Resources。替换插件的资源,只需要用一个新的AssetManager重新加载一下新的APK,然后在使用的时候使用新加载的Resources。
为了更清楚地理解本发明,下面以具体实施例进行说明。
实施例一
图2为替换插件的方法的流程图,如图所示,可以包括如下步骤:
步骤201、检测是否发生主程序中的插件进行替换的触发事件,若是,转入步骤202,若否,转入步骤201;
步骤202、确定捕获到该触发事件;
步骤203、确定需要替换的插件;
步骤204、通过包名区分不同的类;
步骤205、确定要使用的新的类;
步骤206、采闲置替换方式或强制替换方式将当前缓存中的类替换为新的类;
步骤207、通过替换类来替换插件。
对于步骤206中将当前缓存中的类替换为新的类的实施,实际上类装载器不能重新载入一个已经载入的类(会缓存),但只要使用一个新的类装入器实例,就可以将类再次装入一个正在运行的应用程序。
实现类重新载入的关键有两点:
1、Classloader重写,通过自定义Classloader重新加载需要加载的类;
2、通过动态修改内存中的字节码,将修改过的class再次装载到内存中。
实施例二
图3为替换插件的方法的流程图,如图所示,可以包括如下步骤:
步骤301、检测是否发生主程序中的插件进行替换的触发事件,若是,转入步骤302,若否,转入步骤301;
步骤302、确定捕获到该触发事件;
步骤303、确定需要替换的插件;
步骤304、判断主程序所支持的最低插件版本和最高插件版本范围内的APK是否包括当前APK,若是,转入步骤305,若否,转入步骤306;
步骤305、确定要替换的APK为最新版本插件的APK,转入步骤307;
步骤306、确定要替换的APK为主程序所支持的最低插件版本和最高插件版本范围内的任一APK,转入步骤307;
步骤307、通过将当前APK替换为新的APK来替换插件。
对于步骤307的实施,一个插件APK包含两个部分,也需要替换这个两个部分,一个部分是DEX,也就是类替换部分;另一部分是Resources,涉及资源的替换。在Android中可以通过AssetManager加载一个APK的资源,通过这个AssetManager获得APK的Resources。替换插件的资源,只需要用一个新的AssetManager重新加载一下新的APK,然后在使用的时候使用新加载的Resources。
基于同一发明构思,本发明实施例中还提供了一种替换插件的装置,由于这些设备解决问题的原理与一种替换插件的方法相似,因此这些设备的实施可以参见方法的实施,重复之处不再赘述。
图4为替换插件的装置的结构示意图,如图所示,装置中可以包括:
第一确定模块401,用于确定捕获到主程序中的插件进行替换的触发事件;
第二确定模块402,用于确定需要替换的插件;
插件替换模块403,用于对所述需要替换的插件通过替换插件中的类进行插件替换。
实施中,插件替换模块还可以进一步用于
通过自定义Classloader加载新的类;
通过动态修改内存中的字节码,将所述新的类装载到内存中。
实施中,插件替换模块还可以进一步用于通过闲置替换方式或强制替换方式替换所述替换缓存中的类。
实施中,插件替换模块还可以进一步用于根据类的包名对所述插件中的类进行区分。
实施中,插件替换模块还可以进一步用于对所述需要替换的插件通过将当前APK替换为主程序所支持的最低插件版本和最高插件版本范围内的APK进行插件替换。
实施中,插件替换模块还可以进一步用于
替换APK的类;
替换APK的资源。
实施中,插件替换模块还可以进一步用于采用新的AssetManager加载新APK的资源。
本发明实施例中可以通过硬件处理器(hardware processor)来实现上述功能模块。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (14)
1.一种替换插件的方法,其特征在于,包括:
确定捕获到主程序中的插件进行替换的触发事件;
确定需要替换的插件;
对所述需要替换的插件通过替换插件中的类或替换插件的安卓安装包APK进行插件替换。
2.根据权利要求1所述的方法,其特征在于,所述替换插件中的类,具体包括:
通过自定义Classloader加载新的类;
通过动态修改内存中的字节码,将所述新的类装载到内存中。
3.根据权利要求1所述的方法,其特征在于,所述替换插件中的类是通过闲置替换方式或强制替换方式替换的。
4.根据权利要求1至3任一所述的方法,其特征在于,所述插件中的类是根据类的包名进行区分的。
5.根据权利要求1所述的方法,其特征在于,所述替换插件的APK为将当前APK替换为主程序所支持的最低插件版本和最高插件版本范围内的APK。
6.根据权利要求1所述的方法,其特征在于,所述替换插件的APK,具体包括:
替换APK的类;
替换APK的资源。
7.根据权利要求6所述的方法,其特征在于,所述替换APK的资源是采用新的AssetManager加载新APK的资源。
8.一种替换插件的装置,其特征在于,包括:
第一确定模块,用于确定捕获到主程序中的插件进行替换的触发事件;
第二确定模块,用于确定需要替换的插件;
插件替换模块,用于对所述需要替换的插件通过替换插件中的类或替换插件的安卓安装包APK进行插件替换。
9.根据权利要求8所述的装置,其特征在于,插件替换模块进一步用于通过自定义Classloader加载新的类;
通过动态修改内存中的字节码,将所述新的类装载到内存中。
10.根据权利要求8所述的装置,其特征在于,插件替换模块进一步用于通过闲置替换方式或强制替换方式替换所述替换插件中的类。
11.根据权利要求8至10任一所述的装置,其特征在于,插件替换模块进一步用于根据类的包名对所述插件中的类进行区分。
12.根据权利要求8所述的装置,其特征在于,插件替换模块进一步用于对所述需要替换的插件通过将当前APK替换为主程序所支持的最低插件版本和最高插件版本范围内的APK进行插件替换。
13.根据权利要求8所述的装置,其特征在于,插件替换模块进一步用于
替换APK的类;
替换APK的资源。
14.根据权利要求8所述的装置,其特征在于,插件替换模块进一步用于采用新的AssetManager加载新APK的资源。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610622353.4A CN106293817A (zh) | 2016-08-01 | 2016-08-01 | 一种替换插件的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610622353.4A CN106293817A (zh) | 2016-08-01 | 2016-08-01 | 一种替换插件的方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN106293817A true CN106293817A (zh) | 2017-01-04 |
Family
ID=57664275
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610622353.4A Pending CN106293817A (zh) | 2016-08-01 | 2016-08-01 | 一种替换插件的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106293817A (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103530156A (zh) * | 2013-10-17 | 2014-01-22 | 北京奇虎科技有限公司 | 动态加载和调用程序的方法及装置 |
CN104123151A (zh) * | 2013-04-28 | 2014-10-29 | 百度在线网络技术(北京)有限公司 | 移动终端中应用程序的插件管理方法、装置和移动终端 |
-
2016
- 2016-08-01 CN CN201610622353.4A patent/CN106293817A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104123151A (zh) * | 2013-04-28 | 2014-10-29 | 百度在线网络技术(北京)有限公司 | 移动终端中应用程序的插件管理方法、装置和移动终端 |
CN103530156A (zh) * | 2013-10-17 | 2014-01-22 | 北京奇虎科技有限公司 | 动态加载和调用程序的方法及装置 |
Non-Patent Citations (2)
Title |
---|
网友: "Java Class的热替换 自定义ClassLoader加载.class", 《HTTPS://BLOG.CSDN.NET/Z69183787/ARTICLE/DETAILS/29234905/》 * |
网友: "java中插件机制和热升级的实现方案", 《HTTPS://BLOG.CSDN.NET/AXCELUXY/ARTICLE/DETAILS/44793243》 * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9336018B2 (en) | Mechanism for class data sharing using extension and application class-loaders | |
TW201911032A (zh) | 智慧合約處理方法及裝置 | |
US9280338B1 (en) | Dynamic application updates | |
US8239861B2 (en) | Software-based unloading and reloading of an inactive function to reduce memory usage of a data processing task performed using a virtual machine | |
EP3035191B1 (en) | Identifying source code used to build executable files | |
CN106020873B (zh) | 补丁包加载方法及装置 | |
US8006246B2 (en) | Apparatus for forcibly terminating thread blocked on input/output operation and method for the same | |
EP2701060A1 (en) | Method for managing the versioning (update and rollback) of an Agent instrumenting Java application | |
CN108229148B (zh) | 一种基于Android虚拟机的沙箱脱壳方法及系统 | |
CN109614167B (zh) | 一种管理插件的方法和系统 | |
EP1600857A2 (en) | Thread rendezvous for read-only code in an object-oriented computing enviroment | |
JP2013511766A (ja) | クラスタベースのjavaアプリケーションシステムのコードをロードおよび更新する装置および方法 | |
CN105786538A (zh) | 基于安卓系统的软件升级方法和装置 | |
US8881162B2 (en) | Apparatus and method for managing resources in containment framework environment | |
CN110825399B (zh) | 一种应用程序的部署方法及装置 | |
WO2017041499A1 (zh) | 一种软件升级方法、系统和计算机可读存储介质 | |
US7600223B2 (en) | Abstracted managed code execution | |
CN115335806A (zh) | 以模块粒度的影子堆栈违规强制 | |
CN110765394A (zh) | so文件加载方法、装置、存储介质及终端设备 | |
US7743377B2 (en) | Cooperative threading in a managed code execution environment | |
CN115362433A (zh) | 用于动态代码的影子堆栈强制范围 | |
US7549045B2 (en) | Delegate registration in a managed code execution environment | |
CN106445601A (zh) | 一种插件升级的方法及装置 | |
CN106293817A (zh) | 一种替换插件的方法及装置 | |
JP2019501459A (ja) | アプリケーションプログラム実行方法及び装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20170104 |