CN109445807A - 实现应用程序更新的方法、装置和计算机可读存储介质 - Google Patents
实现应用程序更新的方法、装置和计算机可读存储介质 Download PDFInfo
- Publication number
- CN109445807A CN109445807A CN201710748771.2A CN201710748771A CN109445807A CN 109445807 A CN109445807 A CN 109445807A CN 201710748771 A CN201710748771 A CN 201710748771A CN 109445807 A CN109445807 A CN 109445807A
- Authority
- CN
- China
- Prior art keywords
- class
- byte code
- application program
- code files
- reparation
- 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
- 238000000034 method Methods 0.000 title claims abstract description 73
- 230000008439 repair process Effects 0.000 claims abstract description 47
- 230000007547 defect Effects 0.000 claims abstract description 26
- 230000008569 process Effects 0.000 claims description 21
- 238000013507 mapping Methods 0.000 claims description 15
- 238000002347 injection Methods 0.000 claims description 10
- 239000007924 injection Substances 0.000 claims description 10
- 238000004590 computer program Methods 0.000 claims description 4
- 238000012795 verification Methods 0.000 abstract description 10
- 230000009471 action Effects 0.000 abstract description 6
- 230000006399 behavior Effects 0.000 abstract description 5
- 230000007246 mechanism Effects 0.000 abstract description 4
- 230000002159 abnormal effect Effects 0.000 abstract description 3
- 230000000694 effects Effects 0.000 abstract description 3
- 238000007689 inspection Methods 0.000 abstract description 2
- 238000010586 diagram Methods 0.000 description 12
- 238000004891 communication Methods 0.000 description 11
- 238000012545 processing Methods 0.000 description 10
- 238000005516 engineering process Methods 0.000 description 6
- 230000008859 change Effects 0.000 description 5
- 239000000243 solution Substances 0.000 description 5
- 230000006870 function Effects 0.000 description 4
- 230000005236 sound signal Effects 0.000 description 4
- 238000006243 chemical reaction Methods 0.000 description 3
- 238000009434 installation Methods 0.000 description 3
- 230000003993 interaction Effects 0.000 description 3
- 230000000712 assembly Effects 0.000 description 2
- 238000000429 assembly Methods 0.000 description 2
- 239000004973 liquid crystal related substance Substances 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 238000004883 computer application Methods 0.000 description 1
- 230000006837 decompression Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000006073 displacement reaction Methods 0.000 description 1
- 238000005401 electroluminescence Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 239000012088 reference solution Substances 0.000 description 1
- 239000011800 void material Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明揭示了一种实现应用程序更新的方法、装置和计算机存储介质。所述方法包括:获得存在于更新字节码文件的修复类;根据修复类在应用程序的字节码文件缓存中获得目标字节码文件;在目标字节码文件中查找修复类对应的引用类;控制引用类执行修复类的引用解析,将修复类设置到目标字节码文件。补丁在用户无感知的情况下被载入的过程中,在目标字节码文件的引用类的作用下实现了修复类的主动引用,从而能够在遵循系统源码的实现机制突破类的校验限制,不再需要进行类的检验,相应的,也不再由此而出现异常,解决了通过补丁而在用户无感知情况下进行应用程序缺陷修复过程中的兼容性问题,并且也不会产生运行时性能不佳和内存消耗大等负面影响。
Description
技术领域
本发明涉及计算机应用技术领域,特别涉及一种实现应用程序更新的方法、装置和计算机可读存储介质。
背景技术
应用程序一经在发布之后,便会被用户下载运行于所使用的终端设备。但是在此应用程序被用户使用的过程中,往往会出现此应用程序存在缺陷而需要紧急修复情况。
此时,如果进行应用程序的重新发布往往会产生非常高的成本。现有的较佳解决方案是不再重新发布更新的应用程序,而向用户下发相应的补丁,通过补丁在用户无感知的情况下修复应用程序的缺陷。
具体而言,将补丁被编译和转换所生成的字节码文件加载至终端设备中系统平台配置的Dalvik虚拟机,以此来使得Dalvik虚拟机实现的应用程序运行中存在的缺陷获得修复。
在Dalvik虚拟机为补丁所进行的字节码文件加载中,由于字节码文件中修复类所对应的引用类并不存在于此字节码文件中,而位于应用程序原本发布的文件,所以会导致字节码文件中类的校验失败,系统抛出异常,无法完成应用程序的更新。由此可知,对于配置了Dalvik虚拟机的系统平台而言,通过补丁而在用户无感知情况下进行的应用程序缺陷修复存在兼容性问题。
针对此兼容性问题,现有的解决方案包括两种,一种解决方案是将类的校验延迟至运行阶段,并通过对所有类额外添加代码信息保证运行阶段所进行的校验通过,此过程侵入性强,在影响安装包大小的同时也增加了运行的耗时。
另一种解决方案是替换应用程序的所有可执行文件,即应用程序的全量替换,由此就可以将需要修复的类替换为修复类,并且由于所有可执行文件都进行了替换,并没有改变所有类在可执行文件的分布,故不会出现异常,解决了兼容性的问题,但是,存在着非常大的内存消耗。
由此可以知道,通过补丁而在用户无感知情况下进行应用程序缺陷修复的过程中虽解决了兼容性问题时,但是却产生了运行时性能不佳和内存消耗大等诸多方面的负面影响。
发明内容
为了解决相关技术中通过补丁而在用户无感知情况下进行应用程序缺陷修复过程中的兼容性问题又避免产生运行时性能不佳和内存消耗大等负面影响的技术问题,本发明提供了一种实现应用程序更新的方法、装置和计算机存储介质。
一种实现应用程序更新的方法,所述方法包括:
根据应用程序的所有可执行文件和注入补丁所生成更新字节码文件,获得存在于所述更新字节码文件的修复类;
根据所述修复类在所述应用程序的字节码文件缓存中获得被所述修复类更新的字节码文件,以所述字节码文件为目标字节码文件;
在所述目标字节码文件中查找修复类对应的引用类;
控制所述引用类执行所述修复类的引用解析,将所述修复类设置到所述目标字节码文件,完成所述目标字节码文件中待修复类的替换。
一种实现应用程序更新的装置,所述装置包括:
修复类获得模块,用于根据应用程序的所有可执行文件和注入补丁所生成更新字节码文件,获得存在于所述更新字节码文件的修复类;
目标文件获得模块,用于根据所述修复类在所述应用程序的字节码文件缓存中获得被所述修复类更新的字节码文件,以所述字节码文件为目标字节码文件;
查找模块,用于在所述目标字节码文件中查找修复类对应的引用类;
引用解析模块,用于控制所述引用类执行所述修复类的引用解析,将所述修复类设置到所述目标字节码文件,完成所述目标字节码文件中待修复类的替换。
一种实现应用程序更新的装置,包括:
处理器;以及
存储器,所述存储器上存储有计算机可读指令,所述计算机可读指令被所述处理器执行时实现如上所述的实现应用程序更新的方法。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如上所述的实现应用程序更新的方法。
本发明的实施例提供的技术方案可以包括以下有益效果:
在为应用程序中的缺陷安装了补丁之后,将根据应用程序的所有可执行文件和注入补丁所生成更新字节码文件,获得存在于更新字节码文件的修复类,然后根据修复类在应用程序的字节码文件缓存中获得被修复类更新的字节码文件,以字节码文件为目标字节码文件,在目标字节码文件中查找修复类对应的引用类,控制引用类执行修复类的引用解析,将修复类设置到目标字节码文件,完成目标字节码文件中待修复类的替换,由此,补丁在用户无感知的情况下被载入的过程中,在目标字节码文件的引用类的作用下实现了修复类的主动引用,从而能够在遵循系统源码的实现机制突破类的校验限制,不再需要进行类的检验,相应的,也不再由此而出现异常,解决了通过补丁而在用户无感知情况下进行应用程序缺陷修复过程中的兼容性问题,并且也不会产生运行时性能不佳和内存消耗大等负面影响。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本发明。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并于说明书一起用于解释本发明的原理。
图1是根据一示例性实施例示出的一种装置的框图;
图2是根据一示例性实施例示出的一种实现应用程序更新的方法的流程图;
图3是根据图2对应实施例示出的对步骤210的细节进行描述的流程图;
图4是根据图2对应实施例示出的对步骤230的细节进行描述的流程图;
图5是根据图2对应实施例示出的对步骤270的细节进行描述的流程图;
图6是根据一示例性实施例示出的修复类加载中涉及的Dalvik虚拟机工作机制流程图;
图7是Java层中调用Dalvik虚拟机实现应用程序缺陷修复的实现示意图;
图8是根据一示例性实施例示出的一种实现应用程序更新的装置的框图;
图9是根据图7对应实施例示出的对修复类获得模块的细节进行描述的框图;
图10是根据图7对应实施例示出的对目标文件获得模块的细节进行描述的框图;
图11是根据图7对应实施例示出的对引用解析模块的细节进行描述的框图。
具体实施方式
这里将详细地对示例性实施例执行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。
在一个示例性实施例中,本发明所涉及的实施环境,至少包括用户所使用的终端设备。终端设备可以是台式电脑、笔记本电脑、智能手机和平板电脑等。
终端设备在获得应用程序或者补丁并安装之后,通过终端设备中系统平台所配置的虚拟机实现加载和运行,而对于本发明所实现的应用程序更新,也将由虚拟机完成补丁所对应的加载过程,进而使得应用程序所缓存的类获得更新,即待修复类被替换成修复类,以此来最终实现应用程序所存在缺陷的修复。
图1是根据一示例性实施例示出的一种装置的框图。例如,装置100可以是图1所示实施环境中的终端设备。
参照图1,装置100可以包括以下一个或多个组件:处理组件102,存储器104,电源组件106,多媒体组件108,音频组件110,传感器组件114以及通信组件116。
处理组件102通常控制装置100的整体操作,诸如与显示,电话呼叫,数据通信,相机操作以及记录操作相关联的操作等。处理组件102可以包括一个或多个处理器118来执行指令,以完成下述的方法的全部或部分步骤。此外,处理组件102可以包括一个或多个模块,便于处理组件102和其他组件之间的交互。例如,处理组件102可以包括多媒体模块,以方便多媒体组件108和处理组件102之间的交互。
存储器104被配置为存储各种类型的数据以支持在装置100的操作。这些数据的示例包括用于在装置100上操作的任何应用程序或方法的指令。存储器104可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(Static RandomAccess Memory,简称SRAM),电可擦除可编程只读存储器(Electrically ErasableProgrammable Read-Only Memory,简称EEPROM),可擦除可编程只读存储器(ErasableProgrammable Read Only Memory,简称EPROM),可编程只读存储器(Programmable Red-Only Memory,简称PROM),只读存储器(Read-Only Memory,简称ROM),磁存储器,快闪存储器,磁盘或光盘。存储器104中还存储有一个或多个模块,该一个或多个模块被配置成由该一个或多个处理器118执行,以完成下述图2、图3、图4和图5任一所示方法中的全部或者部分步骤。
电源组件106为装置100的各种组件提供电力。电源组件106可以包括电源管理系统,一个或多个电源,及其他与为装置100生成、管理和分配电力相关联的组件。
多媒体组件108包括在所述装置100和用户之间的提供一个输出接口的屏幕。在一些实施例中,屏幕可以包括液晶显示器(Liquid Crystal Display,简称LCD)和触摸面板。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。屏幕还可以包括有机电致发光显示器(Organic Light Emitting Display,简称OLED)。
音频组件110被配置为输出和/或输入音频信号。例如,音频组件110包括一个麦克风(Microphone,简称MIC),当装置100处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器104或经由通信组件116发送。在一些实施例中,音频组件110还包括一个扬声器,用于输出音频信号。
传感器组件114包括一个或多个传感器,用于为装置100提供各个方面的状态评估。例如,传感器组件114可以检测到装置100的打开/关闭状态,组件的相对定位,传感器组件114还可以检测装置100或装置100一个组件的位置改变以及装置100的温度变化。在一些实施例中,该传感器组件114还可以包括磁传感器,压力传感器或温度传感器。
通信组件116被配置为便于装置100和其他设备之间有线或无线方式的通信。装置100可以接入基于通信标准的无线网络,如WiFi(WIreless-Fidelity,无线保真)。在一个示例性实施例中,通信组件116经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,所述通信组件116还包括近场通信(Near FieldCommunication,简称NFC)模块,以促进短程通信。例如,在NFC模块可基于射频识别(RadioFrequency Identification,简称RFID)技术,红外数据协会(Infrared DataAssociation,简称IrDA)技术,超宽带(Ultra Wideband,简称UWB)技术,蓝牙技术和其他技术来实现。
在示例性实施例中,装置100可以被一个或多个应用专用集成电路(ApplicationSpecific Integrated Circuit,简称ASIC)、数字信号处理器、数字信号处理设备、可编程逻辑器件、现场可编程门阵列、控制器、微控制器、微处理器或其他电子元件实现,用于执行下述方法。
图2是根据一示例性实施例示出的一种实现应用程序更新的方法的流程图。该实现应用程序更新的方法适用于前述实施环境的终端设备,该终端设备在一个示例性实施例中可以是图1所示的装置。如图2所示,该实现应用程序更新的方法,可以由终端设备执行,可以包括以下步骤。
在步骤210中,根据应用程序的所有可执行文件和注入补丁所生成更新字节码文件,获得存在于更新字节码文件的修复类。
其中,应用程序用于为终端设备实现指定功能,在此应用程序实质上是为一应用的主程序,而补丁则是相对于此应用程序而言的。补丁是为应用程序的缺陷而发布的修复程序。
在此应当说明的是,终端设备的系统平台为Android系统平台,相对应的,系统平台中运行的虚拟机即为Dalvik虚拟机,进而实现Android应用程序的运行。
应用程序和补丁都包括了可执行文件、资源文件和全局配置文件。在Android系统平台下,应用程序和补丁都为Android应用程序。可执行文件为Android Dalvik执行程序,在具体实现中,以dex文件的形式存在。
Android系统平台中,在运行应用程序或补丁时,首先会进行文件解压,然后编译解析所获得的文件即可得到可执行文件和全局配置文件,获取全局配置文件中的配置信息,根据配置信息实现可执行文件的最终执行。可执行文件的执行是将可执行文件所对应字节码文件加载至Dalvik虚拟机,进而由Dalvik虚拟机对所载入字节码文件所包含类执行缓存,在需要时获得缓存的类并执行的过程。
综上,可执行文件被编译转换而生成相应字节码文件,例如,Class文件,字节码文件是以类为单位存在的,换而言之,可执行文件需要编译转换为类的形式方可被Dalvik虚拟机执行。也就是说,能够被Dalvikd虚拟机执行,且所存在缺陷的修复最终落实到的类,是分布于应用程序或补丁所对应的可执行文件上的。
相对于应用程序的所有可执行文件,补丁的可执行文件上分布的类,包括两种,一种是基于原有类,即分布于应用程序的所有可执行文件的类更新而获得的,是修复类,另一种则是为了配合修复类所写入的,是新增类,新增类和修复类之间存在着引用关系。
补丁的可执行文件被编译转换之后,生成的字节码文件即为更新字节码文件,由此更新字节码文件即可获得存在的所有类以及分别映射的标识。对于更新字节码文件所存在的每一个类,如果其原先是分布在应用程序的可执行文件的,则此类是作为修复类存在的,反之则是新增类。
在此,可以理解,对于根据应用程序的所有可执行文件和注入补丁所生成更新字节码文件获得更新字节码文件中修复类的实现过程,可以是应用程序和补丁之间根据标识所进行的比对过程,也可以是针对更新字节码文件向应用程序执行的查找过程,在此可以根据具体需要进行配置。
在步骤230中,根据修复类在应用程序的字节码文件缓存中获得被修复类更新的字节码文件,以字节码文件为目标字节码文件。
其中,在应用程序的所有可执行文件被编译和转换之后,便被Dalvik虚拟机加载,进而实现此应用程序的节字码文件缓存,以供应用程序运行时以类为单位执行代码信息。
如前所述的,修复类在应用程序的字节码文件中存在着相对应的类,应用程序的字节码文件中,与修复类对应的类是导致缺陷而需要进行修复的类,因此,其所在的字节码文件便成为应用程序更新的目标,因此,是目标字节码文件。
应当说明的是,往往存在着多个修复类,与此相对应的,可以由应用程序的字节码文件缓存中确定一个或者两个以上的字节码文件为目标字节码文件。
在步骤250中,在目标字节码文件中查找修复类对应的引用类。
其中,引用类是目标字节码文件中即将与修复类形成二者之间引用关系的类。需要为补丁所存在的修复类配置其在目标字节码文件中的引用类,以使得补丁能够被Dalvik虚拟机成功加载。
修复类对应的引用类是目标字节码文件中已经被Dalvik虚拟机成功加载的类即可。可以设置一定的配置文件,进而能够根据配置文件中指定的类来实现目标字节码文件中类的查找。对于引用类,可以固定设置一简单的空类来作为修复类在目标字节码文件中对应的引用类。
在一个示例性实施例中,步骤250包括:根据配置信息所指定的类和目标字节码文件的类型,在目标字节码文件进行类的查找,获得修复类对应的引用类。
根据配置信息中类的指定,可以获知字节码文件中哪些类是能够作为引用类的;而根据目标字节码文件的不同类型,最终确定一个类来作为修复类所对应的引用类。
例如,目标字节码文件的类型可以是主dex,也可以是主dex拆分而产生的分dex。
如果目标字节码文件的类型是主dex,则可以在目标字节码文件已经被成功加载的类中直接使用Application类作为修复类对应的引用类;对于其它分dex,可以使用自身所存在的一固定空类来作为修复类对应的引用类,由此将使得为修复类在目标字节码文件中进行的引用类配置不会对运行性能造成影响,仅仅依赖于目标字节码文件原本存在的类实现。
比如,在一应用程序的实现中,其分dex在完成自身在Dalvik虚拟机中的加载之后,会尝试加载其所包含的一个固定空类来验证加载是否成功,此固定空类即可作为修复类在分dex类型的目标字节码文件中对应的引用类。
在步骤270中,控制引用类执行修复类的引用解析,将修复类设置到目标字节码文件,完成目标字节码文件中待修复类的替换。
其中,由于应用程序的所有字节码文件已被Dalvik虚拟机加载至缓存,即成为应用程序的字节码文件缓存,因此,存在于目标字节码文件的引用类也是存在于缓存中的,Dalvik虚拟机可以读取并执行此引用类。
因此,在为修复类确定了所对应的引用类之后,即可通过Dalvik虚拟机使得引用类向修复类执行主动引用指令,由此方能够引用并解析修复类。
修复类的引用解析实质是将修复类加载到Dalvik虚拟机的过程,此过程在一个示例性实施例的具体实现中,可以通过Dalvik虚拟机所加载的本地指令集实现,即通过Dalvik虚拟机里解析类的native(本地方法)实现,由此对于所实现的应用程序更新而言,在保证热补丁修复能力的前提下,没有对应用程序运行时的性能或者内存消耗等关键指标带来负面影响,轻量级的实现应用程序更新。
随着Dalvik虚拟机实现修复类的引用解析,使得修复类被设置到应用程序的字节码文件缓存中,进而替换待修复类,使得后续应用程序的运行不再执行待修复类,而是执行修复类,进而使得原本产生的缺陷不复存在。
通过上述示例性实施例,为Android系统平台中应用程序的应用程序通过热补丁,即在用户无感知情况所进行的更新,实现了使得此更新能够最终完成的辅助程序,进而在此辅助程序的作用下,补丁的修复类得以成功加载至Dalvik虚拟机,Android系统平台对于补丁在Dalvik虚拟机的加载不再抛出异常,而补丁的新增类,则会被已成功加载到Dalvik虚拟机的修复类引用,并且由于与修复类处于相同字节码文件,即更新字节码文件,因此在加载过程中为会出现校验失败的情况,也能够成功被加载,由此便最终实现了更新字节码文件的加载,获得非常高的补丁成功率。
在一个示例性实施例中,步骤230包括以下实现过程。
如果存在于更新字节码文件的修复类不是存在于应用程序的字节码文件缓存,则执行根据修复类在应用程序的字节码文件缓存中获得被修复类更新的字节码文件,以字节码文件为目标字节码文件。
也就是说,对于步230的执行,需判断存在于更新字节码文件的修复类是否存在于应用程序的字节码文件缓存,如果为否,则执行步骤230,如果为是,则不做任何处理。
其中,在确定了存在于更新字节码文件中的修复类之后,需要确认此修复类是否已经被Dalvik虚拟机成功加载。例如,终端设备的系统平台运行之后,已完成了应用程序及其补丁在Dalvik虚拟机中的加载,此时,将不再需要执行更新字节码文件中修复类的加载过程,只需要直接从应用程序的字节码文件缓存中读取即可。
如果终端设备的系统平台在运行并后,尚未执行补丁在Dalvik虚拟机的加载,即应用程序的字节码文件缓存中不存在更新字节码文件的修复类,此时,将通过前述示例性实施例来完成更新字节码文件的加载,以此来避免反复执行的加载过程,增强了系统平台以及应用程序的运行性能。
图3是根据图2对应实施例示出的对步骤210的细节进行描述的流程图。该步骤210,如图3所示,可以包括以下步骤。
在步骤211中,获得应用程序的所有可执行文件对应的标识集合。
其中,应当理解,应用程序配置了多个可执行文件,每一可执行文件被编译置换后的字节码文件存在着类,类是可执行文件在代码信息中的表示。因此,可以获得分布于每一可执行文件的类所映射的标识,进而形成所有可执行文件对应的标识集合。标识集合包含了分布于所有可执行文件的所有类映射的标识。
在步骤213中,根据更新字节码文件中类所映射的标识,在标识集合中进行查找。
其中,修复类是对待修复类做出的更新,因此,二者之间是映射了相同标识的。更新字节码文件中的类都有自身映射的标识,而标识集合也记录了应用程序所有节字码文件中所有类映射的标识,在一个示例性实施例中,所映射的标识可以是类名的形式等,在此不进行限定。
针对更新字节码文件中每一个类所映射的标识,在标识集合中查找是否存在此标识,如果存在,则说明应用程序的字节码文件中存在着此标识映射的类,此类即为待修复类。
在此应当补充说明的是,对于标识集合,可以由配置信息获得,也可以通过对应用程序的所有可执行文件进行查看获得,在此不进行限定。
在步骤215中,如果标识集合中存在更新字节码文件中类所映射的标识,则根据标识在更新字节码文件中与类的映射获得修复类。
通过此示例性实施例,实现了应用程序的字节码文件中待修复类的查找,对于更新字节码文件中的类而言,只要在应用程序的字节码文件中存在着相应的待修复类,那么这一更新字节码文件中的类即为修复类。
图4是根据图2对应实施例示出的对步骤230的细节进行描述的流程图。在一个示例性实施例中,该步骤230,如图4所示,可以包括以下步骤。
在步骤231中,在应用程序的字节码文件缓存查找修复类映射的标识。
其中,在确定更新字节码文件中存在的修复类之后,基于此而在应用程序的所有字节码文件中确定相应待修复类所在的字节码文件,以此字节码文件作为目标字节码文件。
因此,还应当以修复类映射的标识在应用程序的所有字节码文件进行查找,如果某一字节码文件中存在此标识,则此标识在这一字节码文件中映射的类即为待修复类,这一字节码文件也将在后续的更新过程中作为目标字节码文件存在。
在步骤233中,如果应用程序的字节码文件缓存中存在修复类映射的标识中,则获得标识所在的字节码文件为应用程序的字节码文件缓存中被修复类更新的字节码文件,以此字节码文件为目标字节码文件。
通过此示例性实施例,便为应用程序的更新确定了需要执行更新过程的目标字节码文件,进而使得后续所执行的更新过程仅针对目标字节码文件即可,提高了应用程序更新的针对性,且有利于提高应用程序的更新效率。
图5是根据图2对应实施例示出的对步骤270的细节进行描述的流程图。在一个示例性实施例中,步骤270如图5所示,可以包括以下步骤。
在步骤271中,从已加载的本地指令集获得主动引用指令。
其中,本地指令集是指Dalvik虚拟机运行的本地代码,其将在Dalvik虚拟机上运行,进而通过运行来使得Dalvik虚拟机能够实现字节码的执行。本地指令集提供了native函数的代码,在一个示例性的具体实现中,通过进行系统库的加载而使得系统库中包含的本地指令集被加载。
主动引用指令用于实现被引用类,在本示例性实施例中即为修复类被主动引用。在一个示例性实施例的具体实现中,主动引用指令可以是instance-of指令或者const-class指令。通过主动引用指令限定了修复类与其引用类,即待修复类之间的引用关系,从而方能够保证修复类能够被加载至Dalvik虚拟机中。
通过此过程便实现了修复类的加载,在一个示例性实施例的具体实现中,修复类的加载可以通过调用dvmResolveClass方法这一native方法实现。dvmResolveClass方法用于加载目标类,即修复类,进而将其缓存起来。
dvmResolveClass方法在系统库的本地指令集里,对于Dalvik虚拟机而言,在获取其句柄和地址之后便可以调用得到。但是,在dvmResolveClass方法的调用之前,首先需要获得三个入口参数。这三个入口参数包括:引用类的代码信息,目标类名以及布尔值fromUnverifiedConstant,布尔值fromUnverifiedConstant设置为true调用。
引用类即为待修复类,例如,ClassObject即为引用类在代码中的表示,由此即为所需要的代码信息。
在步骤273中,向引用类执行主动引用指令,通过主动引用指令的执行加载修复类,将修复类解析更新至目标字节码文件中,完成目标字节码文件中待修复类的替换。
其中,在通过主动引用指令而加载了修复类之后,即可使得修复类被缓存至目标字码文件中,并且由于修复类和被修复类都映射于相同标识,因此,修复类在目标字节码文件中的缓存,将替换了被修复类的存在。
通过此示例性实施例便实现了更新字节码文件中修复类的加载,借助于本地指令集,从native层切入而解决了平台兼容性问题,并且由于是从native层切入,也使得安全性能够得到保障。
至此,对于更新字节码文件存在的所有修复类而言,便完成了Dalvik虚拟机的加载过程,此时,由于已经成功完成了加载,便不再需要执行校验过程,也不需要关注于修复类是否与引用类处于相同的字节码文件,被加载至缓存的所有修复类在应用程序需要时即可执行,由此对于注入补丁的应用程序而言,运行效率得到较大提高。
在一个示例性实施例中,步骤270之后,该实现应用程序更新的方法还包括以下步骤。
被启动运行的应用程序中,应用程序的字节码文件缓存中修复类的被引用执行,存在缺陷的待修复类不再被执行。
其中,相对于应用程序的启动运行,由于所有修复类都完成了加载,即通过前述示例性实施例实现了预引用解析,因此可以直接执行,而原先存在缺陷的待修复类由于已被修复类替换,故不再被执行,与之相对应的,原有缺陷将不再存在。
对于应用程序而言,由于修复类的载入仅仅是在缓存中做了替换,并未额外的占用内存,所以并不会产生性能上的消耗,此外,对于应用程序的运行而言,也便得运行效率得到增强。
以一应用程序中更新的实现为例,结合具体应用场景,描述如上所述的方法。应当首先进行说明的是,应用中更新的实现,应当分为两大部分,一是经由编译器编译并由加载器而获得字节码文件的过程,二是向Dalvik虚拟机对字节码文件执行的加载过程。在完成这两大部分所对应的实现过程之后,更新的应用程序方可运行。
Android系统平台启动之后,所搭载的Dalvik虚拟机便会监视所有的程序和框架,并为此创建依存关系树,Dalvik虚拟机便通过依存关系树来为每个程序优化代码,并存储在缓存中。但是,当一个程序发生变更,其通过Dalvik虚拟机的作用,相应的缓存会发生变化。
在经由编译器编译并由加载器而获得字节码文件的过程中,所指的加载器为系统加载器。系统加载器将载入每一可执行文件,系统加载器配置了一个dexElement数组,一可执行文件对应于一数组元素,进而多个可执行文件的载入便排列成一个有序数组。
应用程序所注入的补丁,其可执行文件也被系统加载器载入并转换,进而生成更新字节码文件,但是应当说明的是,此更新字节码文件实质上是对应于多个可执行文件,即多dex的,由此后续Dalvik虚拟机所进行的加载,是基于多dex加载的方案。
在阐述Dalvik虚拟机加载过程之前,首先说明Dalvik虚拟机对补丁中类的调用所涉及的机制。
Dalvik虚拟机在进行补丁里类的加载调用时,需要同时满足三个条件才会抛出系统异常,换而言之,如果有一个条件未满足,便可顺利实现补丁里类的加载调用。
这三个条件,根据其判断顺序,具体为:被引用的方式是否是通过instance-of指令或者const-class指令实现;其次是引用类安装时校验是否成功,最后才是引用类和被引用类是否分布于同一可执行文件。
如前所述,本发明的实现,便是为了绕开后面两个条件而存在的。因此,如图6所示的,对于修复类ResolveClass,其将作为被引用类B,而在应用程序的可执行文件缓存(即图6所指示的dex缓存)中对应了被修复类A,对于修复类ResolveClass的加载,将首先执行步骤510,即判断B是否已经被解析进而存在于dex缓存中,如果为是,则不需要进行加载,在需要时直接执行dex缓存中的B即可。
如果dex缓存中并不存在B,则执行步骤520,触发进行B的加载。在根据前述示例性实施例执行B的加载过程中,将进行引用方式的判断,即判断B被引用的方式是否是通过instance-of指令或者const-class指令实现,如果为是,则成功返回B,进而使得解析更新到dex缓存中,此时,便不再涉及其它条件的判断。
与现有的实现过程相比较,对于现有将加载阶段对类所进行的校验,延迟到运行阶段的实现,需要给每个类的构造函数添加一个引用关系,引用一个分布在一独立字节码文件的类,这将导致补丁的所有类在安装阶段校验失败,接着在启动时,注入这个字节码文件,使得运行阶段的校验成功,不再由于兼容性而出现异常。
但是,此方案由于需要对所有类额外添加代码信息,侵入性强,在影响安装包大小的同时也增加了运行时的耗时。
而对于替换应用程序的所有可执行文件的方案,是应用程序所需要修复的类无论是多少个,安装的补丁包含了应用程序的所有可执行文件,以替换应用程序原先拥有的所有可执行文件,此方案存在着非常大的内存消耗。
本发明所涉及的实现过程,解决了Android补丁在Dalvik模式下的兼容性问题,并杜绝了各种负面影响,不会对运行时性能或者内存消耗等关键指标带来负面影响。
相对于现有将加载阶段对类所进行的校验,延迟到运行阶段的实现,移除了手术,不仅去掉了对代码较强的侵入性,而且使得应用程序的启动性能得到显著提升,例如,在测试难证中,启动性能大致提供了25%。
除此之外,本发明所涉及的实现使得整个补丁过程是轻量级的,保证了补丁的高稳定性和高成功率。
下面基于代码的实施角度,结合运行安卓系统的终端的软硬件架构阐述在Java层中调用Dalvik虚拟机实现应用程序缺陷修复的实现过程。不难理解地,Dalvik虚拟配合Java实现应用程序的运行,在此过程中,也会调用Native层中来实现本地指令集中本地指令的执行。
Java层基于Java代码实现,包括安卓系统中的任意Java方法、应用和应用框架;通过Dalvik虚拟机提供运行环境,并为Java层实现本地接口,进而能够实现Java层和Native层之间的互访。
图7是Java层中调用Dalvik虚拟机实现应用程序缺陷修复的实现示意图。无论应用程序还是补丁,即本发明针对应用程序实现缺陷修复的注入补丁,其都是运行在Java层,Java层通过Dalvik虚拟机实现的本地接口而实现自身与Dalvik虚拟机之间,甚至与Native层实现交互。
具体的,应用程序会在Java层编译和转换,获得所有可执行程序的字节码文件,如步骤610所示的,然后执行步骤620,将字节码文件加载至Dalvik虚拟机中,此时,可随时触发应用程序中的功能实现。
随着应用程序的运行,如果存在着缺陷,则对此进行紧急修复。如步骤630所示的,将获得注入补丁并运行,执行步骤640即可获得更新字节码文件,此更新字节码文件中包括针对所存在缺陷进行修复的修复类。
因此,需要通过步骤650至步骤680的执行,在应用程序的字节码文件中定位此修复类所更新的字节码文件为目标文件以及此目标文件中修复类对应的引用类。
此时,即可在Dalvik虚拟机的作用下调用本地指令集中的主动引用方法,如步骤690所示的,以将修复类更新到缓存于Dalvik虚拟机中的字节码文件中。
在修复类的作用下经由缓存于Dalvik虚拟机的字节码文件实现的应用程序运行和功能实现将不再存在前述所指的缺陷。
下述为本发明装置实施例,可以用于执行本发明上述实现应用程序更新的方法实施例。对于本发明装置实施例中未披露的细节,请参照本发明实现应用程序更新的方法实施例。
图8是根据一示例性实施例示出的一种实现应用程序更新的装置的框图。该实现应用程序更新的装置,如图8所示,包括但不限于:修复类获得模块710、目标文件获得模块730、查找模块750和引用解析模块770。
修复类获得模块710,用于根据应用程序的所有可执行文件和注入补丁所生成更新字节码文件,获得存在于更新字节码文件的修复类。
目标文件获得模块730,用于根据修复类在应用程序的字节码文件缓存中获得被修复类更新的字节码文件,以字节码文件为目标字节码文件。
查找模块750,用于在目标字节码文件中查找修复类对应的引用类。
引用解析模块770,用于控制引用类执行修复类的引用解析,将修复类设置到目标字节码文件,完成目标字节码文件中待修复类的替换。
图9是根据图8对应实施例示出的对修复类获得模块的细节进行描述的框图。该修复类获得模块710,如图9所示,包括但不限于:集合获得模块711和标识查找单元713。
集合获得单元711,用于获得应用程序的所有可执行文件对应的标识集合。
标识查找单元713,用于根据更新字节码文件中类所映射的标识,在标识集合中进行查找,如果标识集合中存在更新字节码文件中类所映射的标识,则根据标识在更新字节码文件与类的映射获得修复类。
图10是根据图8对应实施例示出的对目标文件获得模块的细节进行描述的框图。该目标文件获得模块730,如图10所示,可以包括但不限于:缓存查找单元731和目标定位单元733。
缓存查找单元731,用于在应用程序的字节码文件缓存查找修复类映射的标识。
目标定位单元733,用于如果应用程序的字节码文件缓存中存在修复类映射的标识,则获得标识所在的字节码文件为应用程序的字节码文件缓存中被修复类更新的字节码文件,以字节码文件为目标字节码文件。
在一个示例性实施例中,查找模块750进一步用于根据配置信息所指定的类和目标字节码文件的类型,在目标字节码文件进行类的查找,获得修复类对应的引用类。
图11是根据图8对应实施例示出的对引用解析模块的细节进行描述的框图。该引用解析模块770,如图11所示,可以包括但不限于:指令获得单元771和主动引用单元773。
指令获得单元771,用于从已加载的本地指令集获得主动引用指令。
主动引用单元773,用于向引用类执行主动引用指令,通过主动引用指令的执行加载修复类,将修复类解析更新至目标字节码文件中,完成目标字节码文件中待修复类的替换。
在另一个示例性实施例中,该实现应用程序更新的装置还包括执行模块。执行模块用于被启动运行的应用程序中,应用程序的字节码文件缓存中修复类的被引用执行,存在缺陷的待修复类不再被执行。
可选的,本发明还提供一种终端,执行图2、图3、图4和图5任一所示的实现应用程序更新的方法的全部或者部分步骤。所述装置包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为执行:
根据应用程序的所有可执行文件和注入补丁所生成更新字节码文件,获得存在于所述更新字节码文件的修复类;
根据所述修复类在所述应用程序的字节码文件缓存中获得被所述修复类更新的字节码文件,以所述字节码文件为目标字节码文件;
在所述目标字节码文件中查找修复类对应的引用类;
控制所述引用类执行所述修复类的引用解析,将所述修复类设置到所述目标字节码文件,完成所述目标字节码文件中待修复类的替换。
在示例性实施例中,还提供了一种存储介质,该存储介质为计算机可读存储介质,例如可以为包括指令的临时性和非临时性计算机可读存储介质。该存储介指例如包括指令的存储器104,上述指令可由装置100的处理器118执行以完成上述实现应用程序更新的方法。
应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围执行各种修改和改变。本发明的范围仅由所附的权利要求来限制。
Claims (15)
1.一种实现应用程序更新的方法,其特征在于,所述方法包括:
根据应用程序的所有可执行文件和注入补丁所生成更新字节码文件,获得存在于所述更新字节码文件的修复类;
根据所述修复类在所述应用程序的字节码文件缓存中获得被所述修复类更新的字节码文件,以所述字节码文件为目标字节码文件;
在所述目标字节码文件中查找修复类对应的引用类;
控制所述引用类执行所述修复类的引用解析,将所述修复类设置到所述目标字节码文件,完成所述目标字节码文件中待修复类的替换。
2.根据权利要求1所述的方法,其特征在于,所述根据所述修复类在所述应用程序的字节码文件缓存中获得被所述修复类更新的字节码文件,以所述字节码文件为目标字节码文件,包括:
如果存在于所述更新字节码文件的修复类不是存在于应用程序的字节码文件缓存,则执行所述根据所述修复类在所述应用程序的字节码文件缓存中获得被所述修复类更新的字节码文件的步骤,如果为是,则不需再做处理。
3.根据权利要求1所述的方法,其特征在于,所述根据应用程序的所有可执行文件和注入补丁所生成更新字节码文件,获得存在于所述更新字节码文件的修复类,包括:
获得所述应用程序的所有可执行文件对应的标识集合;
根据所述更新字节码文件中类所映射的标识,在所述标识集合中进行查找;
如果所述标识集合中存在所述更新字节码文件中类所映射的标识,则根据标识在所述更新字节码文件与类的映射获得修复类。
4.根据权利要求1所述的方法,其特征在于,所述根据所述修复类在所述应用程序的字节码文件缓存中获得被所述修复类更新的字节码文件,以所述字节码文件为目标字节码文件,包括:
在所述应用程序的字节码文件缓存查找所述修复类映射的标识;
如果所述应用程序的字节码文件缓存中存在所述修复类映射的标识,则获得所述标识所在的字节码文件为所述应用程序的字节码文件缓存中被所述修复类更新的字节码文件,以所述字节码文件为目标字节码文件。
5.根据权利要求1所述的方法,其特征在于,所述在所述目标字节码文件中查找修复类对应的引用类,包括:
根据配置信息所指定的类和目标字节码文件的类型,在所述目标字节码文件进行类的查找,获得修复类对应的引用类。
6.根据权利要求1所述的方法,其特征在于,所述控制所述引用类执行所述修复类的引用解析,将所述修复类设置到所述目标字节码文件,完成所述目标字节码文件中待修复类的替换,包括:
从已加载的本地指令集获得主动引用指令;
向所述引用类执行所述主动引用指令,通过所述主动引用指令的执行加载所述修复类,将所述修复类解析更新至所述目标字节码文件中,完成所述目标字节码文件中待修复类的替换。
7.根据权利要求1所述的方法,其特征在于,所述控制所述引用类执行所述修复类的引用解析,将所述修复类设置到所述目标字节码文件,完成所述目标字节码文件中待修复类的替换之后,所述方法还包括:
被启动运行的应用程序中,所述应用程序的字节码文件缓存中修复类的被引用执行,存在缺陷的所述待修复类不再被执行。
8.一种实现应用程序更新的装置,其特征在于,所述装置包括:
修复类获得模块,用于根据应用程序的所有可执行文件和注入补丁所生成更新字节码文件,获得存在于所述更新字节码文件的修复类;
目标文件获得模块,用于根据所述修复类在所述应用程序的字节码文件缓存中获得被所述修复类更新的字节码文件,以所述字节码文件为目标字节码文件;
查找模块,用于在所述目标字节码文件中查找修复类对应的引用类;
引用解析模块,用于控制所述引用类执行所述修复类的引用解析,将所述修复类设置到所述目标字节码文件,完成所述目标字节码文件中待修复类的替换。
9.根据权利要求8所述的装置,其特征在于,所述修复类获得模块包括:
集合获得单元,用于获得所述应用程序的所有可执行文件对应的标识集合;
标识查找单元,用于根据所述更新字节码文件中类所映射的标识,在所述标识集合中进行查找,如果所述标识集合中存在所述更新字节码文件中类所映射的标识,则根据标识在所述更新字节码文件与类的映射获得修复类。
10.根据权利要求8所述的装置,其特征在于,所述目标文件获得模块包括:
缓存查找单元,用于在所述应用程序的字节码文件缓存查找所述修复类映射的标识;
目标定位单元,用于如果所述应用程序的字节码文件缓存中存在所述修复类映射的标识,则获得所述标识所在的字节码文件为所述应用程序的字节码文件缓存中被所述修复类更新的字节码文件,以所述字节码文件为目标字节码文件。
11.根据权利要求8所述的装置,其特征在于,所述查找模块进一步用于根据配置信息所指定的类和目标字节码文件的类型,在所述目标字节码文件进行类的查找,获得修复类对应的引用类。
12.根据权利要求8所述的装置,其特征在于,所述引用解析模块包括:
指令获得单元,用于从已加载的本地指令集获得主动引用指令;
主动引用单元,用于向所述引用类执行所述主动引用指令,通过所述主动引用指令的执行加载所述修复类,将所述修复类解析更新至所述目标字节码文件中,完成所述目标字节码文件中待修复类的替换。
13.根据权利要求8所述的装置,其特征在于,所述装置还包括:
执行模块,用于被启动运行的应用程序中,所述应用程序的字节码文件缓存中修复类的被引用执行,存在缺陷的所述待修复类不再被执行。
14.一种实现应用程序更新的装置,其特征在于,包括:
处理器;以及
存储器,所述存储器上存储有计算机可读指令,所述计算机可读指令被所述处理器执行时实现根据权利要求1至7中任一项所述的实现应用程序更新的方法。
15.一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现根据权利要求1至7中任一项所述的实现应用程序更新的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710748771.2A CN109445807A (zh) | 2017-08-28 | 2017-08-28 | 实现应用程序更新的方法、装置和计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710748771.2A CN109445807A (zh) | 2017-08-28 | 2017-08-28 | 实现应用程序更新的方法、装置和计算机可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109445807A true CN109445807A (zh) | 2019-03-08 |
Family
ID=65530034
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710748771.2A Pending CN109445807A (zh) | 2017-08-28 | 2017-08-28 | 实现应用程序更新的方法、装置和计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109445807A (zh) |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109933410A (zh) * | 2019-03-22 | 2019-06-25 | 北京智游网安科技有限公司 | 一种基于虚拟化技术的虚拟指令下发方法及系统 |
CN110442377A (zh) * | 2019-08-13 | 2019-11-12 | 网易(杭州)网络有限公司 | 补丁包生成方法、应用更新方法、装置和电子设备 |
CN111367510A (zh) * | 2020-02-24 | 2020-07-03 | 腾讯音乐娱乐科技(深圳)有限公司 | 一种安卓功能模块开发的方法及装置 |
CN111897555A (zh) * | 2019-05-06 | 2020-11-06 | 阿里巴巴集团控股有限公司 | 客户端的动态更新方法、装置、系统及终端设备 |
CN112148386A (zh) * | 2020-10-12 | 2020-12-29 | Oppo广东移动通信有限公司 | 一种应用加载方法、装置及计算机可读存储介质 |
CN112230941A (zh) * | 2020-09-22 | 2021-01-15 | 成都融微软件服务有限公司 | 一种Java Card包及应用程序安装方法和工具 |
CN113467815A (zh) * | 2021-06-30 | 2021-10-01 | 平安壹钱包电子商务有限公司 | 热更新的应用修复方法、装置、终端设备及存储介质 |
CN113626051A (zh) * | 2021-07-27 | 2021-11-09 | 北京达佳互联信息技术有限公司 | 字节码的更新方法、装置及电子设备 |
CN114610516A (zh) * | 2022-03-10 | 2022-06-10 | 北京字节跳动网络技术有限公司 | 应用程序的修复方法、装置、计算机设备以及存储介质 |
CN115080151A (zh) * | 2022-07-22 | 2022-09-20 | 平安银行股份有限公司 | App启动流程控制方法、计算机可读存储介质及终端 |
CN111897555B (zh) * | 2019-05-06 | 2024-06-07 | 阿里巴巴集团控股有限公司 | 客户端的动态更新方法、装置、系统及终端设备 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101957766A (zh) * | 2010-09-17 | 2011-01-26 | 山东中创软件工程股份有限公司 | 一种字节码织入方法、装置及系统 |
CN101963914A (zh) * | 2010-11-12 | 2011-02-02 | 南京大学 | 一种基于字节码文件重构的Java类在线更新方法 |
CN102819438A (zh) * | 2011-06-08 | 2012-12-12 | 金蝶软件(中国)有限公司 | 一种热加载的方法、装置及信息系统 |
CN105446712A (zh) * | 2014-08-08 | 2016-03-30 | 阿里巴巴集团控股有限公司 | 一种应用程序缺陷修补方法及装置 |
CN106020873A (zh) * | 2016-05-13 | 2016-10-12 | 腾讯科技(深圳)有限公司 | 补丁包加载方法及装置 |
CN106681749A (zh) * | 2015-11-11 | 2017-05-17 | 腾讯科技(深圳)有限公司 | 基于安卓平台的局部代码补丁更新方法及装置 |
CN106874195A (zh) * | 2017-01-18 | 2017-06-20 | 环球智达科技(北京)有限公司 | 一种针对android应用的bug修复和持续交付方案 |
-
2017
- 2017-08-28 CN CN201710748771.2A patent/CN109445807A/zh active Pending
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101957766A (zh) * | 2010-09-17 | 2011-01-26 | 山东中创软件工程股份有限公司 | 一种字节码织入方法、装置及系统 |
CN101963914A (zh) * | 2010-11-12 | 2011-02-02 | 南京大学 | 一种基于字节码文件重构的Java类在线更新方法 |
CN102819438A (zh) * | 2011-06-08 | 2012-12-12 | 金蝶软件(中国)有限公司 | 一种热加载的方法、装置及信息系统 |
CN105446712A (zh) * | 2014-08-08 | 2016-03-30 | 阿里巴巴集团控股有限公司 | 一种应用程序缺陷修补方法及装置 |
CN106681749A (zh) * | 2015-11-11 | 2017-05-17 | 腾讯科技(深圳)有限公司 | 基于安卓平台的局部代码补丁更新方法及装置 |
CN106020873A (zh) * | 2016-05-13 | 2016-10-12 | 腾讯科技(深圳)有限公司 | 补丁包加载方法及装置 |
CN106874195A (zh) * | 2017-01-18 | 2017-06-20 | 环球智达科技(北京)有限公司 | 一种针对android应用的bug修复和持续交付方案 |
Non-Patent Citations (1)
Title |
---|
腾讯BUGLY: "《https://zhuanlan.zhihu.com/p/23004560》", 17 October 2016 * |
Cited By (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109933410B (zh) * | 2019-03-22 | 2021-06-01 | 北京智游网安科技有限公司 | 一种基于虚拟化技术的虚拟指令下发方法及系统 |
CN109933410A (zh) * | 2019-03-22 | 2019-06-25 | 北京智游网安科技有限公司 | 一种基于虚拟化技术的虚拟指令下发方法及系统 |
CN111897555A (zh) * | 2019-05-06 | 2020-11-06 | 阿里巴巴集团控股有限公司 | 客户端的动态更新方法、装置、系统及终端设备 |
CN111897555B (zh) * | 2019-05-06 | 2024-06-07 | 阿里巴巴集团控股有限公司 | 客户端的动态更新方法、装置、系统及终端设备 |
CN110442377B (zh) * | 2019-08-13 | 2023-11-24 | 网易(杭州)网络有限公司 | 补丁包生成方法、应用更新方法、装置和电子设备 |
CN110442377A (zh) * | 2019-08-13 | 2019-11-12 | 网易(杭州)网络有限公司 | 补丁包生成方法、应用更新方法、装置和电子设备 |
CN111367510A (zh) * | 2020-02-24 | 2020-07-03 | 腾讯音乐娱乐科技(深圳)有限公司 | 一种安卓功能模块开发的方法及装置 |
CN111367510B (zh) * | 2020-02-24 | 2024-03-19 | 腾讯音乐娱乐科技(深圳)有限公司 | 一种安卓功能模块开发的方法及装置 |
CN112230941A (zh) * | 2020-09-22 | 2021-01-15 | 成都融微软件服务有限公司 | 一种Java Card包及应用程序安装方法和工具 |
CN112230941B (zh) * | 2020-09-22 | 2024-03-29 | 成都融微软件服务有限公司 | 一种Java Card包及应用程序安装方法和工具 |
CN112148386A (zh) * | 2020-10-12 | 2020-12-29 | Oppo广东移动通信有限公司 | 一种应用加载方法、装置及计算机可读存储介质 |
CN113467815A (zh) * | 2021-06-30 | 2021-10-01 | 平安壹钱包电子商务有限公司 | 热更新的应用修复方法、装置、终端设备及存储介质 |
CN113626051A (zh) * | 2021-07-27 | 2021-11-09 | 北京达佳互联信息技术有限公司 | 字节码的更新方法、装置及电子设备 |
WO2023169164A1 (zh) * | 2022-03-10 | 2023-09-14 | 北京字节跳动网络技术有限公司 | 应用程序的修复方法、装置、计算机设备以及存储介质 |
CN114610516B (zh) * | 2022-03-10 | 2023-07-04 | 抖音视界有限公司 | 应用程序的修复方法、装置、计算机设备以及存储介质 |
CN114610516A (zh) * | 2022-03-10 | 2022-06-10 | 北京字节跳动网络技术有限公司 | 应用程序的修复方法、装置、计算机设备以及存储介质 |
CN115080151B (zh) * | 2022-07-22 | 2023-07-14 | 平安银行股份有限公司 | App启动流程控制方法、计算机可读存储介质及终端 |
CN115080151A (zh) * | 2022-07-22 | 2022-09-20 | 平安银行股份有限公司 | App启动流程控制方法、计算机可读存储介质及终端 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109445807A (zh) | 实现应用程序更新的方法、装置和计算机可读存储介质 | |
US10528742B2 (en) | Method and apparatus for repairing kernel vulnerability | |
CN108027722B (zh) | 在编译和部署中动态更新应用 | |
US9075633B2 (en) | Configuration of life cycle management for configuration files for an application | |
US10120672B2 (en) | Method for offline updating virtual machine images | |
CN109491695A (zh) | 一种集成安卓应用的增量更新方法 | |
US9063819B2 (en) | Extensible patch management | |
US20120324417A1 (en) | Systems and methods for incremental software development | |
CN107506219A (zh) | 一种基于Android系统的通用版本升级方法 | |
CN108027741A (zh) | 基于补丁升级的文件处理方法、装置、终端以及存储介质 | |
US20230168902A1 (en) | Bootstrapping Profile-Guided Compilation and Verification | |
CN109656597A (zh) | 固件升级方法、装置及计算机可读存储介质 | |
CN107451474A (zh) | 用于终端的软件漏洞修复方法和装置 | |
CN104679500B (zh) | 实体类自动生成实现方法及装置 | |
CN107643898A (zh) | 终端升级方法及装置 | |
CN109032631A (zh) | 应用程序补丁包获取方法、装置、计算机设备及存储介质 | |
CN105446725A (zh) | 用于模型驱动开发的方法和系统 | |
CN103559065A (zh) | 一种ota升级的方法和系统 | |
CN111158741A (zh) | 监控业务模块对第三方类库依赖关系变化的方法及装置 | |
CN103186463B (zh) | 确定软件的测试范围的方法和系统 | |
CN103309696B (zh) | 一种Java卡扩展库更新方法、装置和Java卡 | |
CN102054041A (zh) | 元数据升级方法和系统 | |
CN105511914A (zh) | 应用更新方法、装置和系统 | |
US10162629B1 (en) | Compiler independent identification of application components | |
CN108694049A (zh) | 一种更新软件的方法和设备 |
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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190308 |