CN106484444A - 应用程序的插入补丁方法及装置 - Google Patents
应用程序的插入补丁方法及装置 Download PDFInfo
- Publication number
- CN106484444A CN106484444A CN201510534636.9A CN201510534636A CN106484444A CN 106484444 A CN106484444 A CN 106484444A CN 201510534636 A CN201510534636 A CN 201510534636A CN 106484444 A CN106484444 A CN 106484444A
- Authority
- CN
- China
- Prior art keywords
- application program
- patch
- class
- element group
- classloader
- 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
Landscapes
- Stored Programmes (AREA)
Abstract
本发明涉及一种应用程序的插入补丁方法及装置,在一种实施方式中,所述方法包括以下步骤:从服务器中下载应用程序的待更新部分的补丁;将所述补丁插入类加载器中所述应用程序的安装包形成的元素组的最前面;以及运行所述应用程序时,所述类加载器加载所述应用程序插入所述补丁之后的元素组,其中,若所述插入所述补丁之后的元素组中包括不止一个同名类时,所述类加载器加载所述同名类所在元素组排在最前面的元素中的同名类。根据本实施例的方法及装置,可以在不全部重新编译应用程序源代码的情况下,有效进行更新所述应用程序的问题程序。
Description
技术领域
本发明属于计算机技术领域,尤其涉及一种应用程序的插入补丁方法及装置。
背景技术
随着计算机技术的普及,计算机中的应用程序越来越多。在实际使用过程中,应用程序的各种功能通过更新可以不断的得以完善。然而,在现有技术中,应用程序不管是更新多少内容,都需要重新打包、测试、在对应的渠道换安装包、提示用户升级、用户升级后进行覆盖安装等步骤。因此,更新过程比较复杂,需要耗费过多的人力以及成本。因此,根据应用程序所要更新的内容,提供一种快速插入所述应用程序的补丁成为亟待解决的问题。
发明内容
本发明提供了一种应用程序的插入补丁方法及装置,可以在不全部重新编译所述应用程序的源代码的情况下,有效进行更新所述应用程序的问题程序或者需要进行更新的程序。
具体地,本发明实施例提供一种应用程序的插入补丁方法,所述方法包括:
从服务器中下载应用程序的待更新部分的补丁;
将所述补丁插入类加载器中所述应用程序的安装包形成的元素组的最前面;以及
运行所述应用程序时,所述类加载器加载所述应用程序插入所述补丁之后的元素组,其中,若所述插入所述补丁之后的元素组中包括不止一个同名类时,所述类加载器加载所述同名类所在元素组排在最前面的元素中的同名类。
本发明实施例还提供一种应用程序的插入补丁装置,所述装置包括:
下载模块,用于从服务器中下载应用程序的待更新部分的补丁;
补丁插入模块,用于将所述补丁插入类加载器中所述应用程序的安装包形成的元素组的最前面;以及
类加载模块,用于所述类加载器加载所述应用程序插入所述补丁之后的元素组,其中,若所述插入所述补丁之后的元素组中包括不止一个同名类时,所述类加载器加载所述同名类所在元素组中排在最前面的元素中的同名类。
本发明实施例所提供的应用程序的插入补丁方法及装置,通过直接在应用程序中插入补丁,在应用程序运行过程中,若出现重名类时先加载所述补丁中的类,从而实现覆盖所述应用程序中的出现问题的类。因此,可实现快速更新应用程序,节省人力资源以及更新成本。
为让本发明的上述和其他目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附图式,作详细说明如下。
附图说明
图1示出了一种电子终端的结构框图。
图2为第一实施例提供的应用程序的插入补丁方法流程图。
图3为第二实施例提供的应用程序的插入补丁方法流程图。
图4为第三实施例提供的应用程序的插入补丁方法流程图。
图5为第四实施例提供的应用程序的插入补丁方法流程图。
图6为第四实施例提供的应用程序的插入补丁装置结构框图。
图7为第五实施例提供的应用程序的插入补丁装置结构框图。
图8为第六实施例提供的应用程序的插入补丁装置结构框图。
图9为第七实施例提供的应用程序的插入补丁装置结构框图。
具体实施方式
为更进一步阐述本发明为实现预定发明目的所采取的技术手段及功效,以下结合附图及较佳实施例,对依据本发明的具体实施方式、结构、特征及其功效,详细说明如后。
本发明实施例所提供的应用程序的插入补丁方法及装置可用于电子终端。
图1示出了一种电子终端的结构框图。如图1所示,电子终端100包括一个或多个(图中仅示出一个)处理器102、存储器104、存储控制器106,外设接口108、RF(Radio Frequency,射频)模块110、网络模块112、音频电路114、传感器116、输入模块118、及显示模块120。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对电子终端100的结构造成限定。例如,电子终端100还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。上述的电子终端100的具体实例包括但并不限于手持式计算机、移动电话、媒体播放器、车载设备、个人数字助理及前述装置的各种组合。
本领域普通技术人员可以理解,相对于处理器102来说,所有其他的组件均属于外设,处理器102与这些外设之间通过多个外设接口108相耦合。外设接口108可基于以下标准实现:通用异步接收/发送装置(Universal Asynchronous Receiver/Transmitter,UART)、通用输入/输出(General Purpose Input Output,GPIO)、串行外设接口(SerialPeripheral Interface,SPI)、内部集成电路(Inter-IntegratedCircuit,I2C),但不并限于上述标准。在一些实例中,外设接口108可仅包括总线;在另一些实例中,外设接口108还可包括其他元件,如一个或者多个控制器,例如用于连接液晶显示面板的显示控制器或者用于连接存储器的存储控制器106。此外,这些控制器还可以从外设接口108中脱离出来,而集成于处理器102内或者相应的外设内。
存储器104可用于存储软件程序以及模块,如本发明实施例中的应用程序的插入补丁方法/装置对应的程序指令/模块,处理器102通过运行存储在存储器104内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的应用程序的插入补丁方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至电子终端100。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
射频模块110用于接收以及发送电磁波,实现电磁波与电信号的相互转换,从而与通讯网络或者其他设备进行通讯。射频模块110可包括各种现有的用于执行这些功能的电路元件,例如,天线、射频收发器、数字信号处理器、加密/解密芯片、用户身份模块(SIM)卡、存储器等等。RF模块110可与各种网络如互联网、企业内部网、无线网络进行通讯或者通过无线网络与其他设备进行通讯。上述的无线网络可包括蜂窝式电话网、无线局域网或者城域网。上述的无线网络可以使用各种通信标准、协议及技术,包括但并不限于全球移动通信系统(Global System for MobileCommunication,GSM)、增强型移动通信技术(Enhanced Data GSMEnvironment,EDGE),宽带码分多址技术(wideband code divisionmultiple access,W-CDMA),码分多址技术(Code division access,CDMA)、时分多址技术(time division multiple access,TDMA),无线保真技术(Wireless,Fidelity,WiFi)(如美国电气和电子工程师协会标准IEEE 802.11a,IEEE 802.11b,IEEE802.11g和/或IEEE802.11n)、网络电话(Voice over internet protocal,VoIP)、全球微波互联接入(Worldwide Interoperabil ity for Microwave Access,Wi-Max)、其他用于邮件、即时通讯及短消息的协议,以及任何其他合适的通讯协议,甚至可包括那些当前仍未被开发出来的协议。
网络模块112用于接收以及发送网络信号。上述网络信号可包括无线信号或者有线信号。在一个实例中,上述网络信号为WiFi信号,由于WiFi的工作频率也处于射频的频段内,此时网络模块可具有与RF模块110类似的硬件结构,即可包括天线、射频收发器、数字信号处理器、加密/解密芯片等元件。在一个实例中,上述网络信号为有线网络信号。此时,网络模块112可包括处理器、随机存储器、转换器、晶体振荡器等元件。
音频电路114、扬声器、声音插孔、麦克风共同提供用户与电子终端100之间的音频接口。具体地,音频电路114从处理器102处接收声音数据,将声音数据转换为电信号,将电信号传输至扬声器。扬声器将电信号转换为人耳能听到的声波。音频电路114还从麦克风处接收电信号,将电信号转换为声音数据,并将声音数据传输给处理器102以进行进一步的处理。音频数据可以从存储器104处或者通过RF模块110、网络模块112获取。此外,音频数据也可以存储至存储器104中或者通过RF模块110及网络模块112进行发送。
传感器116的实例包括但并不限于:光传感器、运行传感器、及其他传感器。具体地,光传感器可包括环境光传感器及接近传感器,其中,环境光传感器可以感测环境光的明暗,进而处理器102执行的一些模块可利用环境光传感器的输出来自动调节显示的输出。接近传感器可在电子终端100移动到耳边时,关闭显示输出。作为运动传感器的一种,重力加速度传感器可检测各个方向上(一般为三轴)加速度的大小,静止时可检测出重力的大小及方向,可用于识别手机姿态的应用(比如横竖屏切换、相关游戏、磁力计姿态校准)、振动识别相关功能(比如计步器、敲击)等;至于电子终端100还可配置的陀螺仪、气压计、湿度计、温度计等其他传感器,在此不再赘述。
输入模块118可用于接收输入的字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。具体地,输入模块118可包括按键以及触控表面。按键例如可包括用于输入字符的字符按键,以及用于触发控制功能的控制按键。控制按键的实例包括“返回主屏”按键、开机/关机按键、拍照键等等。触控表面可收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触控表面上或在触控表面附近的操作),并根据预先设定的程序驱动相应的连接装置。可选的,触控表面可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器102,并能接收处理器102发来的命令并加以执行。此外,可以采用电阻式、电容式、红外线以及表面声波等多种类型实现触控表面。除了触控表面,输入模块118还可以包括其他输入设备。上述的其他输入设备包括但不限于物理键盘、轨迹球、鼠标、操作杆等中的一种或多种。
显示模块120用于显示由用户输入的信息、提供给用户的信息以及电子终端100的各种图形用户接口,这些图形用户接口可以由图形、文本、图标、视频和其任意组合来构成。在一个实例中,显示模块120包括一个显示面板。显示面板例如可为一个液晶显示面板(Liquid CrystalDisplay,LCD)、有机发光二极管(Organic Light-Emitting DiodeDisplay,OLED)显示面板、电泳显示面板(Electro-Phoretic Display,EPD)等。进一步地,触控表面可设置于显示面板上从而与显示面板构成一个整体。在另一些实施例中,显示模块120还可包括其他类型的显示装置,例如包括一个投影显示装置。相比于一般的显示面板,投影显示装置还需要包括一些用于投影的部件例如透镜组。
上述的软件程序以及模块包括:操作系统以及补丁插入模块。本发明实施例中,操作系统例如可为LINUX,UNIX,WINDOWS,或者移动操作系统如Android,IOS等,其可包括各种用于管理系统任务(例如内存管理、存储设备控制、电源管理等)的软件组件和/或驱动,并可与各种硬件或软件组件相互通讯,从而提供其他软件组件的运行环境。补丁插入模块运行在操作系统的基础上,用于对电子终端100的中的应用程序插入补丁。
第一实施例
本实施例提供一种应用程序的插入补丁方法,如图2所示,本实施例的方法包括以下步骤:
步骤S101、从服务器中下载应用程序的待更新部分的补丁。
在一个实例中,电子终端100中的一个应用程序出现错误,或者刚发布的新版本的安装包,出现了一些错误。服务器会向电子终端100发送对应的提示消息。例如,在一个场景中,可以是所述应用程序的其中一项功能中存在错误,如,动态检索操作,则在用户执行所述动态检索时,所述服务器向电子终端100发送提示消息,则所述电子终端100显示所述提示消息,详细地,所述提示消息可为“下载动态检索的补丁才能进行此操作,是否下载”,此时,所述电子终端100显示可随所述提示消息一并显示提示按钮,比如,“是”、“否”或者“下载”、“取消”等提示按钮。进一步地,若接收到所用户点击提示按钮“是”或者“下载”的操作,则从所述服务器下载所述应用程序的动态检索操作对应的补丁。
在本实施例中,应用程序的待更新部分的补丁包括类(class)。比如,若应用程序中出现有问题的类,则需要通过更新修复有问题的类,在此种情形下,即可采用待更新部分的补丁中的类替换对应有问题的类。
步骤S102、将所述补丁插入类加载器(classloader)中的所述应用程序的安装包形成的元素组的最前面。
在一个实例中,所述应用程序的元素组中的元素为所述应用程序的安装包分包后生成的dex文件,所述dex文件为Android平台上可执行文件的类型。其中,一个dex文件为一个元素(Element),多个dex文件会排列成一个有序的元素组(如,dexElements)。在本实施例中,所述补丁可以打包成dex文件。
步骤S103、所述类加载器加载所述应用程序插入所述补丁之后的元素组,其中,若所述插入所述补丁之后的元素组中包括不止一个同名类时,所述类加载器加载所述同名类所在元素组中排在最前面的元素中的同名类。
详细地,运行所述应用程序时,所述类加载器加载所述应用程序的所述元素组。在本实施例中,由于所述应用程序的的补丁排列在所述元素组的最前面,当所述类加载器加载所述元素组中的类时,首先会查看到所述补丁中的类。
详细地,所述类加载器加载所述应用程序插入所述补丁之后的元素组具体包括:按照所述元素组中元素的排列顺序依次加载所述元素组中的元素;若所述元素中存在调用子类,则按照所述元素组中元素的排列顺序依次读取类,判断当前位置的元素中是否存在所述子类;若存在,则读取所述子类,将所述子类返回至调用所述子类的元素中;若不存在,则读取所述当前位置的下一元素中的类,直到读取到所述子类。
在一个实例中,所述类加载器中查找类的具体代码如下:
详细地,本实例中加载目标类clazz为所述应用程序运行到某一时刻需要调用dex文件中的类。所述类加载器中的查找类的具体代码则依次读取所述类加载器中所述应用程序的安装包形成的元素组中元素中的类,直到查找到所述目标类clazz。类加载器加载所述目标类clazz时,则需要从所述多个dex文件中获取所述目标类clazz。在本实施例中,由于所述补丁的插入,且原应用程序的安装包形成的元素组保持完整的情况下,可能出现同名类。上述代码中的类加载方式为,根据所述应用程序的安装包形成的元素组的排列顺序进行查找元素中的所述目标类clazz。详细地,上述代码中以Element表示所述应用程序中的dex文件。上述代码先定位至所述应用程序的其中一个dex文件,查找当前dex文件中是否存在所述目标类clazz,若不存在则移向下一个dex文件进行查找;若所述应用程序全部的dex文件浏览完未找到所述目标类clazz,则返回空值,表示查找失败。
根据本实施例的方法,通过直接在原应用程序中插入补丁;运行过程中,出现重名类时先加载所述补丁中的类,从而实现覆盖所述应用程序中的出现问题的类。实现快速更新应用程序,节省人力资源以及更新成本。
第二实施例
本实施例提供一种应用程序的插入补丁方法,本实施例与第一实施例类似,其不同之处在于,如图3所示,本实施例的方法包括:
步骤S101、从服务器中下载应用程序的待更新部分的补丁。
步骤S102、将所述补丁插入类加载器中的所述应用程序的安装包形成的元素组的最前面。
若所述应用程序的安装包没有进行拆分打包成多个dex文件,所述步骤S102包括:
步骤S1021、将所述补丁以插入数组方式插入所述应用程序的安装包形成的元素组的最前面。
详细地,将所述补丁按照数组的形式插入所述安装包形成的元素组的队列首位。在所述类加载器进行加载时,先加载所述补丁中的类。本实施例中,所述元素组为所述应用程序中的类、方法等组成的数组。
步骤S103、所述类加载器加载所述应用程序插入所述补丁之后的元素组,其中,若所述插入所述补丁之后的元素组中包括不止一个同名类时,所述类加载器加载所述同名类所在元素组中排在最前面的元素中的同名类。
即,在本步骤中,在所述类加载器进行加载时,先加载所述补丁中的类。
关于本实施例的其它细节,可进一步地参考第一实施例中的步骤,在此不再赘述。
根据本实施例的方法,若所述应用程序没有拆分代码打包的程序,则不需要将所述补丁打包成指定文件,可以直接插入所述补丁在所述应用程序的代码形成的数组,节省对所述应用程序的少部分更改操作时的成本。
第三实施例
本实施例提供一种应用程序的插入补丁方法,本实施例与第一实施例类似,其不同之处在于,如图4所示,本实施例的方法包括:
步骤S101、从服务器中下载应用程序的待更新部分的补丁。
步骤S102、将所述补丁插入类加载器中的所述应用程序的安装包形成的元素组的最前面。
若所述方法基于应用程序的dex分包,然后用所述类加载器进行加载。
所述步骤S102包括:
步骤S1022、将所述补丁打包成补入dex文件。
步骤S1023、将所述补入dex文件插入所述应用程序的dex文件元素组的最前面。
详细地,本实施例中的方法基于android dex分包方案。所述dex分包原理是将编译好的class文件拆分打包成至少两个dex,绕过dex方法数量的限制以及安装时的检查,在运行时再动态加载其它后面的dex文件。
步骤S103、所述类加载器加载所述应用程序插入所述补丁之后的元素组,其中,若所述插入所述补丁之后的元素组中包括不止一个同名类时,所述类加载器加载所述同名类所在元素组中排在最前面的元素中的同名类。
关于本实施例的其它细节,可进一步地参考第一实施例中的步骤,在此不再赘述。
根据本实施例的方法,基于dex拆分包,将所述补丁打包成dex文件插入所述应用程序组成dex文件组成的元素组的队首;调用类或者方法时先调用前面的类,从而实现覆盖待替换的部分。节省对所述应用程序的少部分更改操作时的成本。
第四实施例
本实施例提供一种应用程序的插入补丁方法,本实施例与第一实施例类似,其不同之处在于,如图5所示,本实施例的方法包括:
步骤S201、所述应用程序的代码在编译时,在所述应用程序中的类的构造函数中插入指定代码,使所述应用程序中的类显示未校验状态。
在本实施例中,基于所述应用程序被android dex分包。详细地,在一个实例中,安卓应用程序的安装包安装时,所述安装包中的dex文件会被虚拟机(dexopt)优化成odex文件,然后可执行所述应用程序。所述虚拟机在启动时,会产生verify选项,当verify选项被打开时,doVerify变量为true,那么就会执行dvmVerifyClass进行类的校验,如果dvmVerifyClass校验类成功,那么这个类会被打CLASS_ISPREVERIFIED的标志。然而不同的dex文件中的被打CLASS_ISPREVERIFIED的标志的类在相互调用会出现错误。因此,防止所述应用程序中的类被打上CLASS_ISPREVERIFIED的标志,可防止不同dex文件中的类之间调用的错误。在一个实例中,在所述应用程序的代码中的各个类的构造函数中插入以下代码:
if(ClassVerifier.PREVENT_VERIFY){
System.out.println(AntilazyLoad.class);
}
详细地,还包括将AntilazyLoad类打包成hack.dex,在启动所述应用程序应用时加载进来。进一步地,AntilazyLoad类所在的dex包先加载进来,不然AntilazyLoad类会被标记为不存在,即使后续加载了hack.dex包,那么它也是不存在的,这样屏幕就会出现很多类调用所述AntilazyLoad类时,AntilazyLoad类找不到的标志。由于AntilazyLoad类会被单独打包成hack.dex首先被加载,因此,其它dex文件中的类的构造函数中均插入了上述代码,均调用了不在同一个dex文件中的AntilazyLoad类,因此其它dex文件中的类均不会被打上CLASS_ISPREVERIFIED标志。
进一步地,由于任何类中都包括构造函数。因此所述指定代码添加在所有类的构造函数中,可以有效避免增加多余的函数使所述应用程序原来的类的结构被改变。
步骤S202、从服务器中下载应用程序的待更新部分的补丁。
步骤S203、将所述补丁插入类加载器中的所述应用程序的安装包形成成的元素组的最前面。
步骤S204、所述类加载器加载所述应用程序插入所述补丁之后的元素组,其中,若所述插入所述补丁之后的元素组中包括不止一个同名类时,所述类加载器加载所述同名类所在元素组中排在最前面的元素中的同名类。
关于本实施例的其它细节,可进一步地参考第一实施例中的步骤,在此不再赘述。
根据本实施例的方法,通过将所述应用程序在编译时插入指定代码,使所述应用程序代码中的类不会被打上已经被校验标志,使不在同一个dex包的方法调用不会出现错误。
第五实施例
本实施例一种应用程序的插入补丁装置,如图6所示,本实施例的所述装置包括:下载模块301、补丁插入模块302以及类加载模块303。
下载模块301,用于从服务器中下载应用程序的待更新部分的补丁。
补丁插入模块302,用于将所述补丁插入类加载器中所述应用程序的安装包形成的元素组的最前面。
类加载模块303,用于所述类加载器加载所述应用程序插入所述补丁之后的元素组,其中,若所述插入所述补丁之后的元素组中包括不止一个同名类时,所述类加载器加载所述同名类所在元素组中排在最前面的元素中的同名类。
详细地,所述类加载模块303包括:
读取单元,用于按照所述元素组中元素的排列顺序依次加载所述元素组中的元素。
判断单元,用于若所述元素中存在调用子类,则按照所述元素组中元素的排列顺序依次读取类,判断当前位置的元素中是否存在所述子类。
移动单元,用于若所述判断单元判断为当前位置的元素中不存在所述子类,则将读取位置定位在所述元素组的排列所述当前位置的下一元素。
所述读取单元还用于若所述读取位置所在的元素中存在所述子类则根据所述读取位置读取所述元素中的所述子类。
关于本实施例的其它细节,可进一步地参考上述方法实施例,在此不再赘述。
根据本实施例的装置,通过直接在原应用程序中插入补丁;运行过程中,出现重名类时先加载所述补丁中的类,从而实现覆盖所述应用程序中的出现问题的类。实现快速更新应用程序,节省人力资源以及更新成本。
第六实施例
本实施例提供一种应用程序的插入补丁装置,本实施例与第五实施例类似,其不同之处在于,如图7所示,本实施例的装置包括:下载模块301、补丁插入模块302,所述补丁插入模块302包括:数组排列单元3021及第一插入单元3022以及类加载模块303。
下载模块301,用于从服务器中下载应用程序的待更新部分的补丁。
补丁插入模块302,用于将所述补丁插入类加载器中所述应用程序的安装包形成的元素组的最前面。
所述补丁插入模块302包括:
第一插入单元3021,用于若所述应用程序的代码没有进行拆分打包则将所述补丁以插入数组方式插入所述应用程序的安装包形成的元素组的最前面。
类加载模块303,用于所述类加载器加载所述应用程序插入所述补丁之后的元素组,其中,若所述插入所述补丁之后的元素组中包括不止一个同名类时,所述类加载器加载所述同名类所在元素组中排在最前面的元素中的同名类。
关于本实施例的其它细节,可进一步地参考上述方法实施例,在此不再赘述。
根据本实施例的装置,若所述应用程序没有拆分代码打包的程序,则不需要将所述补丁打包成指定文件,可以直接插入所述补丁在所述应用程序的代码形成的数组,节省对所述应用程序的少部分更改操作时的成本。
第七实施例
本实施例提供一种应用程序的插入补丁装置,本实施例与第五实施例类似,其不同之处在于,如图7所示,本实施例的装置包括:下载模块301、补丁插入模块302,所述补丁插入模块302包括数组排列单元3021及第一插入单元3022以及类加载模块303。
下载模块301,用于从服务器中下载应用程序的待更新部分的补丁。
补丁插入模块302,用于将所述补丁插入类加载器中所述应用程序的安装包形成的元素组的最前面。
所述补丁插入模块302包括:
打包单元3022,用于将所述补丁打包成补入dex文件。
第二插入单元3023,用于将所述补入dex文件插入所述应用程序的dex文件元素组的最前面。
类加载模块303,用于所述类加载器加载所述应用程序插入所述补丁之后的元素组,其中,若所述插入所述补丁之后的元素组中包括不止一个同名类时,所述类加载器加载所述同名类所在元素组中排在最前面的元素中的同名类。
关于本实施例的其它细节,可进一步地参考上述方法实施例,在此不再赘述。
根据本实施例的装置,基于dex拆分包,将所述补丁打包成dex文件插入所述应用程序组成dex文件组的队首;调用类或者方法时先调用前面的类,从而实现覆盖带待替换的部分。节省对所述应用程序的少部分更改操作时的成本。
第八实施例
本本实施例提供一种应用程序的插入补丁装置,本实施例与第五实施例类似,其不同之处在于,如图9所示,本实施例的装置包括:下载模块301、补丁插入模块302、类加载模块303以及防校验模块304。
下载模块301,用于从服务器中下载应用程序的待更新部分的补丁。
补丁插入模块302,用于将所述补丁插入类加载器中所述应用程序的安装包形成的元素组的最前面。
类加载模块303,用于所述类加载器加载所述应用程序插入所述补丁之后的元素组,其中,若所述插入所述补丁之后的元素组中包括不止一个同名类时,所述类加载器加载所述同名类所在元素组中排在最前面的元素中的同名类。
防校验模块304,用于所述应用程序的代码在编译时,在所述应用程序中的装置的构造函数中插入指定代码,使所述应用程序中的类显示未校验状态。
关于本实施例的其它细节,可进一步地参考上述方法实施例,在此不再赘述。
根据本实施例的装置,通过将所述应用程序在编译时插入指定代码,使所述应用程序代码中的类不会被打上已经被校验标志,使不在同一个dex包的方法调用不会出现错误。
此外,本发明实施例还提供一种计算机可读存储介质,其内存储有计算机可执行指令,上述的计算机可读存储介质例如为非易失性存储器例如光盘、硬盘、或者闪存。上述的计算机可执行指令用于让计算机或者类似的运算装置完成上述的应用程序的插入补丁方法中的各种操作。
需要说明的是,本说明书中的各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、物品或者装置中还存在另外的相同要素。
以上该,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制,虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明,任何熟悉本专业的技术人员,在不脱离本发明技术方案范围内,当可利用上述揭示的技术内容做出些许更动或修饰为等同变化的等效实施例,但凡是未脱离本发明技术方案内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与修饰,均仍属于本发明技术方案的范围内。
Claims (10)
1.一种应用程序的插入补丁方法,其特征在于,所述方法包括:
从服务器中下载应用程序的待更新部分的补丁;
将所述补丁插入类加载器中所述应用程序的安装包形成的元素组的最前面;以及
运行所述应用程序时,所述类加载器加载所述应用程序插入所述补丁之后的元素组,其中,若所述插入所述补丁之后的元素组中包括不止一个同名类时,所述类加载器加载所述同名类所在元素组排在最前面的元素中的同名类。
2.如权利要求1所述的应用程序的插入补丁方法,其特征在于,所述类加载器加载所述应用程序插入所述补丁之后的元素组具体包括:
按照所述元素组中元素的排列顺序依次加载所述元素组中的元素;
若所述当前类中存在调用子类,则按照所述元素组中元素的排列顺序依次读取类,判断当前位置的元素中是否存在所述子类;若存在,则读取所述子类,将所述子类返回至调用所述子类的元素中;若不存在,则读取所述当前位置的下一元素中的类,直到读取到所述子类。
3.如权利要求1所述的应用程序的插入补丁方法,其特征在于,若所述应用程序的代码没有进行拆分打包,所述将所述补丁插入类加载器中所述应用程序的安装包形成的元素组的最前面包括:
将所述补丁以插入数组方式插入所述应用程序的安装包形成的元素组的最前面。
4.如权利要求1所述的应用程序的插入补丁方法,其特征在于,若所述方法基于所述应用程序的dex分包,然后用所述类加载器进行加载,则所述将所述补丁插入类加载器中所述应用程序的安装包形成的元素组的最前面包括:
将所述补丁打包成补入dex文件;
将所述补入dex文件插入所述应用程序的dex文件元素组的最前面。
5.如权利要求1所述的应用程序的插入补丁方法,其特征在于,所述方法还包括:
所述应用程序的代码在编译时,在所述应用程序中的类的构造函数中插入指定代码,使所述应用程序中的类显示未校验状态。
6.一种应用程序的插入补丁装置,其特征在于,所述装置包括:
下载模块,用于从服务器中下载应用程序的待更新部分的补丁;
补丁插入模块,用于将所述补丁插入类加载器中所述应用程序的安装包形成的元素组的最前面;以及
类加载模块,用于所述类加载器加载所述应用程序插入所述补丁之后的元素组,其中,若所述插入所述补丁之后的元素组中包括不止一个同名类时,所述类加载器加载所述同名类所在元素组中排在最前面的元素中的同名类。
7.如权利要求6所述的应用程序的插入补丁装置,其特征在于,所述类加载模块包括:
读取单元,用于按照所述元素组中元素的排列顺序依次加载所述元素组中的元素;
判断单元,用于若所述元素中存在调用子类,则按照所述元素组中元素的排列顺序依次读取类,判断当前位置的元素中是否存在所述子类;
移动单元,用于若所述判断单元判断为当前位置的元素中不存在所述子类,则将读取位置定位在所述元素组的排列所述当前位置的下一元素;
所述读取单元还用于若所述读取位置所在的元素中存在所述子类则根据所述读取位置读取所述元素中的所述子类。
8.如权利要求6所述的应用程序的插入补丁装置,其特征在于,所述补丁插入模块包括:
第一插入单元,用于若所述应用程序的代码没有进行拆分打包则将所述补丁以插入数组方式插入所述应用程序的安装包形成的元素组的最前面。
9.如权利要求6所述的应用程序的插入补丁装置,其特征在于,所述补丁插入模块包括:
打包单元,用于将所述补丁打包成补入dex文件;
第二插入单元,用于将所述补入dex文件插入所述应用程序的dex文件元素组的最前面。
10.如权利要求6所述的应用程序的插入补丁装置,其特征在于,所述装置还包括:
防校验模块,用于所述应用程序的代码在编译时,在所述应用程序中的类的构造函数中插入指定代码,使所述应用程序中的类显示未校验状态。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510534636.9A CN106484444A (zh) | 2015-08-27 | 2015-08-27 | 应用程序的插入补丁方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510534636.9A CN106484444A (zh) | 2015-08-27 | 2015-08-27 | 应用程序的插入补丁方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN106484444A true CN106484444A (zh) | 2017-03-08 |
Family
ID=58234556
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510534636.9A Pending CN106484444A (zh) | 2015-08-27 | 2015-08-27 | 应用程序的插入补丁方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106484444A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110113391A (zh) * | 2019-04-17 | 2019-08-09 | 北京奇艺世纪科技有限公司 | 一种客户端上线方法、装置及一种客户端运行方法、装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102622241A (zh) * | 2011-01-26 | 2012-08-01 | 腾讯科技(深圳)有限公司 | 一种软件升级方法及装置 |
CN102982277A (zh) * | 2012-12-24 | 2013-03-20 | 广东威创视讯科技股份有限公司 | 一种实现嵌入式系统软件补丁的方法和系统 |
CN103313231A (zh) * | 2013-07-03 | 2013-09-18 | 百度在线网络技术(北京)有限公司 | 移动终端中应用程序的升级方法、系统和服务器 |
-
2015
- 2015-08-27 CN CN201510534636.9A patent/CN106484444A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102622241A (zh) * | 2011-01-26 | 2012-08-01 | 腾讯科技(深圳)有限公司 | 一种软件升级方法及装置 |
CN102982277A (zh) * | 2012-12-24 | 2013-03-20 | 广东威创视讯科技股份有限公司 | 一种实现嵌入式系统软件补丁的方法和系统 |
CN103313231A (zh) * | 2013-07-03 | 2013-09-18 | 百度在线网络技术(北京)有限公司 | 移动终端中应用程序的升级方法、系统和服务器 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110113391A (zh) * | 2019-04-17 | 2019-08-09 | 北京奇艺世纪科技有限公司 | 一种客户端上线方法、装置及一种客户端运行方法、装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112989430A (zh) | 完整性校验方法、装置、终端设备及验证服务器 | |
CN106502703B (zh) | 一种函数调用方法和装置 | |
CN109726067B (zh) | 一种进程监控方法以及客户端设备 | |
CN106066686B (zh) | 一种信息处理方法及终端设备 | |
EP3654680B1 (en) | Method for determining access method of mobile terminal, storage medium, and mobile terminal | |
CN106681749B (zh) | 基于安卓平台的局部代码补丁更新方法及装置 | |
CN106227588A (zh) | 一种多实例对象的创建方法、装置及移动终端 | |
CN105302587A (zh) | 数据更新方法及装置 | |
CN107958365B (zh) | 物料信息变更方法、装置、存储介质及电子设备 | |
CN106775827A (zh) | 一种应用程序更新方法及装置、计算机设备 | |
CN107908407B (zh) | 编译方法、装置及终端设备 | |
CN111095199B (zh) | 一种加载应用的方法及终端设备 | |
CN103491525A (zh) | 一种实现无卡手机的方法、手机和服务器 | |
EP2869604B1 (en) | Method, apparatus and device for processing a mobile terminal resource | |
CN106201547A (zh) | 一种基于移动终端的消息显示的方法、装置及移动终端 | |
CN112865956A (zh) | 证书更新方法、装置、终端设备和服务器 | |
CN106375478A (zh) | 一种移动终端数据的同步方法、装置及系统 | |
CN106484326A (zh) | 一种数据传输处理方法及移动终端 | |
CN106445743A (zh) | 数据备份传输方法及移动终端 | |
CN110378107A (zh) | 一种安装包检测的方法及相关装置 | |
CN107219951A (zh) | 触控屏控制方法、装置、存储介质及终端设备 | |
CN112286586B (zh) | 一种插件的配置方法及相关设备 | |
CN107465646B (zh) | 一种应用下载方法、系统及相关设备 | |
CN106919458A (zh) | Hook目标内核函数的方法及装置 | |
CN107463395B (zh) | 组件调用方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | 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: 20170308 |