CN110333892A - 应用程序的补丁的生成方法、装置、设备和存储介质 - Google Patents

应用程序的补丁的生成方法、装置、设备和存储介质 Download PDF

Info

Publication number
CN110333892A
CN110333892A CN201910580429.5A CN201910580429A CN110333892A CN 110333892 A CN110333892 A CN 110333892A CN 201910580429 A CN201910580429 A CN 201910580429A CN 110333892 A CN110333892 A CN 110333892A
Authority
CN
China
Prior art keywords
inner classes
application program
anonymous
class
anonymous inner
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.)
Granted
Application number
CN201910580429.5A
Other languages
English (en)
Other versions
CN110333892B (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 Baidu Netcom Science and Technology Co Ltd
Original Assignee
Beijing Baidu Netcom Science and Technology 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 Baidu Netcom Science and Technology Co Ltd filed Critical Beijing Baidu Netcom Science and Technology Co Ltd
Priority to CN201910580429.5A priority Critical patent/CN110333892B/zh
Publication of CN110333892A publication Critical patent/CN110333892A/zh
Application granted granted Critical
Publication of CN110333892B publication Critical patent/CN110333892B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/315Object-oriented languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • G06F8/658Incremental updates; Differential updates

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computing Systems (AREA)
  • Stored Programmes (AREA)

Abstract

本申请提供一种应用程序的补丁的生成方法、装置、设备和存储介质,其中,该方法,包括获取第一应用程序的第一类中的各匿名内部类,并获取第二应用程序的第二类中的各匿名内部类;根据第一类的各匿名内部类,对第二类中的各匿名内部类进行重命名处理,得到重写后的第二应用程序;重写后的第二应用程序与第一应用程序之间,命名相同的匿名内部类的内容或属性信息相同;将第一应用程序与重写后的第二应用程序进行比对,得到补丁。保证将旧的应用程序与新的应用程序的各个外部类中的匿名内部类进行比对的时候,匿名内部类的比对不会产生错乱,可以生成正确的补丁;可以成功的加载补丁,成功的根据补丁对应用程序进行修复。

Description

应用程序的补丁的生成方法、装置、设备和存储介质
技术领域
本申请实施例涉及计算机技术领域,尤其涉及一种应用程序的补丁的生成方法、装置、设备和存储介质。
背景技术
随着计算机技术的发展,各类电子设备中都需要安装应用程序。在使用应用程序的过程中,常常需要对应用程序进行修复;从而云端服务器需要生成应用程序的补丁,并将补丁发送到电子设备中;电子设备根据补丁对应用程序进行修复。目前,对应用程序的修复,常常采用热修复技术。
现有技术中,可以采用插桩的热修复技术,生成补丁。具体的,在应用程序的外部类中常常包括匿名内部类,从而,在补丁中的外部类中也需要具有匿名内部类;在采用插桩的热修复技术生成补丁的过程中,需要将旧的应用程序与新的应用程序的各个外部类中的匿名内部类进行比对,以生成补丁。
然而现有技术中,在采用插桩的热修复技术生成补丁的过程中,由于匿名内部类没有类名,只有命名,该命名可以是一个标识索引(index);即,在外部类中的各个匿名内部类,是直接根据匿名内部类的排布次序,对匿名内部类赋予标识索引的。在新的应用程序中每一个外部类中,可以删除匿名内部类、新增匿名内部类、调整匿名内部类的位置、等等,从而在新的应用程序中,匿名内部类的位置相对于旧的应用程序来说,会产生变动,这样的变动,导致在将旧的应用程序与新的应用程序的各个外部类中的匿名内部类进行比对的时候,匿名内部类的比对产生错乱,进而无法生成正确的补丁。
发明内容
本申请实施例提供一种应用程序的补丁的生成方法、装置、设备和存储介质,用于解决现有技术中将旧的应用程序与新的应用程序的各个外部类中的匿名内部类进行比对的时候,匿名内部类的比对产生错乱,进而无法生成正确的补丁的问题。
本申请第一方面提供一种应用程序的补丁的生成方法,所述应用程序的补丁的生成方法,包括:
获取第一应用程序的第一类中的各匿名内部类,并获取第二应用程序的第二类中的各匿名内部类,其中,所述第二类为用于与所述第一类进行比对的类;
根据所述第一类的各匿名内部类,对所述第二类中的各匿名内部类进行重命名处理,得到重写后的第二应用程序;其中,所述重写后的第二应用程序与所述第一应用程序之间,命名相同的匿名内部类的内容或属性信息相同;
将所述第一应用程序与所述重写后的第二应用程序进行比对,得到补丁。
进一步地,根据所述第一类的各匿名内部类,对所述第二类中的各匿名内部类进行重命名处理,得到重写后的第二应用程序,包括:
对所述第一类中的各匿名内部类与所述第二类中的各匿名内部类进行比较,得到待处理的匿名内部类,其中,所述待处理的匿名内部类为所述第二类中的匿名内部类;
对所述待处理的匿名内部类,进行所述重命名处理,得到所述重写后的第二应用程序。
进一步地,所述重写后的第二应用程序与所述第一应用程序之间,命名不同的匿名内部类的内容不同。
进一步地,所述待处理的匿名内部类为与所述第一类中的一个匿名内部类之间命名不同、且内容相同的类;
或者,所述待处理的匿名内部类为与所述第一类中的一个匿名内部类之间属性信息相同、且内容不同的类;
或者,所述待处理的匿名内部类为不存在于所述第一类中的类。
进一步地,对所述第一类中的各匿名内部类与所述第二类中的各匿名内部类进行比较,得到待处理的匿名内部类,包括:
对比所述第一类与所述第二类中的命名相同的匿名内部类,判断所述命名相同的匿名内部类之间的内容,是否相同;
若确定所述命名相同的匿名内部类之间的内容相同,则将所述第二类中的与所述一类的匿名内部类的命名相同的匿名内部类,标记为无需处理的匿名内部类;
将所述第一类与所述第二类中的命名不同的匿名内部类,变更为同一命名,得到所述第一类中的变更后的匿名内部类、所述第二类中的变更后的匿名内部类;
若确定所述第一类中的变更后的匿名内部类与所述第二类中的变更后的匿名内部类之间的内容相同时,则标记所述第二类中的与第一类中匿名内部类的命名不同的匿名内部类,为一个所述待处理的匿名内部类,并确定该待处理的匿名内部类与所述第一类中匿名内部类的命名不同的匿名内部类之间具有类型映射关系。
进一步地,在确定该待处理的匿名内部类与所述第一类中匿名内部类的命名不同的匿名内部类之间具有类型映射关系之后,还包括:
若确定所述第二类中未经过标记的匿名内部类与所述第一类中的一个匿名内部类的属性信息相同,则标记所述第二类中的未经过比较的匿名内部类,为一个所述待处理的匿名内部类,并确定该待处理的匿名内部类与所述第一类中属性信息相同的一个匿名内部类之间具有类型映射关系。
进一步地,所述属性信息包括父类信息和/或接口信息。
进一步地,在确定该待处理的匿名内部类与所述第一类中属性信息相同的一个匿名内部类之间具有类型映射关系之后,还包括:
确定所述第二类中的未经过各所述标记的处理的匿名内部类,为一个所述待处理的匿名内部类。
进一步地,对所述待处理的匿名内部类,进行所述重命名处理,得到所述重写后的第二应用程序,包括:
将具有类型映射关系的待处理的匿名内部类,重命名为所述第一类中的预设的匿名内部类的名称,其中,所述预设的匿名内部类为与所述待处理的匿名内部类之间具有类型映射关系的类;并且,确定所述具有类型映射关系的待处理的匿名内部类,为一个重命名的类;
将所述待处理的匿名内部类为不存在于所述第一类中的类,重命名为一个新的名称,并且确定为一个重命名的类。
进一步地,在将所述第一应用程序与所述重写后的第二应用程序进行比对,得到补丁之后,还包括:
将所述补丁发送至安装有所述第一应用程序的终端设备,以使所述终端设备根据所述补丁对所述第一应用程序进行修复。
本申请第二方面提供一种应用程序的补丁的生成装置,所述应用程序的补丁的生成装置,包括:
获取单元,用于获取第一应用程序的第一类中的各匿名内部类,并获取第二应用程序的第二类中的各匿名内部类,其中,所述第二类为用于与所述第一类进行比对的类;
处理单元,用于根据所述第一类的各匿名内部类,对所述第二类中的各匿名内部类进行重命名处理,得到重写后的第二应用程序;其中,所述重写后的第二应用程序与所述第一应用程序之间,命名相同的匿名内部类的内容或属性信息相同;
生成单元,用于将所述第一应用程序与所述重写后的第二应用程序进行比对,得到补丁。
进一步地,所述处理单元,包括:
第一处理模块,用于对所述第一类中的各匿名内部类与所述第二类中的各匿名内部类进行比较,得到待处理的匿名内部类,其中,所述待处理的匿名内部类为所述第二类中的匿名内部类;
第二处理模块,用于对所述待处理的匿名内部类,进行所述重命名处理,得到所述重写后的第二应用程序。
进一步地,所述重写后的第二应用程序与所述第一应用程序之间,命名不同的匿名内部类的内容不同。
进一步地,所述待处理的匿名内部类为与所述第一类中的一个匿名内部类之间命名不同、且内容相同的类;或者,所述待处理的匿名内部类为与所述第一类中的一个匿名内部类之间属性信息相同、且内容不同的类;或者,所述待处理的匿名内部类为不存在于所述第一类中的类。
进一步地,所述第一处理模块,包括:
判断子模块,用于对比所述第一类与所述第二类中的命名相同的匿名内部类,判断所述命名相同的匿名内部类之间的内容,是否相同;
第一处理子模块,用于若确定所述命名相同的匿名内部类之间的内容相同,则将所述第二类中的与所述一类的匿名内部类的命名相同的匿名内部类,标记为无需处理的匿名内部类;
第二处理子模块,用于将所述第一类与所述第二类中的命名不同的匿名内部类,变更为同一命名,得到所述第一类中的变更后的匿名内部类、所述第二类中的变更后的匿名内部类;
第三处理子模块,用于若确定所述第一类中的变更后的匿名内部类与所述第二类中的变更后的匿名内部类之间的内容相同时,则标记所述第二类中的与第一类中匿名内部类的命名不同的匿名内部类,为一个所述待处理的匿名内部类,并确定该待处理的匿名内部类与所述第一类中匿名内部类的命名不同的匿名内部类之间具有类型映射关系。可选的,所述第二类中的与第一类中匿名内部类的命名不同的匿名内部类,为与所述第一类中的一个匿名内部类之间命名不同、且内容相同的类。
进一步地,所述第一处理模块,还包括:
第四处理子模块,用于在所述第三处理子模块确定该待处理的匿名内部类与所述第一类中匿名内部类的命名不同的匿名内部类之间具有类型映射关系之后,若确定所述第二类中未经过标记的匿名内部类与所述第一类中的一个匿名内部类的属性信息相同,则标记所述第二类中的未经过比较的匿名内部类,为一个所述待处理的匿名内部类,并确定该待处理的匿名内部类与所述第一类中属性信息相同的一个匿名内部类之间具有类型映射关系。可选的,所述第二类中未经过标记的匿名内部类,为与所述第一类中的一个匿名内部类之间属性信息相同、且内容不同的类。
进一步地,所述属性信息包括父类信息和/或接口信息。
进一步地,所述第一处理模块,还包括:
第五处理子模块,用于在所述第四处理子模块在确定该待处理的匿名内部类与所述第一类中属性信息相同的一个匿名内部类之间具有类型映射关系之后,确定所述第二类中的未经过各所述标记的处理的匿名内部类,为一个所述待处理的匿名内部类。可选的,所述第二类中的未经过标记的匿名内部类,为不存在于所述第一类中的类。
进一步地,所述第二处理模块,包括:
第一命名子模块,用于将具有类型映射关系的待处理的匿名内部类,重命名为所述第一类中的预设的匿名内部类的名称,其中,所述预设的匿名内部类为与所述待处理的匿名内部类之间具有类型映射关系的类;并且,确定所述具有类型映射关系的待处理的匿名内部类,为一个重命名的类;
第二命名子模块,用于将所述待处理的匿名内部类为不存在于所述第一类中的类,重命名为一个新的名称,并且确定为一个重命名的类。
进一步地,所述应用程序的补丁的生成装置,还包括:
发送单元,用于在所述生成单元将所述第一应用程序与所述重写后的第二应用程序进行比对,得到补丁之后,将所述补丁发送至安装有所述第一应用程序的终端设备,以使所述终端设备根据所述补丁对所述第一应用程序进行修复。
本申请第三方面提供一种电子设备,包括:发送器、接收器、存储器和处理器;
所述存储器用于存储计算机指令;所述处理器用于运行所述存储器存储的所述计算机指令实现第一方面任一实现方式提供的应用程序的补丁的生成方法。
本申请第四方面提供一种存储介质,包括:可读存储介质和计算机指令,所述计算机指令存储在所述可读存储介质中;所述计算机指令用于实现第一方面任一实现方式提供的应用程序的补丁的生成方法。
本申请实施例提供的应用程序的补丁的生成方法、装置、设备和存储介质,通过获取第一应用程序的第一类中的各匿名内部类,并获取第二应用程序的第二类中的各匿名内部类,其中,第二类为用于与第一类进行比对的类;根据第一类的各匿名内部类,对第二类中的各匿名内部类进行重命名处理,得到重写后的第二应用程序;其中,重写后的第二应用程序与第一应用程序之间,命名相同的匿名内部类的内容或属性信息相同;将第一应用程序与重写后的第二应用程序进行比对,得到补丁。从而,对新的应用程序的各个外部类的匿名内部类进行重命名处理,在重写后的第二应用程序中的匿名内部类与第一应用程序中的匿名内部类的命名相同时,需要重写后的第二应用程序中的匿名内部类与第一应用程序中的匿名内部类的内容相同或者属性信息相同。通过以上方式和原则,保证将旧的应用程序与新的应用程序的各个外部类中的匿名内部类进行比对的时候,匿名内部类的比对不会产生错乱,可以生成正确的补丁;进一步的,可以成功的加载补丁,成功的根据补丁对应用程序进行修复。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。
图1为本申请实施例提供的一种应用程序的补丁的生成方法的流程图;
图2为本申请实施例提供的另一种应用程序的补丁的生成方法的流程图;
图3为本申请实施例提供的又一种应用程序的补丁的生成方法的流程图;
图4为本申请实施例提供的匿名内部类的对比示意图一;
图5为本申请实施例提供的匿名内部类的对比示意图二;
图6为本申请实施例提供的匿名内部类的对比示意图三;
图7为本申请实施例提供的匿名内部类的对比示意图四;
图8为本申请实施例提供的一种应用程序的补丁的生成装置的结构示意图;
图9为本申请实施例提供的另一种应用程序的补丁的生成装置的结构示意图;
图10为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
随着计算机技术的发展,各类电子设备中都需要安装应用程序。在使用应用程序的过程中,常常需要对应用程序进行修复;从而云端服务器需要生成应用程序的补丁,并将补丁发送到电子设备中;电子设备根据补丁对应用程序进行修复。目前,对应用程序的修复,常常采用热修复技术。
常用的热修复技术,包括以下几种。
第一种热修复技术:在加载补丁的时候,采用Native层替换掉应用程序的ArtMethod层;其中,Native是一个计算机函数,一个Native层就是一个JAVA调用非JAVA代码的接口。Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念。
第二种热修复技术:云端服务器将全量的Dex放到应用程序中,从而,云端服务器下发全量的Dex;进而全量的Dex,对应用程序实现修复,进而完成补丁的加载。
第三种热修复技术:对原始的应用程序中的类进行插桩,电子设备安装应用程序;云端服务器向电子设备发送补丁(Patch);电子设备执行应用程序的代码,在确定应用程序的类中有对应补丁的代码的时候,执行补丁的逻辑,在确定应用程序的类中没有对应补丁的代码的时候,执行应用程序的代码的逻辑。其中,插桩是一种轻量的热修复方案。
在上述第三种热修复技术中,在采用插桩的热修复技术生成补丁的过程中,由于匿名内部类没有类名,只有命名,该命名可以是一个标识索引(index);即,在外部类中的各个匿名内部类,是直接根据匿名内部类的排布次序,对匿名内部类赋予标识索引的。在新的应用程序中每一个外部类中,可以删除匿名内部类、新增匿名内部类、调整匿名内部类的位置、等等,从而在新的应用程序中,匿名内部类的位置相对于旧的应用程序来说,会产生变动,这样的变动,导致在将旧的应用程序与新的应用程序的各个外部类中的匿名内部类进行比对的时候,匿名内部类的比对产生错乱,进而无法生成正确的补丁。
举例来说,旧的应用程序的一个外部类中包括匿名内部类A$1和匿名内部类A$2,在新的应用程序的相对应的外部类中包括匿名内部类A$1、匿名内部类A$2和匿名内部类A$3;A$1是匿名内部类A$1的命名,A$2是匿名内部类A$2的命名,A$3是匿名内部类A$3的命名,命名是一种标识索引;其中,在新的应用程序中,实际上是增加了一个新的匿名内部类A$2,将旧的应用程序中的匿名内部类A$2,放到了新的应用程序中的匿名内部类A$3的位置上。即,实际上,旧的应用程序中的匿名内部类A$2与新的应用程序中的匿名内部类A$3,两者是同一个匿名内部类;新的应用程序中的匿名内部类A$2是新增的匿名内部类。由于匿名内部类的以上排序和命名的原理。在将旧的应用程序与新的应用程序进行对比的时候,会将旧的应用程序中的匿名内部类A$2与新的应用程序中的匿名内部类A$2,进行比较,这样的比较是错误的;从而,会导致匿名内部类的比对产生错乱,进而无法生成正确的补丁。
为了解决上述问题,提供了以下几种方式。
第一种方式、不再将旧的应用程序与新的应用程序进行比对以生成补丁,而是采用全量修复方案,去生成全量的Dex文件,将全量的Dex文件的构成补丁。
但是上述第一种方式中,全量修复方案,需要将全量的Dex文件的构成补丁,补丁的占用空间非常大;由于补丁的代码量较大,造成补丁的开发的人力成本和时间成本较高。
第二种方式、采用替换方法类方案的方案,这种方案仅仅支持去在外部类的对最底部新增和删除匿名内部类,这种方案不会引起其他匿名内部类的顺序产生变化。
举例来说,在上述第二种方式中,旧的应用程序的一个外部类中包括匿名内部类A$1和匿名内部类A$2;在新的应用程序的相对应的外部类中,原始的匿名内部类A$1和匿名内部类A$2的次序不变,可以在匿名内部类A$2下方新增一个匿名内部类A$3,或者,删除原始的匿名内部类A$2;即,仅仅支持去在外部类的对最底部新增和删除匿名内部类。
但是上述第二种方式中,由于仅仅支持去在外部类的对最底部新增和删除匿名内部类,在外部类中的其他位置新增、删除匿名内部类,或者调整外部类中的匿名内部类的次序,都是不能支持的,进而针对很多情况下的应用程序的更新,还是无法生成补丁。
本申请提供一种应用程序的补丁的生成方法、装置、设备和存储介质,以保证将旧的应用程序与新的应用程序的各个外部类中的匿名内部类进行比对的时候,匿名内部类的比对不会产生错乱,可以生成正确的补丁。并且,本实施例提供的方案,不需要对补丁进行大量的开发工作,可以降低人力和时间成本,提升补丁的生成和加载效率。
图1为本申请实施例提供的一种应用程序的补丁的生成方法的流程图,如图1所示,该应用程序的补丁的生成方法,包括:
S101、获取第一应用程序的第一类中的各匿名内部类,并获取第二应用程序的第二类中的各匿名内部类,其中,第二类为用于与第一类进行比对的类。
在本步骤中,本实施例以执行主体可以是电子设备、或者终端设备、或者其他可以执行本实施例的应用程序的修复装置或设备。
在对旧的应用程序和新的应用程序进行比对的时候,对于每一个外部类中的匿名内部类,只针对于每一个外部类进行比对和分析。为了便于区分,将旧的应用程序称为第一应用程序,将新的应用程序称为第二应用程序;上述第一类和第二类,都指的是外部类。外部类中具有匿名内部类。
对于应用程序的每一个外部类来说,首先,获取第一应用程序的第一类中的各匿名内部类,并获取第二应用程序的第二类中的各匿名内部类。
其中,第一类与第二类相对应;这里的“相对应”,指的是,第一类和第二类是同一个类,第一类存在于第一应用程序中,第二类存在于第二应用程序中,并且,第二类是对第一类进行了更新的外部类。第二类为用于与第一类进行比对的类,即,需要将第一类与第二类之间进行比对。
从而,是将应用程序中的匿名内部类,按照匿名内部类所在的外部类进行分组;在进行本实施例的处理的过程中,只在同一个分组中对第一应用程序和第二应用程序的匿名内部类进行对比分析。
举例来说,第一应用程序的一个第一类A中包括匿名内部类A$1和匿名内部类A$2,第一应用程序中的第二类AA中包括匿名内部类A$1、匿名内部类A$2和匿名内部类A$3;其中,第一类A与第二类AA相对应,只将第一类A中的各匿名内部类与第二类AA中的各匿名内部类,进行对比分析。第一应用程序的另一个第一类B中包括匿名内部类B$1和匿名内部类B$2,第一应用程序中的第二类BB中包括匿名内部类B$1、匿名内部类B$2和匿名内部类B$3;其中,第一类B与第二类BB相对应,只将第一类B中的各匿名内部类与第二类BB中的各匿名内部类,进行对比分析。
S102、根据第一类的各匿名内部类,对第二类中的各匿名内部类进行重命名处理,得到重写后的第二应用程序;其中,重写后的第二应用程序与第一应用程序之间,命名相同的匿名内部类的内容或属性信息相同。
可选的,属性信息包括父类信息和/或接口信息。
在本步骤中,对于应用程序的每一个外部类来说,在对第二类中的各匿名内部类进行了重命名处理之后,所得到的重写后的第二应用程序中,需要同时符合要求:重写后的第二应用程序与第一应用程序之间命名相同的匿名内部类,命名相同的匿名内部类的内容,或者,命名相同的匿名内部类的属性信息相同。
具体的,在重写后的第二应用程序中的匿名内部类与第一应用程序中的匿名内部类的命名相同时,一定是需要重写后的第二应用程序中的匿名内部类与第一应用程序中的匿名内部类的内容相同。或者,在重写后的第二应用程序中的匿名内部类与第一应用程序中的匿名内部类的命名相同时,一定是需要重写后的第二应用程序中的匿名内部类与第一应用程序中的匿名内部类的属性信息相同。其中,这里的“内容”,指的是匿名内部类中的指令。若重写后的第二应用程序中的匿名内部类与第一应用程序中的匿名内部类的命名相同,则重写后的第二应用程序中的匿名内部类的指令与第一应用程序中的匿名内部类的指令相同。属性信息,例如是,父类信息和/或接口信息。
S103、将第一应用程序与重写后的第二应用程序进行比对,得到补丁。
在本步骤中,在得到重写后的第二应用程序之后,已经对原始的第二应用程序的各外部类中的匿名内部类进行重命名处理。
然后,就可以将第一应用程序与重写后的第二应用程序进行比对,得到补丁。其中,应用程序之间比对得到补丁的过程,可以采用现有技术的补丁生成方式。
在匿名内部类中具有嵌套的子的匿名内部类的时候,针对每一个匿名内部类来说,对于嵌套的子的匿名内部类,可以执行上述步骤。
本实施例,通过获取第一应用程序的第一类中的各匿名内部类,并获取第二应用程序的第二类中的各匿名内部类,其中,第二类为用于与第一类进行比对的类;根据第一类的各匿名内部类,对第二类中的各匿名内部类进行重命名处理,得到重写后的第二应用程序;其中,重写后的第二应用程序与第一应用程序之间,命名相同的匿名内部类的内容或属性信息相同;将第一应用程序与重写后的第二应用程序进行比对,得到补丁。从而,对新的应用程序的各个外部类的匿名内部类进行重命名处理,在重写后的第二应用程序中的匿名内部类与第一应用程序中的匿名内部类的命名相同时,需要重写后的第二应用程序中的匿名内部类与第一应用程序中的匿名内部类的内容相同或者属性信息相同。通过以上方式和原则,保证将旧的应用程序与新的应用程序的各个外部类中的匿名内部类进行比对的时候,匿名内部类的比对不会产生错乱,可以生成正确的补丁;进一步的,可以成功的加载补丁,成功的根据补丁对应用程序进行修复。
图2为本申请实施例提供的另一种应用程序的补丁的生成方法的流程图,如图1所示,该应用程序的补丁的生成方法,包括:
S201、获取第一应用程序的第一类中的各匿名内部类,并获取第二应用程序的第二类中的各匿名内部类,其中,第二类为用于与第一类进行比对的类。
在本步骤中,本实施例以执行主体可以是电子设备、或者终端设备、或者其他可以执行本实施例的应用程序的修复装置或设备。
本步骤可以参见图1的步骤S101,不再赘述。
S202、根据第一类的各匿名内部类,对第二类中的各匿名内部类进行重命名处理,得到重写后的第二应用程序;其中,重写后的第二应用程序与第一应用程序之间,命名相同的匿名内部类的内容或属性信息相同;重写后的第二应用程序与第一应用程序之间,命名不同的匿名内部类的内容不同。
可选的,在重写后的第二应用程序中的匿名内部类与第一应用程序中的匿名内部类的命名相同时,重写后的第二应用程序中的匿名内部类与第一应用程序中的匿名内部类的内容相同,或者,在重写后的第二应用程序中的匿名内部类与第一应用程序中的匿名内部类的命名相同时,重写后的第二应用程序中的匿名内部类与第一应用程序中的匿名内部类的属性信息相同;在重写后的第二应用程序中的匿名内部类与第一应用程序中的匿名内部类的命名不同时,重写后的第二应用程序中的匿名内部类与第一应用程序中的匿名内部类的内容不同。
在本步骤中,对于应用程序的每一个外部类来说,在对第二类中的各匿名内部类进行了重命名处理之后,所得到的重写后的第二应用程序中,需要同时符合以下几种情况。
第一种情况、在重写后的第二应用程序中的匿名内部类与第一应用程序中的匿名内部类的命名相同时,一定是需要重写后的第二应用程序中的匿名内部类与第一应用程序中的匿名内部类的内容相同。或者,在重写后的第二应用程序中的匿名内部类与第一应用程序中的匿名内部类的命名相同时,一定是需要重写后的第二应用程序中的匿名内部类与第一应用程序中的匿名内部类的属性信息相同。其中,这里的“内容”,指的是匿名内部类中的指令。若重写后的第二应用程序中的匿名内部类与第一应用程序中的匿名内部类的命名相同,则重写后的第二应用程序中的匿名内部类的指令与第一应用程序中的匿名内部类的指令相同。属性信息,例如是,父类信息和/或接口信息。
第二种情况、在重写后的第二应用程序中的匿名内部类与第一应用程序中的匿名内部类的命名不同时,一定是需要重写后的第二应用程序中的匿名内部类与第一应用程序中的匿名内部类的内容不同。其中,这里的“内容”,指的是匿名内部类中的指令。若重写后的第二应用程序中的匿名内部类与第一应用程序中的匿名内部类的命名不同,则重写后的第二应用程序中的匿名内部类的指令与第一应用程序中的匿名内部类的指令不同。
上述“内容”,指的是匿名内部类的标识索引(index)。
举例来说,第一应用程序的一个第一类A中包括匿名内部类A$1和匿名内部类A$2。在对第二类中的各匿名内部类进行重命名处理,得到重写后的第二应用程序之后,重写后的第二应用程序中的第二类AA中包括匿名内部类A$1、匿名内部类A$2和匿名内部类A$3。此时,第一类A中的匿名内部类A$1与第二类AA中的匿名内部类A$1,两者之间的命名相同、内容相同;第一类A中的匿名内部类A$2与第二类AA中的匿名内部类A$2,两者之间的命名相同、属性信息相同、内容可以相同或不同;第二类AA中的匿名内部类A$3,与第一类A中的各个匿名内部类之间的命名不同、内容不同。
S203、将第一应用程序与重写后的第二应用程序进行比对,得到补丁。
本步骤可以参见图1的步骤S103,不再赘述。
本实施例,通过获取第一应用程序的第一类中的各匿名内部类,并获取第二应用程序的第二类中的各匿名内部类,其中,第一类与第二类相对应;根据第一类的各匿名内部类,对第二类中的各匿名内部类进行重命名处理,得到重写后的第二应用程序;其中,在重写后的第二应用程序中的匿名内部类与第一应用程序中的匿名内部类的命名相同时,重写后的第二应用程序中的匿名内部类与第一应用程序中的匿名内部类的内容相同,或者,在重写后的第二应用程序中的匿名内部类与第一应用程序中的匿名内部类的命名相同时,重写后的第二应用程序中的匿名内部类与第一应用程序中的匿名内部类的属性信息相同;在重写后的第二应用程序中的匿名内部类与第一应用程序中的匿名内部类的命名不同时,重写后的第二应用程序中的匿名内部类与第一应用程序中的匿名内部类的内容不同;将第一应用程序与重写后的第二应用程序进行比对,得到补丁。从而,对新的应用程序的各个外部类的匿名内部类进行重命名处理,在重写后的第二应用程序中的匿名内部类与第一应用程序中的匿名内部类的命名相同时,需要重写后的第二应用程序中的匿名内部类与第一应用程序中的匿名内部类的内容相同或者属性信息相同;在重写后的第二应用程序中的匿名内部类与第一应用程序中的匿名内部类的命名不同时,一定是需要重写后的第二应用程序中的匿名内部类与第一应用程序中的匿名内部类的内容不同。通过以上方式和原则,保证将旧的应用程序与新的应用程序的各个外部类中的匿名内部类进行比对的时候,匿名内部类的比对不会产生错乱,可以生成正确的补丁;进一步的,可以成功的加载补丁,成功的根据补丁对应用程序进行修复。并且,本实施例提供的方案,不需要对补丁进行大量的开发工作,可以降低人力和时间成本,提升补丁的生成和加载效率。
图3为本申请实施例提供的又一种应用程序的补丁的生成方法的流程图,如图3所示,该应用程序的补丁的生成方法,包括:
S301、获取第一应用程序的第一类中的各匿名内部类,并获取第二应用程序的第二类中的各匿名内部类,其中,第二类为用于与第一类进行比对的类。
在本步骤中,本实施例以执行主体可以是电子设备、或者终端设备、或者其他可以执行本实施例的应用程序的修复装置或设备。
本步骤可以参见图1所示的步骤S101,不再赘述。
S302、对第一类中的各匿名内部类与第二类中的各匿名内部类进行比较,得到待处理的匿名内部类,其中,待处理的匿名内部类为第二类中的匿名内部类。
可选的,待处理的匿名内部类为与第一类中的一个匿名内部类之间命名不同、且内容相同的类;或者,待处理的匿名内部类为与第一类中的一个匿名内部类之间属性信息相同、且内容不同的类;或者,待处理的匿名内部类为不存在于第一类中的类。
可选的,步骤S202包括以下步骤:
第一步骤、对比第一类与第二类中的命名相同的匿名内部类,判断命名相同的匿名内部类之间的内容,是否相同。
第二步骤、若确定命名相同的匿名内部类之间的内容相同,则将第二类中的与一类的匿名内部类的命名相同的匿名内部类,标记为无需处理的匿名内部类。
第三步骤、将第一类与第二类中的命名不同的匿名内部类,变更为同一命名,得到第一类中的变更后的匿名内部类、第二类中的变更后的匿名内部类。
第四步骤、若确定第一类中的变更后的匿名内部类与第二类中的变更后的匿名内部类之间的内容相同时,则标记第二类中的与第一类中匿名内部类的命名不同的匿名内部类,为一个待处理的匿名内部类,并确定该待处理的匿名内部类与第一类中匿名内部类的命名不同的匿名内部类之间具有类型映射关系。可选的,第二类中的与第一类中匿名内部类的命名不同的匿名内部类,为与第一类中的一个匿名内部类之间命名不同、且内容相同的类。
第五步骤、若确定第二类中未经过标记的匿名内部类与第一类中的一个匿名内部类的属性信息相同,则标记第二类中的未经过比较的匿名内部类,为一个待处理的匿名内部类,并确定该待处理的匿名内部类与第一类中属性信息相同的一个匿名内部类之间具有类型映射关系。可选的,第二类中未经过标记的匿名内部类,为与第一类中的一个匿名内部类之间属性信息相同、且内容不同的类。
第六步骤、确定第二类中的未经过各标记的处理的匿名内部类,为一个待处理的匿名内部类。可选的,第二类中的未经过标记的匿名内部类,为不存在于第一类中的类。
在本步骤中,对于应用程序的每一个外部类来说,即对于每一个第一类和每一个第一类所对应的第二类来说,在对第一类中的各匿名内部类与第二类中的各匿名内部类进行比较的时候,需要从第二类中选择出待处理的匿名内部类。
具体来说,首先,对比同名的匿名内部类,此时,是将第一类与第二类中的命名相同的匿名内部类之间进行对比,此时,命名相同,则确定第一类与第二类中的命名相同的匿名内部类的排布次序是没有被改变的;然后,确定第一类与第二类中的命名相同的匿名内部类之间内容是否相同;若内容相同,则确定命名相同的匿名内部类之间的指令也没有被改变。此时,就可以将第二类中的与一类的匿名内部类的命名相同的匿名内部类,标记为无需处理的匿名内部类,例如,标记为unchange。
然后,将迭代对比命名不同的匿名内部类,此时,对第一类与第二类中的命名不同的匿名内部类,进行变更命名,变为同名类,即,变更为同一个命名。
然后,检查第一类中的变更后的匿名内部类与第二类中的变更后的匿名内部类之间的内容是否相同;若内容相同,则确定第二类中的与第一类中匿名内部类的命名不同的匿名内部类,为一个待处理的匿名内部类,并且该待处理的匿名内部类,为与第一类中的一个匿名内部类之间命名不同、且内容相同的类。
并且,需要将该待处理的匿名内部类与第一类中匿名内部类的命名不同、内容相同的匿名内部类之间,标记出类型映射关系,即,将两者进行类型映射;并且,将该待处理的匿名内部类所归属的第二类,标记为待重写。
经过以上迭代过程之后,可能还会存在遗漏的匿名内部类,再次迭代第二类中未经过标记的匿名内部类,将第二类中未经过标记的匿名内部类与第一类中的匿名内部类进行比较;若确定第二类中未经过标记的匿名内部类与第一类中的一个匿名内部类之间,两者属性信息相同,例如,父类信息和/或接口信息相同,则将第二类中未经过标记的匿名内部类,标记为一个待处理的匿名内部类。此时,该待处理的匿名内部类,是与第一类中的一个匿名内部类之间属性信息相同、且内容不同的类;并且,该待处理的匿名内部类与第一类中属性信息相同的一个匿名内部类之间,两者的命名相同或不同。为了便于后续步骤的重命名,还需要将该待处理的匿名内部类与与第一类中属性信息相同的一个匿名内部类之间,标记出类型映射关系,即,这两者之间具有类型映射关系。
经过上述各个迭代过程之后,再次检查第二类中,是否具有未经过上述标记的处理的匿名内部类,若具有,则确定该匿名内部类并不存在于第一类中,并且,确定该匿名内部类也是一个待处理的匿名内部类。
第一种举例说明,图4为本申请实施例提供的匿名内部类的对比示意图一,如图4所示,第一类中包括匿名内部类A$1和匿名内部类A$2,第二类中包括匿名内部类A$1、匿名内部类A$2和匿名内部类A$3,实际上,第二类中的匿名内部类A$2是一个新增的,第二类中的匿名内部类A$3是第一类中的匿名内部类A$2。
采用本实施例的方案,对比同名的匿名内部类的内容是否相同,此时,第一类中的匿名内部类A$1与第二类中的匿名内部类A$1之间命名相同、内容相同,则确定第二类中的匿名内部类A$1,不需要被处理,即,标记为无需处理的匿名内部类。
然后,迭代对非同名的匿名内部类,将第一类中的匿名内部类A$2与第二类中的匿名内部类A$3,变更为同一命名,然后确定两者的内容相同,则将第一类中的匿名内部类A$2与第二类中的匿名内部类A$3之间命名不同、内容相同,此时,将第二类中的匿名内部类A$3,标记为待处理的匿名内部类,并且,将第一类中的匿名内部类A$2与第二类中的匿名内部类A$3之间建立类型映射关系。
然后,确定第一类中未经过标记的匿名内部类与第二类中未经过分析的匿名内部类之间的属性信息不同。
然后,第二类还存在未经过标记的处理的匿名内部类A$2,将第二类中的匿名内部类A$2,标记为待处理的匿名内部类,并且,第二类中的匿名内部类A$2是一个新增的匿名内部类。
第二种举例说明,图5为本申请实施例提供的匿名内部类的对比示意图二,如图5所示,第一类中包括匿名内部类A$1、匿名内部类A$2和匿名内部类A$3,第二类中包括匿名内部类A$1和匿名内部类A$2,实际上,第二类中的匿名内部类A$2是第一类中的匿名内部类A$3,第一类中包括匿名内部类A$2被删除了。
采用本实施例的方案,对比同名的匿名内部类的内容是否相同,此时,第一类中的匿名内部类A$1与第二类中的匿名内部类A$1之间命名相同、内容相同,则确定第二类中的匿名内部类A$1,不需要被处理,即,标记为无需处理的匿名内部类。
然后,迭代对非同名的匿名内部类,将第一类中的匿名内部类A$3与第二类中的匿名内部类A$2,变更为同一命名,然后确定两者的内容相同,则将第一类中的匿名内部类A$3与第二类中的匿名内部类A$2之间命名不同、内容相同,此时,将第二类中的匿名内部类A$2,标记为待处理的匿名内部类,并且,将第一类中的匿名内部类A$3与第二类中的匿名内部类A$2之间建立类型映射关系。
然后,确定第一类中未经过标记的匿名内部类与第二类中未经过分析的匿名内部类之间的属性信息不同。
然后,确定第二类不存在未经过标记的处理的匿名内部类。
第三种举例说明,图6为本申请实施例提供的匿名内部类的对比示意图三,如图6所示,第一类中包括匿名内部类A$1、匿名内部类A$2和匿名内部类A$3,第二类中包括匿名内部类A$1、匿名内部类A$2和匿名内部类A$3,实际上,第二类中的匿名内部类A$2是第一类中的匿名内部类A$3,第二类中的匿名内部类A$3是第一类中的匿名内部类A$2。
采用本实施例的方案,对比同名的匿名内部类的内容是否相同,此时,第一类中的匿名内部类A$1与第二类中的匿名内部类A$1之间命名相同、内容相同,则确定第二类中的匿名内部类A$1,不需要被处理,即,标记为无需处理的匿名内部类。
然后,迭代对非同名的匿名内部类,将第一类中的匿名内部类A$2与第二类中的匿名内部类A$3,变更为同一命名,然后确定两者的内容相同,则将第一类中的匿名内部类A$2与第二类中的匿名内部类A$3之间命名不同、内容相同,此时,将第二类中的匿名内部类A$3,标记为待处理的匿名内部类,并且,将第一类中的匿名内部类A$2与第二类中的匿名内部类A$3之间建立类型映射关系。
并且,将第一类中的匿名内部类A$3与第二类中的匿名内部类A$2,变更为同一命名,然后确定两者的内容相同,则将第一类中的匿名内部类A$3与第二类中的匿名内部类A$2之间命名不同、内容相同,此时,将第二类中的匿名内部类A$2,标记为待处理的匿名内部类,并且,将第一类中的匿名内部类A$3与第二类中的匿名内部类A$2之间建立类型映射关系。
然后,确定第一类中未经过标记的匿名内部类与第二类中未经过分析的匿名内部类之间的属性信息不同。
然后,第二类不存在未经过标记的处理的匿名内部类。
第四种举例说明,图7为本申请实施例提供的匿名内部类的对比示意图四,如图7所示,第一类中包括匿名内部类A$1,第二类中包括匿名内部类A$1,实际上,第二类中包括匿名内部类A$1在第一类中的匿名内部类A$1上,发生了方法的修改,可知,第二类中包括匿名内部类A$1在第一类中的匿名内部类A$1之间的命名相同、属性信息相同、内容不同。
采用本实施例的方案,对比同名的匿名内部类的内容是否相同,此时,第一类中的匿名内部类A$1与第二类中的匿名内部类A$1之间命名相同、内容不同。
然后,不存在非同名的匿名内部类。
然后,确定第一类中未经过标记的匿名内部类与第二类中未分析的匿名内部类之间的属性信息是否相同,此时,第一类中的匿名内部类A$1与第二类中的匿名内部类A$1之间的属性信息相同,就可以将第二类中的匿名内部类A$1,标记为待处理的匿名内部类;并且,将第一类中的匿名内部类A$1与第二类中的匿名内部类A$1之间,建立类型映射关系。
然后,第二类不存在未经过标记的处理的匿名内部类。
S303、对待处理的匿名内部类,进行重命名处理,得到重写后的第二应用程序。
可选的,步骤S303包括以下几个步骤。
第一步骤、将具有类型映射关系的待处理的匿名内部类,重命名为第一类中的预设的匿名内部类的名称,其中,预设的匿名内部类为与待处理的匿名内部类之间具有类型映射关系的类;并且,确定具有类型映射关系的待处理的匿名内部类,为一个重命名的类。
第二步骤、将待处理的匿名内部类为不存在于第一类中的类,重命名为一个新的名称,并且确定为一个重命名的类。
在本步骤中,在对第二类中待处理的匿名内部类,进行重命名的时候,将具有类型映射关系的待处理的匿名内部类,重命名为第一类中的与所待处理的匿名内部类之间有类型映射关系的匿名内部类的名称;并且,将具有类型映射关系的待处理的匿名内部类,标注一个重命名的类,例如,标注一个重命名的类,重命名的类的名称为原类型+$copy。
并且,将第二类中的不存在于第一类中的匿名内部类,进行重新的命名,即,重命名为一个新的名称。并且,将该匿名内部类,确定为一个重命名的类。
举例来说,对于步骤S302中的第一种举例说明,将第二类中的匿名内部类A$3,重命名为匿名内部类A$2;为第二类中的匿名内部类A$2,进行重新命名。
对于步骤S302中的第二种举例说明,将第二类中的匿名内部类A$2,重命名为匿名内部类A$3。
对于步骤S302中的第三种举例说明,将第二类中的匿名内部类A$2,重命名为匿名内部类A$3;将第二类中的匿名内部类A$3,重命名为匿名内部类A$2。
S304、将第一应用程序与重写后的第二应用程序进行比对,得到补丁。
在本步骤中,本步骤可以参见图1所示的步骤S103。
S305、将补丁发送至安装有第一应用程序的终端设备,以使终端设备根据补丁对第一应用程序进行修复。
在本步骤中,在生成了补丁之后,将补丁发送给终端设备;其中,终端设备已经安装有第一应用程序,即,终端设备已经安装有旧的应用程序。
然后,终端设备根据接收到的补丁,对第一应用程序进行修复,进而完成应用程序的升级过程。
在匿名内部类中具有嵌套的子的匿名内部类的时候,针对每一个匿名内部类来说,对于嵌套的子的匿名内部类,可以执行上述步骤。
本实施例,通过对新的应用程序的各个外部类的匿名内部类进行重命名处理,在重写后的第二应用程序中的匿名内部类与第一应用程序中的匿名内部类的命名相同时,需要重写后的第二应用程序中的匿名内部类与第一应用程序中的匿名内部类的内容相同或者属性信息相同;在重写后的第二应用程序中的匿名内部类与第一应用程序中的匿名内部类的命名不同时,一定是需要重写后的第二应用程序中的匿名内部类与第一应用程序中的匿名内部类的内容不同。通过以上方式和原则,保证将旧的应用程序与新的应用程序的各个外部类中的匿名内部类进行比对的时候,匿名内部类的比对不会产生错乱,可以生成正确的补丁;进一步的,可以成功的加载补丁,成功的根据补丁对应用程序进行修复。并且,本实施例提供的方案,不需要对补丁进行大量的开发工作,可以降低人力和时间成本,提升补丁的生成和加载效率。并且,对于各个情况下的命名相同与否、内容相同与否的匿名内部类,进行重新命名的变更处理。
图8为本申请实施例提供的一种应用程序的补丁的生成装置的结构示意图,如图8所示,该应用程序的补丁的生成装置,包括:
获取单元31,用于获取第一应用程序的第一类中的各匿名内部类,并获取第二应用程序的第二类中的各匿名内部类,其中,第二类为用于与第一类进行比对的类。
处理单元32,用于根据第一类的各匿名内部类,对第二类中的各匿名内部类进行重命名处理,得到重写后的第二应用程序;其中,重写后的第二应用程序与第一应用程序之间,命名相同的匿名内部类的内容或属性信息相同。
生成单元33,用于将第一应用程序与重写后的第二应用程序进行比对,得到补丁。
本实施例提供的应用程序的补丁的生成装置,同于实现前述任一实施例提供的应用程序的补丁的生成方法中的技术方案,其实现原理和技术效果类似,不再赘述。
图9为本申请实施例提供的另一种应用程序的补丁的生成装置的结构示意图,在图8所示实施例的基础上,如图9所示,该应用程序的补丁的生成装置中,处理单元32,包括:
第一处理模块321,用于对第一类中的各匿名内部类与第二类中的各匿名内部类进行比较,得到待处理的匿名内部类,其中,待处理的匿名内部类为第二类中的匿名内部类。
第二处理模块322,用于对待处理的匿名内部类,进行重命名处理,得到重写后的第二应用程序。
可选的,重写后的第二应用程序与第一应用程序之间,命名不同的匿名内部类的内容不同。
可选的,待处理的匿名内部类为与第一类中的一个匿名内部类之间命名不同、且内容相同的类;或者,待处理的匿名内部类为与第一类中的一个匿名内部类之间属性信息相同、且内容不同的类;或者,待处理的匿名内部类为不存在于第一类中的类。
第一处理模块321,包括:
判断子模块3211,用于对比第一类与第二类中的命名相同的匿名内部类,判断命名相同的匿名内部类之间的内容,是否相同。
第一处理子模块3212,用于若确定命名相同的匿名内部类之间的内容相同,则将第二类中的与一类的匿名内部类的命名相同的匿名内部类,标记为无需处理的匿名内部类。
第二处理子模块3213,用于将第一类与第二类中的命名不同的匿名内部类,变更为同一命名,得到第一类中的变更后的匿名内部类、第二类中的变更后的匿名内部类。
第三处理子模块3214,用于若确定第一类中的变更后的匿名内部类与第二类中的变更后的匿名内部类之间的内容相同时,则标记第二类中的与第一类中匿名内部类的命名不同的匿名内部类,为一个待处理的匿名内部类,并确定该待处理的匿名内部类与第一类中匿名内部类的命名不同的匿名内部类之间具有类型映射关系。可选的,第二类中的与第一类中匿名内部类的命名不同的匿名内部类,为与第一类中的一个匿名内部类之间命名不同、且内容相同的类。
第一处理模块321,还包括:
第四处理子模块3215,用于在第三处理子模块3214确定该待处理的匿名内部类与第一类中匿名内部类的命名不同的匿名内部类之间具有类型映射关系之后,若确定第二类中未经过标记的匿名内部类与第一类中的一个匿名内部类的属性信息相同,则标记第二类中的未经过比较的匿名内部类,为一个待处理的匿名内部类,并确定该待处理的匿名内部类与第一类中属性信息相同的一个匿名内部类之间具有类型映射关系。可选的,第二类中未经过标记的匿名内部类,为与第一类中的一个匿名内部类之间属性信息相同、且内容不同的类。
属性信息包括父类信息和/或接口信息。
第一处理模块321,还包括:
第五处理子模块3216,用于在第四处理子模块3215确定该待处理的匿名内部类与第一类中属性信息相同的一个匿名内部类之间具有类型映射关系之后,确定第二类中的未经过各标记的处理的匿名内部类,为一个待处理的匿名内部类。可选的,第二类中的未经过标记的匿名内部类,为不存在于第一类中的类。
第二处理模块322,包括:
第一命名子模块3221,用于将具有类型映射关系的待处理的匿名内部类,重命名为第一类中的预设的匿名内部类的名称,其中,预设的匿名内部类为与待处理的匿名内部类之间具有类型映射关系的类;并且,确定具有类型映射关系的待处理的匿名内部类,为一个重命名的类。
第二命名子模块3222,用于将待处理的匿名内部类为不存在于第一类中的类,重命名为一个新的名称,并且确定为一个重命名的类。
本实施例提供的应用程序的补丁的生成装置,还包括:
发送单元41,用于在生成单元33将第一应用程序与重写后的第二应用程序进行比对,得到补丁之后,将补丁发送至安装有第一应用程序的终端设备,以使终端设备根据补丁对第一应用程序进行修复。
本实施例提供的应用程序的补丁的生成装置,同于实现前述任一实施例提供的应用程序的补丁的生成方法中的技术方案,其实现原理和技术效果类似,不再赘述。
图10为本申请实施例提供的一种电子设备的结构示意图,如图10所示,该电子设备,包括:发送器71、接收器72、存储器73和处理器74;
存储器73用于存储计算机指令;处理器74用于运行存储器73存储的计算机指令实现前述实施例提供任一实现方式的应用程序的补丁的生成方法的技术方案。
本申请还提供一种存储介质,包括:可读存储介质和计算机指令,计算机指令存储在可读存储介质中;计算机指令用于实现前述例提供的任一实现方式的播放处理方法的技术方案。
在上述电子设备的具体实现中,应理解,处理器74可以是中央处理单元(英文:Central Processing Unit,简称:CPU),还可以是其他通用处理器、数字信号处理器(英文:Digital Signal Processor,简称:DSP)、专用集成电路(英文:Application SpecificIntegrated Circuit,简称:ASIC)等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:只读存储器(英文:read-only memory,缩写:ROM)、RAM、快闪存储器、硬盘、固态硬盘、磁带(英文:magnetictape)、软盘(英文:floppy disk)、光盘(英文:optical disc)及其任意组合。
最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。

Claims (13)

1.一种应用程序的补丁的生成方法,其特征在于,所述应用程序的补丁的生成方法,包括:
获取第一应用程序的第一类中的各匿名内部类,并获取第二应用程序的第二类中的各匿名内部类,其中,所述第二类为用于与所述第一类进行比对的类;
根据所述第一类的各匿名内部类,对所述第二类中的各匿名内部类进行重命名处理,得到重写后的第二应用程序;其中,所述重写后的第二应用程序与所述第一应用程序之间,命名相同的匿名内部类的内容或属性信息相同;
将所述第一应用程序与所述重写后的第二应用程序进行比对,得到补丁。
2.根据权利要求1所述的应用程序的补丁的生成方法,其特征在于,根据所述第一类的各匿名内部类,对所述第二类中的各匿名内部类进行重命名处理,得到重写后的第二应用程序,包括:
对所述第一类中的各匿名内部类与所述第二类中的各匿名内部类进行比较,得到待处理的匿名内部类,其中,所述待处理的匿名内部类为所述第二类中的匿名内部类;
对所述待处理的匿名内部类,进行所述重命名处理,得到所述重写后的第二应用程序。
3.根据权利要求2所述的应用程序的补丁的生成方法,其特征在于,所述重写后的第二应用程序与所述第一应用程序之间,命名不同的匿名内部类的内容不同。
4.根据权利要求3所述的应用程序的补丁的生成方法,其特征在于,所述待处理的匿名内部类为与所述第一类中的一个匿名内部类之间命名不同、且内容相同的类;
或者,所述待处理的匿名内部类为与所述第一类中的一个匿名内部类之间属性信息相同、且内容不同的类;
或者,所述待处理的匿名内部类为不存在于所述第一类中的类。
5.根据权利要求4所述的应用程序的补丁的生成方法,其特征在于,对所述第一类中的各匿名内部类与所述第二类中的各匿名内部类进行比较,得到待处理的匿名内部类,包括:
对比所述第一类与所述第二类中的命名相同的匿名内部类,判断所述命名相同的匿名内部类之间的内容,是否相同;
若确定所述命名相同的匿名内部类之间的内容相同,则将所述第二类中的与所述一类的匿名内部类的命名相同的匿名内部类,标记为无需处理的匿名内部类;
将所述第一类与所述第二类中的命名不同的匿名内部类,变更为同一命名,得到所述第一类中的变更后的匿名内部类、所述第二类中的变更后的匿名内部类;
若确定所述第一类中的变更后的匿名内部类与所述第二类中的变更后的匿名内部类之间的内容相同时,则标记所述第二类中的与第一类中匿名内部类的命名不同的匿名内部类,为一个所述待处理的匿名内部类,并确定该待处理的匿名内部类与所述第一类中匿名内部类的命名不同的匿名内部类之间具有类型映射关系。
6.根据权利要求5所述的应用程序的补丁的生成方法,其特征在于,在确定该待处理的匿名内部类与所述第一类中匿名内部类的命名不同的匿名内部类之间具有类型映射关系之后,还包括:
若确定所述第二类中未经过标记的匿名内部类与所述第一类中的一个匿名内部类的属性信息相同,则标记所述第二类中的未经过比较的匿名内部类,为一个所述待处理的匿名内部类,并确定该待处理的匿名内部类与所述第一类中属性信息相同的一个匿名内部类之间具有类型映射关系。
7.根据权利要求6所述的应用程序的补丁的生成方法,其特征在于,所述属性信息包括父类信息和/或接口信息。
8.根据权利要求6所述的应用程序的补丁的生成方法,其特征在于,在确定该待处理的匿名内部类与所述第一类中属性信息相同的一个匿名内部类之间具有类型映射关系之后,还包括:
确定所述第二类中的未经过各所述标记的处理的匿名内部类,为一个所述待处理的匿名内部类。
9.根据权利要求5-8任一项所述的应用程序的补丁的生成方法,其特征在于,对所述待处理的匿名内部类,进行所述重命名处理,得到所述重写后的第二应用程序,包括:
将具有类型映射关系的待处理的匿名内部类,重命名为所述第一类中的预设的匿名内部类的名称,其中,所述预设的匿名内部类为与所述待处理的匿名内部类之间具有类型映射关系的类;并且,确定所述具有类型映射关系的待处理的匿名内部类,为一个重命名的类;
将所述待处理的匿名内部类为不存在于所述第一类中的类,重命名为一个新的名称,并且确定为一个重命名的类。
10.根据权利要求5-8任一项所述的应用程序的补丁的生成方法,其特征在于,在将所述第一应用程序与所述重写后的第二应用程序进行比对,得到补丁之后,还包括:
将所述补丁发送至安装有所述第一应用程序的终端设备,以使所述终端设备根据所述补丁对所述第一应用程序进行修复。
11.一种应用程序的补丁的生成装置,其特征在于,所述应用程序的补丁的生成装置,包括:
获取单元,用于获取第一应用程序的第一类中的各匿名内部类,并获取第二应用程序的第二类中的各匿名内部类,其中,所述第二类为用于与所述第一类进行比对的类;
处理单元,用于根据所述第一类的各匿名内部类,对所述第二类中的各匿名内部类进行重命名处理,得到重写后的第二应用程序;其中,所述重写后的第二应用程序与所述第一应用程序之间,命名相同的匿名内部类的内容或属性信息相同;
生成单元,用于将所述第一应用程序与所述重写后的第二应用程序进行比对,得到补丁。
12.一种电子设备,其特征在于,包括:发送器、接收器、存储器和处理器;
所述存储器用于存储计算机指令;所述处理器用于运行所述存储器存储的所述计算机指令实现权利要求1-10任一项所述的应用程序的补丁的生成方法。
13.一种存储介质,其特征在于,包括:可读存储介质和计算机指令,所述计算机指令存储在所述可读存储介质中;所述计算机指令用于实现权利要求1-10任一项所述的应用程序的补丁的生成方法。
CN201910580429.5A 2019-06-28 2019-06-28 应用程序的补丁的生成方法、装置、设备和存储介质 Active CN110333892B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910580429.5A CN110333892B (zh) 2019-06-28 2019-06-28 应用程序的补丁的生成方法、装置、设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910580429.5A CN110333892B (zh) 2019-06-28 2019-06-28 应用程序的补丁的生成方法、装置、设备和存储介质

Publications (2)

Publication Number Publication Date
CN110333892A true CN110333892A (zh) 2019-10-15
CN110333892B CN110333892B (zh) 2022-12-13

Family

ID=68144581

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910580429.5A Active CN110333892B (zh) 2019-06-28 2019-06-28 应用程序的补丁的生成方法、装置、设备和存储介质

Country Status (1)

Country Link
CN (1) CN110333892B (zh)

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103559449A (zh) * 2013-11-15 2014-02-05 华为技术有限公司 一种代码改动的检测方法及装置
CN104216719A (zh) * 2013-05-30 2014-12-17 深圳创维无线技术有限公司 一种android系统的升级方法和装置
US20150222620A1 (en) * 2014-01-31 2015-08-06 Oracle International Corporation System and method for providing application security in a cloud computing environment
CN106020873A (zh) * 2016-05-13 2016-10-12 腾讯科技(深圳)有限公司 补丁包加载方法及装置
CN106302592A (zh) * 2015-05-28 2017-01-04 腾讯科技(深圳)有限公司 终端应用的更新方法、服务器和终端
CN107179925A (zh) * 2017-04-14 2017-09-19 北京五八信息技术有限公司 热更新方法及装置
CN107346252A (zh) * 2016-05-07 2017-11-14 腾讯科技(深圳)有限公司 应用更新方法和装置
CN109086059A (zh) * 2017-06-14 2018-12-25 腾讯科技(北京)有限公司 代码加载更新方法、装置及服务器
CN109491695A (zh) * 2018-10-19 2019-03-19 华南理工大学 一种集成安卓应用的增量更新方法

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104216719A (zh) * 2013-05-30 2014-12-17 深圳创维无线技术有限公司 一种android系统的升级方法和装置
CN103559449A (zh) * 2013-11-15 2014-02-05 华为技术有限公司 一种代码改动的检测方法及装置
US20150222620A1 (en) * 2014-01-31 2015-08-06 Oracle International Corporation System and method for providing application security in a cloud computing environment
CN106302592A (zh) * 2015-05-28 2017-01-04 腾讯科技(深圳)有限公司 终端应用的更新方法、服务器和终端
CN107346252A (zh) * 2016-05-07 2017-11-14 腾讯科技(深圳)有限公司 应用更新方法和装置
CN106020873A (zh) * 2016-05-13 2016-10-12 腾讯科技(深圳)有限公司 补丁包加载方法及装置
CN107179925A (zh) * 2017-04-14 2017-09-19 北京五八信息技术有限公司 热更新方法及装置
CN109086059A (zh) * 2017-06-14 2018-12-25 腾讯科技(北京)有限公司 代码加载更新方法、装置及服务器
CN109491695A (zh) * 2018-10-19 2019-03-19 华南理工大学 一种集成安卓应用的增量更新方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
肖秋红: "Android动态加载框架EasyDynamicLoad的设计与实现", 《中国优秀硕士学位论文全文数据库信息科技辑》 *

Also Published As

Publication number Publication date
CN110333892B (zh) 2022-12-13

Similar Documents

Publication Publication Date Title
US7630998B2 (en) Performing a deletion of a node in a tree data storage structure
US7921330B2 (en) Data migration manager
CN103955363B (zh) 一种程序升级安装包的制作方法
US20200089492A1 (en) Software dependency shading
US20230117105A1 (en) On-demand loading of dynamic scripting language code for reduced memory usage
US20100293538A1 (en) Dynamic program updating in a continuation based runtime
CN106528071B (zh) 目标代码的选取方法及装置
WO2011151111A1 (en) Method and system of adapting a data model to a user interface component
US20110029822A1 (en) Tracking of java objects during request processing
CN107038519B (zh) 用于系统之间的双向数据同步的方法和系统
CN110515647A (zh) 一种静态资源管理方法、装置、设备和存储介质
CN106095501A (zh) 一种应用部署方法及装置
US20160253157A1 (en) Software refactoring
US20150294436A1 (en) Apparatus and method for graphics state management
US10579520B2 (en) Multi-ring shared, traversable, and dynamic advanced database
US10387133B2 (en) Identifying unmatched registry entries
CN106446064A (zh) 一种数据转换方法及装置
US20130066899A1 (en) Flexible Metadata Composition
CN113515303A (zh) 一种项目转型方法、装置和设备
US20120221890A1 (en) Mechanism for managing kernel application binary interface/application programming interface-based discrepancies relating to kernel packages
CN106354624B (zh) 一种自动化测试方法和装置
US8689200B1 (en) Method and system for optimizing an executable program by generating special operations for identical program entities
CN110333892A (zh) 应用程序的补丁的生成方法、装置、设备和存储介质
US20150212799A1 (en) Migration between model elements of different types in a modeling environment
US11861332B2 (en) String localization for universal use

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant