本发明的说明书和权利要求书及上述附图中的术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,以便包含一系列单元的过程、方法、系统、产品或设备不必限于那些单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它单元。
以下分别进行详细说明。
本发明浏览器的升级方法的一个实施例,具体可以应用于对浏览器的升级场景中,该浏览器的升级可以在服务器中完成,也可以在终端中完成。本发明实施例中浏览器的升级可以指的是更新浏览器的代码文件。
请参阅图1所示,本发明一个实施例提供的浏览器的升级方法,可以包括如下步骤:
101、获取浏览器的原始代码文件,原始代码文件包括:浏览器的第一版本代码数据、浏览器的第二版本代码数据以及原始适配层代码,原始适配层代码用于第一版本代码数据和第二版本代码数据之间的代码隔离。
在本发明实施例中,浏览器的安装与运行需要依赖代码文件,本发明实施例中代码文件中可以包括至少两种不同版本代码数据,这些不同版本代码数据可以是不同浏览器的代码数据,后续实施例中以代码文件的至少两种版本代码数据为第一版本代码数据和第二版本代码数据为例进行示意说明,本发明实施例中不同版本代码数据分别对应的版本代码功能模块之间可以进行通信,例如每个版本代码功能模块都具有一个进程,不同进程之间可以进行通信,例如不同版本代码功能模块的进程之间通过进程间通信(Inter-ProcessCommunication,IPC)进行数据的传递。举例说明,本发明实施例中的第一版本代码数据可以是某一种定制浏览器的代码数据,例如该定制浏览器可以是目前市面上的QQ浏览器,第二版本代码数据可以是另一种开源浏览器的代码数据,例如该开源浏览器可以是基于Chromium开放的浏览器。不限的是,本发明实施例中所述的第一版本代码数据和第二版本代码数据还可以是其他类型的浏览器代码数据,以Chromium的源码为基准更新浏览器源码,只是一种可能的实施例,本发明实施例提供的方案同样适用以其他浏览器源码为基准的更新方式,前述举例中的chromium也可替换为其他浏览器(包括开源和非开源的浏览器),此处仅作说明,不作为对本发明实施例的限定。例如,本发明实施例中第一版本代码数据和第二版本代码数据可以指的是同类型代码数据,例如第一版本代码数据和第二版本代码数据可以指的是内核代码数据的不同版本,也可以指的是用户界面(User Interface,UI)代码数据的不同版本。第一版本代码数据和第二版本代码数据分别对应的版本代码功能模块之间可以进行通信,以共同实现浏览器的运行。
在本发明实施例中,浏览器不可避免的会存在需要升级的问题,例如浏览器的升级可以通过升级浏览器的代码文件来完成,具体的,可以升级该代码文件中的某一部分版本代码数据,而不需要升级代码文件的全部内容。本发明实施例中为避免浏览器的代码文件中不同版本代码数据之间的相互耦合从而无法单独升级某个版本代码数据,在代码文件中不仅包括第一版本代码数据和第二版本代码数据,还包括适配层代码,该适配层代码用于第一版本代码数据和第二版本代码数据之间的代码隔离,通过适配层代码可以实现不同版本代码数据之间的交互逻辑。
在本发明实施例中,浏览器的代码文件可以包括:至少两种不同版本代码数据以及适配层代码,本发明实施例中涉及对浏览器的代码文件的升级,为便于描述,将浏览器升级之前的代码文件称为“原始代码文件”,在代码文件中当个某个版本代码数据升级时会涉及到适配层代码的更新,为便于描述,将原始代码文件中的适配层代码称为原始适配层代码。
需要说明的是,在本发明实施例中,在不同的浏览器场景下,第一版本代码数据、第二版本代码数据以及原始适配层代码所分别包括的代码行是不相同的,具体结合应用场景来获取到相应版本代码数据以及适配层代码。
102、获取用于对第二版本代码数据进行升级的第三版本代码数据,第三版本代码数据和第二版本代码数据之间存在差异代码。
在本发明实施例中,浏览器通常会涉及到升级问题,可以浏览器数据库中获取到用于升级的第三版本代码数据,以该第三版本代码数据用于对第二版本代码数据进行升级为例,不限的是,本发明实施例该第三版本代码数据用于对第一版本代码数据进行升级为例,整个代码文件的升级过程都可以参阅本发明后续实施例中描述的升级方式,此处不做限定。
在本发明实施例中,获取到可用作升级包的第三版本代码数据,若该第三版本代码数据用于对第二版本代码数据进行升级,则第三版本代码数据和第二版本代码数据之间是存在有不相同的代码,将该不相同的代码称为差异代码,则该差异代码表示了第三版本代码数据与第二版本代码数据之间需要升级的代码数据。
需要说明的是,在本发明实施例中,在不同的浏览器场景下,第二版本代码数据、第三版本代码数据所分别包括的代码行是不相同的,具体结合应用场景来获取到相应版本代码数据,以及根据具体场景确定出差异代码。
103、根据差异代码对原始适配层代码进行修改,得到目标适配层代码。
在本发明实施例中,获取到用于升级的第三版本代码数据之后,通过差异代码可以确定出第三版本代码数据与第二版本代码数据之间的不同代码,因此通过分析该差异代码可以确定本次对浏览器的升级部分,例如通过差异代码可以确定本次对浏览器的升级是优化了UI逻辑,或者优化了UI库,或者更新了浏览器内核。
在本发明实施例中,由于原始适配层代码可以实现对第一版本代码数据和第二版本代码数据之间的代码隔离,因此当第二版本代码数据需要升级时,原始适配层代码作为第二版本代码数据与第一版本代码数据之间的交互逻辑,因此也需要根据差异代码对原始适配层代码进行修改,以保证升级后的第二版本代码数据仍然能够与第一版本代码数据适配。具体对原始适配层代码的修改方式可以根据该差异代码来确定,为便于描述,将修改后的原始适配层代码称为“目标适配层代码”
需要说明的是,在本发明实施例中,在不同的浏览器场景下,原始适配层代码、目标适配层代码所分别包括的代码行是不相同的,具体结合应用场景来获取到相应版本代码数据。
104、将浏览器的原始代码文件升级为目标代码文件,目标代码文件包括:第一版本代码数据、第三版本代码数据以及目标适配层代码。
在本发明实施例中,请参阅图2所示,通过前述步骤103对原始适配层代码进行修改,得到目标适配层代码之后,可以将浏览器的原始代码文件升级为目标代码文件,目标代码文件包括:第一版本代码数据、第三版本代码数据以及目标适配层代码,即相比于原始代码文件(包括第一版本代码数据、第二版本代码数据以及原始适配层代码),在目标代码文件中保留了未做修改的第一版本代码数据,该第二版本代码数据可以被更新为第三版本代码数据,原始适配层代码可以被更新为目标适配层代码。目标适配层代码用于第一版本代码数据和第三版本代码数据之间的代码隔离。本发明实施例中第一版本代码数据和第二版本代码数据之间可以通过原始适配层代码实现代码隔离,因此当第二版本代码数据需要升级时,只需要根据第三版本代码数据和第二版本代码数据之间的差异代码来修改原始适配层代码即可,因此第二版本代码数据可以在与第一版本代码数据相隔离的情况下实现单独升级。
在本发明实施例中,浏览器的代码可以具有多种类型,例如浏览器的代码具体可以内核代码,也可以是UI代码。其中,浏览器内核可以指的是网页渲染的功能代码,也可以包括除UI代码之外的其他功能代码,包括网页渲染的功能代码、插件管理的功能代码、标签管理的功能代码、书签管理的功能代码。
首先,本发明实施例中以浏览器的代码为UI代码为例,则前述的差异代码包括:UI差异代码,原始适配层代码包括:原始UI适配层代码。在这种实现场景下,步骤103根据差异代码对原始适配层代码进行修改,得到目标适配层代码,包括:
根据UI差异代码对原始UI适配层代码进行修改,得到目标UI适配层代码。
其中,在浏览器的代码为UI代码的场景下,UI差异代码表示了原始代码文件中不同版本UI代码数据之间存在的不相同的代码,通过该UI差异代码可以对原始UI适配层代码进行修改,得到目标UI适配层代码,该目标适配层代码用于第一版本UI代码数据和第三版本UI代码数据之间的代码隔离。
进一步的,在前述实现场景下,第一版本代码数据包括:第一版本UI代码数据;第二版本代码数据包括:第二版本UI代码数据;第三版本代码数据包括:第三版本UI代码数据。步骤104将浏览器的原始代码文件升级为目标代码文件,包括:
将原始代码文件中的第二版本UI代码数据替换为第三版本UI代码数据,以及将原始代码文件中的原始UI适配层代码替换为目标UI适配层代码;
根据原始代码文件中的第三版本UI代码数据、目标UI适配层代码和第一版本UI代码数据得到目标代码文件。
其中,在原始代码文件中将第二版本UI代码数据替换为第三版本UI代码数据,并且将原始UI适配层代码替换为目标UI适配层代码,在完成前述的UI代码数据的替换以及UI适配层代码的替换之后,根据该原始代码文件中的第三版本UI代码数据、目标UI适配层代码和第一版本UI代码数据得到目标代码文件,从而解决了浏览器的UI代码跟随第三版本UI代码数据的升级问题。
在本发明的一些实施例中,浏览器的UI代码还可以包括如下两种情况:UI逻辑代码和UI库代码,其中,UI库指界面开发相关的基础代码库,包括一系列的控件,如按钮、编辑框、列表控件、树形控件等,也包括绘制、布局、交互、动画基本的界面功能等。通常情况下,浏览器的UI库还包括:基础(Base)库,由于UI库依赖于其中的Base库,而UI逻辑开发依赖于UI库,也依赖于Base库,因此本发明后续实施例提到的UI库,包括了Base库,即指的是UI库和Base库。Base库包括一些基础功能模块的代码库,如文件操作,线程管理,字符串操作等。UI逻辑是指软件的上层界面以及相关的功能逻辑,主要指用户直接交互和操作相关界面与功能。在浏览器中,一般包括标签栏、地址栏、书签栏、下载及其界面等。
接下来针对浏览器的UI代码包括的UI逻辑代码以及UI库代码,例如第一版本UI代码数据,包括:第一版本UI逻辑代码数据和第一版本UI库代码数据;第二版本UI代码数据,包括:第二版本UI逻辑代码数据和第二版本UI库代码数据;原始UI适配层代码包括:原始UI逻辑交互代码和原始UI库交互代码;UI差异代码包括:UI逻辑差异代码和UI库差异代码。
其中,原始UI逻辑交互代码用于第一版本UI逻辑代码数据和第二版本UI逻辑代码数据之间的代码隔离,原始UI库交互代码用于第一版本UI库代码数据和第二版本UI库代码数据之间的代码隔离。UI逻辑差异代码指的是第一版本UI逻辑代码数据和第二版本UI逻辑代码数据之间的代码差异,UI库差异代码指的是第一版本UI库代码数据和第二版本UI库代码数据之间的代码差异。
在前述实现场景下,步骤103根据UI差异代码对原始UI适配层代码进行修改,得到目标UI适配层代码,包括:
根据UI逻辑差异代码对原始UI逻辑交互代码进行修改,得到目标UI逻辑交互代码;以及,
根据UI库差异代码对原始UI库交互代码进行修改,得到目标UI库交互代码;
其中,第一版本UI逻辑代码数据和第二版本UI逻辑代码数据应用于浏览器的应用层,第一版本UI逻辑代码数据和第二版本UI逻辑代码之间通过UI逻辑交互代码实现代码隔离;
第一版本UI库代码数据和第二版本UI库代码数据应用于浏览器的底层,第一版本UI库代码数据和第二版本UI库代码之间通过UI库交互代码实现代码隔离。
在本发明实施例中,浏览器可以包括:应用层和底层,第一版本UI逻辑代码数据和第二版本UI逻辑代码数据应用于浏览器的应用层,因此当第二版本UI逻辑代码数据更新时可以通过UI逻辑交互代码的隔离作用实现单独更新,并且该UI逻辑交互代码也需要修改。第一版本UI库代码数据和第二版本UI库代码数据应用于浏览器的底层,当第二版本UI库代码数据更新时,可以通过UI库交互代码的隔离作用实现单独更新,并且该UI库交互代码也需要修改。
基于前述实现场景,第三版本UI代码数据,包括:第三版本UI逻辑代码数据和第三版本UI库代码数据。当浏览器的代码文件还包括:上下层跨版本调用代码时,将原始代码文件中的第二版本UI代码数据替换为第三版本UI代码数据,以及将原始代码文件中的原始UI适配层代码替换为目标UI适配层代码,包括:
将原始代码文件中的第二版本UI库代码数据替换为第三版本UI库代码数据;
将原始代码文件中的原始UI库交互代码替换为目标UI库交互代码;
当第一版本UI库代码数据中与第三版本UI库代码数据存在相同的功能代码时,从第一版本UI库代码数据中移除掉相同的功能代码得到修改后的第一版本UI库代码数据,或,根据相同的功能代码在目标UI库交互代码中添加适配接口,得到添加有适配接口的目标UI库交互代码;
将原始代码文件中的第二版本UI逻辑代码数据替换为第三版本UI逻辑代码数据;
将原始代码文件中的原始UI逻辑交互代码替换为目标UI逻辑交互代码;
将上下层跨版本调用代码移植到目标UI库交互代码中,得到包括有上下层跨版本调用代码的目标UI库交互代码。
其中,上下层跨版本调用代码指的是不同版本代码数据之间进行跨版本调用时需要使用的交互逻辑,例如第一版本UI逻辑代码数据为定制浏览器的UI逻辑代码数据,第二版本UI库代码数据为开源浏览器的UI库代码数据,则定制浏览器的上层UI逻辑可以通过上下层跨版本调用代码对开源浏览器的UI库的公开接口进行直接调用。
具体的,当原始代码文件需要升级时,首先对UI库代码进行升级,即将原始代码文件中的第二版本UI库代码数据替换为第三版本UI库代码数据,将原始代码文件中的原始UI库交互代码替换为目标UI库交互代码。升级后的UI库代码为第三版本UI库代码数据,当第一版本UI库代码数据中与第三版本UI库代码数据存在相同的功能代码时,具有如下两种不同的解决方案:一种是从第一版本UI库代码数据中移除掉相同的功能代码得到修改后的第一版本UI库代码数据,即该相同的功能代码从第一版本UI库代码数据移植到第三版本UI库代码数据中。另一种是根据相同的功能代码在目标UI库交互代码中添加适配接口,得到添加有适配接口的目标UI库交互代码,即需要修改目标UI库交互代码,以添加适配接口才能调控该相同的功能代码的执行。
当原始代码文件需要升级时,通过前述内容对UI库代码进行升级之后,接下来可以对UI逻辑代码进行升级,即将原始代码文件中的第二版本UI逻辑代码数据替换为第三版本UI逻辑代码数据,并且将原始代码文件中的原始UI逻辑交互代码替换为目标UI逻辑交互代码,从而完成对UI逻辑代码的升级。
最后,当浏览器的代码文件还包括:上下层跨版本调用代码时,仍然需要对该上下层跨版本调用代码进行移植,即在浏览器的底层中将该上下层跨版本调用代码移植到目标UI库交互代码中,得到包括有上下层跨版本调用代码的目标UI库交互代码。
基于前述场景的举例说明,接下来对目标代码文件的生成方式进行详细说明,根据原始代码文件中第三版本UI代码数据、目标UI适配层代码和第一版本UI代码数据得到目标代码文件,包括:
根据原始代码文件中第三版本UI库代码数据、第三版本UI逻辑代码数据、修改后的第一版本UI库代码数据、目标UI逻辑交互代码、第一版本UI逻辑代码数据、包括有上下层跨版本调用代码的目标UI库交互代码得到目标代码文件;或,
根据原始代码文件中第三版本UI库代码数据、第三版本UI逻辑代码数据、第一版本UI库代码数据、目标UI逻辑交互代码、第一版本UI逻辑代码数据、包括有上下层跨版本调用代码的目标UI库交互代码得到目标代码文件。
其中,针对前述实施例中,当第一版本UI库代码数据中与第三版本UI库代码数据存在相同的功能代码时所生成的不同代码数据,可以得到修改后的第一版本UI库代码数据,或者添加有适配接口的目标UI库交互代码,针对第一版本UI库代码数据中与第三版本UI库代码数据存在相同的功能代码时的处理方式不相同,可以有前述两种不同的目标代码文件生成方式,具体可以结合应用场景来执行具体的目标代码文件生成过程,此处不做限定。
在本发明的一些实施例中,浏览器的代码可以具有多种类型,例如浏览器的代码具体可以内核代码,也可以是UI代码。前述实施例中对UI代码的升级过程进行了说明,接下来对内核代码的升级过程进行详细说明。第一版本代码数据包括:第一版本内核代码数据;第二版本代码数据包括:第二版本内核代码数据;第三版本代码数据包括:第三版本内核代码数据;差异代码包括:内核差异代码,原始适配层代码包括:原始内核适配层代码;
在这种实现场景下,步骤103根据差异代码对适配层代码进行修改,得到修改后的适配层代码,包括:
根据内核差异代码对原始内核适配层代码进行修改,得到目标内核适配层代码。
其中,在浏览器的代码为内核代码的场景下,内核差异代码表示了原始代码文件中不同版本内核代码数据之间存在的不相同的代码,通过该内核差异代码可以对原始内核适配层代码进行修改,得到目标内核适配层代码,该目标适配层代码用于第一版本内核代码数据和第三版本内核代码数据之间的代码隔离。
在这种实现场景下,步骤104将浏览器的原始代码文件升级为目标代码文件,包括:
将原始代码文件中的第二版本内核代码数据替换为第三版本内核代码数据,以及将原始代码文件中的原始适配层代码替换为目标内核适配层代码;
根据原始代码文件中第三版本内核代码数据、目标内核适配层代码和第一版本代码数据得到目标代码文件。
其中,在原始代码文件中将第二版本内核代码数据替换为第三版本内核代码数据,并且将原始内核适配层代码替换为目标内核适配层代码,在完成前述的内核代码数据的替换以及内核适配层代码的替换之后,根据该原始代码文件中的第三版本内核代码数据、目标内核适配层代码和第一版本内核代码数据得到目标代码文件,从而解决了浏览器的内核代码跟随第三版本内核代码数据的升级问题。
通过以上实施例对本发明实施例的描述可知,首先获取浏览器的原始代码文件,原始代码文件包括:浏览器的第一版本代码数据、浏览器的第二版本代码数据以及原始适配层代码,原始适配层代码用于第一版本代码数据和第二版本代码数据之间的代码隔离。然后获取用于对第二版本代码数据进行升级的第三版本代码数据,第三版本代码数据和第二版本代码数据之间存在差异代码。根据差异代码对原始适配层代码进行修改,得到目标适配层代码。最后将浏览器的原始代码文件升级为目标代码文件,目标代码文件包括:第一版本代码数据、第三版本代码数据以及目标适配层代码。本发明实施例中第一版本代码数据和第二版本代码数据之间可以通过原始适配层代码实现代码隔离,因此当第二版本代码数据需要升级时,只需要根据第三版本代码数据和第二版本代码数据之间的差异代码来修改原始适配层代码即可,因此第二版本代码数据可以在与第一版本代码数据相隔离的情况下实现单独升级,对于差异代码的数据量大或者小都可以适用,浏览器的原始代码文件可以升级为目标代码文件,该目标代码文件可用于浏览器的运行,因此提高了浏览器的升级效率,减少浏览器升级的工作量。
为便于更好的理解和实施本发明实施例的上述方案,下面举例相应的应用场景来进行具体说明。
本发明实施例中接下来以第一版本代码数据为某一种定制浏览器的代码数据、第二版本代码数据为开源浏览器的代码数据为例进行说明,例如该开源浏览器的代码数据可以是Chromium的代码数据。Chromium的代码数据会需要经常更新,以保证网页浏览相关功能能够与最新版的Chromium对齐。而Chromium作为一款优秀的开源软件,不仅持续优化的网页浏览器的相关功能,也在不断改进UI逻辑以及相关功能,尤其包括UI库的图片绘制性能、文字绘制性能等。本发明实施例中UI库是基于Chromium的UI库来实现,并能实现UI库跟随Chromium进行升级。为了能够快速升级UI库,最主要的工作是要减少上层UI逻辑与底层UI库的耦合,耦合度越小,升级越快越方便。升级UI库时,需要对UI库的实现原理有比较深刻的理解,这与升级内核时所需具备的知识有所差异。本发明实施例中不仅把UI库和上层的UI逻辑进行了隔离,也把UI库和内核进行了隔离,UI库和内核可以分别使用不同的Chromium版本进行独立升级。UI库升级和内核升级互不影响,且可采用不同的升级周期和升级节奏,分别独立验证升级效果,保证了更灵活的版本发布和项目管理。
例如,本发明实施例中浏览器的第一版本代码可以是某个定制浏览器第10版本,后续实施例中以浏览器的第一版本代码为例来阐述浏览器的升级过程。
本发明实施例中,为了保证内核、UI库、UI逻辑的解耦,需要在进程架构和代码管理上进行隔离。
首先进行代码管理。本发明实施例中把内核、UI库、UI逻辑分成3个不同的代码库。其中,只有UI逻辑依赖于UI库,其他没有相互的依赖关系。UI库是由第二版本代码(例如Chromium版本)的代码裁剪而来,包括UI相关的基础代码,以及各类通用代码,主要是Chromium版本代码的UI、Base目录下的相关代码。其中,UI库是通用的,除了可以用在浏览器的第一版本代码,也可以用到其他软件中。
如图3所示,为浏览器的升级方法的一种应用场景下的整体架构示意图。
本发明实施例把浏览器的第一版本代码和第二版本代码进行分离,减少浏览器的第一版本代码和第二版本代码之间的代码耦合,从而保证内核和UI库能够更快速的升级。由于内核和UI库可以采用不同的第二版本代码版本,下面就以内核为第二版本代码的版本号为63,UI库为第二版本代码的版本号为59为例说明本发明实施例的实现细节。
图3中为浏览器的第一版本代码的相关架构图,结合如下表1所示,对图中的元素的说明。
如图4所示,为UI代码数据的更新流程示意图,主要包括如下过程:
S11、使用新版本Chromium替换B2的代码。
S12、根据实际变动修改C2的代码。
S13、把部分A2的代码移植到B2或C2中。
S14、使用新版本Chromium替换B1的代码。
S15、根据实际变动修改C1的代码。
S16、根据实际变动把部分D1代码移植到C2中。
在上述步骤S11至步骤S16的过程中,UI库升级时,B1和B2需要用第二版本代码的新代码替换,并需要修改C1、C2、D1中的相关代码。升级UI库的技能要求是理解UI库的实现原理,C1和C2就是适配层的设计,因此,只需要参考适配层的修改标准处理。而D1是新发生的耦合代码,需要把这部分代码移植到C2中。因为修改C2一般比修改D1的成本更低,因此把D1移植到C2中,能够保证后面升级可以更快速实现。为了长远的升级效率考虑,除了常规的升级以外,需要尽量避免浏览器的第一版本代码上层UI逻辑对第二版本代码的UI库进行直接调用,即要把D1的逻辑移植到C2中。
请参阅图5所示,UI库的升级流程包括如下过程:
S21、使用新版本Chromium替换B3的代码。
S22、根据实际变动修改C3的代码。
在上述步骤S21至步骤S22的过程中,内核升级时,B3可以使用第二版本代码替换,如使用第二版本代码65替换原有的第二版本代码63,并修改C3中相关受影响的代码。升级内核技能要求是理解第二版本代码的编译,并理解C3相关的代码。内核的升级对其他模块影响很小,一般不需要修改。
如图6所示,接下来对第一版本代码和第二版本代码之间通过进程进行通信的进程架构进行说明,第二版本代码的进程架构中,Browser进程作为主进程,该Browser进程是浏览器的一个进程,对于第二版本代码浏览器来说,是主进程。对于浏览器的第一版本代码来说,主进程是UI进程,Browser进程只是浏览器的第一版本代码的内核的主进程。实现UI逻辑、数据管理等功能,包括标签、书签等相关UI逻辑和数据管理,同时也管理着各网页的渲染进程、扩展进程、GPU进程、以及插件进程,需要说明到的是,还可以包括其他进程,此处不做限定。
本发明实施例为了把UI(包括UI逻辑和UI库)与内核进行分离,新增了一个UI进程,主要是把主界面相关的UI逻辑移植到了UI进程中。修改后,UI进程为主进程,并由UI进程控制Browser进程的生命周期。UI进程与Browser进程之间通过IPC进行通信,主要是数据的传递。这种新的进程架构,没有改变第二版本代码原有的进程架构,只在Browser进程中裁剪了部分代码,并新增加了跨进程通信模块。
本发明实施例把内核、UI库、UI逻辑代码进行分割,通过适配层来实现浏览器的第一版本代码和第二版本代码的代码依赖,从而保证升级时,只需要对适配层进行修改,减少升级时的代码修改量。
本发明实施例实现浏览器的第一版本代码的UI库和内核分别升级,能够让浏览器的第一版本代码紧跟第二版本代码的升级步伐,把第二版本代码的新功能和性能提升应用到浏览器的第一版本代码中。本发明实施例能够以更少的成本,更少的时间完成对第二版本代码的新版本的升级。把第二版本代码的网页渲染优化、安全性提升、UI性能提升、显示效果优化快速应用到浏览器的第一版本代码中。本发明实施例实现UI库和内核的分离,并且UI库和内核能够使用不同版本的第二版本代码分别进行独立升级,可以采用不同的升级周期和升级节奏,方便不同团队的协同工作,有利于项目管理的实施。使用本发明实施例后,浏览器的第一版本代码对第二版本代码的版本升级,成本更低、节奏更快、步伐更紧,在第二版本代码发布新版本就可以快速跟进升级、发布更灵活。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
为便于更好的实施本发明实施例的上述方案,下面还提供用于实施上述方案的相关装置。
请参阅图7-a所示,本发明实施例提供的一种浏览器的升级装置700,可以包括:代码文件获取模块701、更新代码获取模块702、适配层修改模块703、目标文件生成模块704,其中,
代码文件获取模块701,用于获取浏览器的原始代码文件,所述原始代码文件包括:所述浏览器的第一版本代码数据、所述浏览器的第二版本代码数据以及原始适配层代码,所述原始适配层代码用于所述第一版本代码数据和所述第二版本代码数据之间的代码隔离;
更新代码获取模块702,用于获取用于对所述第二版本代码数据进行升级的第三版本代码数据,所述第三版本代码数据和所述第二版本代码数据之间存在差异代码;
适配层修改模块703,用于根据所述差异代码对所述原始适配层代码进行修改,得到目标适配层代码;
目标文件生成模块704,用于将所述浏览器的原始代码文件升级为目标代码文件,所述目标代码文件包括:所述第一版本代码数据、所述第三版本代码数据以及所述目标适配层代码。
在本发明的一些实施例中,所述差异代码包括:用户界面UI差异代码,所述原始适配层代码包括:原始UI适配层代码;
所述适配层修改模块703,具体用于根据所述UI差异代码对所述原始UI适配层代码进行修改,得到目标UI适配层代码。
在本发明的一些实施例中,所述第一版本代码数据包括:第一版本UI代码数据;所述第二版本代码数据包括:第二版本UI代码数据;所述第三版本代码数据包括:第三版本UI代码数据;
如图7-b所示,所述目标文件生成模块704,包括:
代码数据替换单元7041,用于将所述原始代码文件中的第二版本UI代码数据替换为所述第三版本UI代码数据,以及将所述原始代码文件中的原始UI适配层代码替换为所述目标UI适配层代码;
目标文件获得单元7042,用于根据所述原始代码文件中的所述第三版本UI代码数据、所述目标UI适配层代码和所述第一版本UI代码数据得到所述目标代码文件。
在本发明的一些实施例中,所述第一版本UI代码数据,包括:第一版本UI逻辑代码数据和第一版本UI库代码数据;所述第二版本UI代码数据,包括:第二版本UI逻辑代码数据和第二版本UI库代码数据;所述原始UI适配层代码包括:原始UI逻辑交互代码和原始UI库交互代码;所述UI差异代码包括:UI逻辑差异代码和UI库差异代码;
所述适配层修改模块703,具体用于根据所述UI逻辑差异代码对所述原始UI逻辑交互代码进行修改,得到目标UI逻辑交互代码;以及,根据所述UI库差异代码对所述原始UI库交互代码进行修改,得到目标UI库交互代码;
其中,所述第一版本UI逻辑代码数据和所述第二版本UI逻辑代码数据应用于所述浏览器的应用层,所述第一版本UI逻辑代码数据和所述第二版本UI逻辑代码之间通过所述UI逻辑交互代码实现代码隔离;
所述第一版本UI库代码数据和所述第二版本UI库代码数据应用于所述浏览器的底层,所述第一版本UI库代码数据和所述第二版本UI库代码之间通过所述UI库交互代码实现代码隔离。
在本发明的一些实施例中,所述第三版本UI代码数据,包括:第三版本UI逻辑代码数据和第三版本UI库代码数据;
如图7-c所示,当所述浏览器的代码文件还包括:上下层跨版本调用代码时,所述代码数据替换单元7041,包括:
代码替换子单元70411,用于将所述原始代码文件中的第二版本UI库代码数据替换为所述第三版本UI库代码数据;
适配层替换子单元70412,用于将所述原始代码文件中的原始UI库交互代码替换为目标UI库交互代码;
同功能代码配置子单元70413,用于当所述第一版本UI库代码数据中与所述第三版本UI库代码数据存在相同的功能代码时,从所述第一版本UI库代码数据中移除掉所述相同的功能代码得到修改后的第一版本UI库代码数据,或,根据所述相同的功能代码在所述目标UI库交互代码中添加适配接口,得到添加有适配接口的目标UI库交互代码;
所述代码替换子单元70411,还用于将所述原始代码文件中的第二版本UI逻辑代码数据替换为所述第三版本UI逻辑代码数据;
所述适配层替换子单元70412,还用于将所述原始代码文件中的原始UI逻辑交互代码替换为目标UI逻辑交互代码;将所述上下层跨版本调用代码移植到所述目标UI库交互代码中,得到包括有所述上下层跨版本调用代码的目标UI库交互代码。
在本发明的一些实施例中,所述目标文件获得单元7042,具体用于根据所述原始代码文件中所述第三版本UI库代码数据、所述第三版本UI逻辑代码数据、所述修改后的第一版本UI库代码数据、所述目标UI逻辑交互代码、所述第一版本UI逻辑代码数据、包括有所述上下层跨版本调用代码的目标UI库交互代码得到所述目标代码文件;或,根据所述原始代码文件中所述第三版本UI库代码数据、所述第三版本UI逻辑代码数据、所述第一版本UI库代码数据、所述目标UI逻辑交互代码、所述第一版本UI逻辑代码数据、包括有所述上下层跨版本调用代码的目标UI库交互代码得到所述目标代码文件。
在本发明的一些实施例中,所述第一版本代码数据包括:第一版本内核代码数据;所述第二版本代码数据包括:第二版本内核代码数据;所述第三版本代码数据包括:第三版本内核代码数据;所述差异代码包括:内核差异代码,所述原始适配层代码包括:原始内核适配层代码;
所述适配层修改模块703,具体用于根据所述内核差异代码对所述原始内核适配层代码进行修改,得到目标内核适配层代码;
所述目标文件生成模块704,具体用于将所述原始代码文件中的第二版本内核代码数据替换为所述第三版本内核代码数据,以及将所述原始代码文件中的原始适配层代码替换为所述目标内核适配层代码;根据所述原始代码文件中所述第三版本内核代码数据、所述目标内核适配层代码和所述第一版本代码数据得到所述目标代码文件。
通过以上对本发明实施例的描述可知,
本发明实施例还提供了另一种终端,如图8所示,为了便于说明,仅示出了与本发明实施例相关的部分,具体技术细节未揭示的,请参照本发明实施例方法部分。该终端可以为包括手机、平板电脑、PDA(Personal Digital Assistant,个人数字助理)、POS(Point ofSales,销售终端)、车载电脑等任意终端设备,以终端为手机为例:
图8示出的是与本发明实施例提供的终端相关的手机的部分结构的框图。参考图8,手机包括:射频(Radio Frequency,RF)电路1010、存储器1020、输入单元1030、显示单元1040、传感器1050、音频电路1060、无线保真(wireless fidelity,WiFi)模块1070、处理器1080、以及电源1090等部件。本领域技术人员可以理解,图8中示出的手机结构并不构成对手机的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
下面结合图8对手机的各个构成部件进行具体的介绍:
RF电路1010可用于收发信息或通话过程中,信号的接收和发送,特别地,将基站的下行信息接收后,给处理器1080处理;另外,将设计上行的数据发送给基站。通常,RF电路1010包括但不限于天线、至少一个放大器、收发信机、耦合器、低噪声放大器(Low NoiseAmplifier,LNA)、双工器等。此外,RF电路1010还可以通过无线通信与网络和其他设备通信。上述无线通信可以使用任一通信标准或协议,包括但不限于全球移动通讯系统(GlobalSystem of Mobile communication,GSM)、通用分组无线服务(General Packet RadioService,GPRS)、码分多址(Code Division Multiple Access,CDMA)、宽带码分多址(Wideband Code Division Multiple Access,WCDMA)、长期演进(Long Term Evolution,LTE)、电子邮件、短消息服务(Short Messaging Service,SMS)等。
存储器1020可用于存储软件程序以及模块,处理器1080通过运行存储在存储器1020的软件程序以及模块,从而执行手机的各种功能应用以及数据处理。存储器1020可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器1020可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
输入单元1030可用于接收输入的数字或字符信息,以及产生与手机的用户设置以及功能控制有关的键信号输入。具体地,输入单元1030可包括触控面板1031以及其他输入设备1032。触控面板1031,也称为触摸屏,可收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触控面板1031上或在触控面板1031附近的操作),并根据预先设定的程式驱动相应的连接装置。可选的,触控面板1031可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器1080,并能接收处理器1080发来的命令并加以执行。此外,可以采用电阻式、电容式、红外线以及表面声波等多种类型实现触控面板1031。除了触控面板1031,输入单元1030还可以包括其他输入设备1032。具体地,其他输入设备1032可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆等中的一种或多种。
显示单元1040可用于显示由用户输入的信息或提供给用户的信息以及手机的各种菜单。显示单元1040可包括显示面板1041,可选的,可以采用液晶显示器(LiquidCrystal Display,LCD)、有机发光二极管(Organic Light-Emitting Diode,OLED)等形式来配置显示面板1041。进一步的,触控面板1031可覆盖显示面板1041,当触控面板1031检测到在其上或附近的触摸操作后,传送给处理器1080以确定触摸事件的类型,随后处理器1080根据触摸事件的类型在显示面板1041上提供相应的视觉输出。虽然在图8中,触控面板1031与显示面板1041是作为两个独立的部件来实现手机的输入和输入功能,但是在某些实施例中,可以将触控面板1031与显示面板1041集成而实现手机的输入和输出功能。
手机还可包括至少一种传感器1050,比如光传感器、运动传感器以及其他传感器。具体地,光传感器可包括环境光传感器及接近传感器,其中,环境光传感器可根据环境光线的明暗来调节显示面板1041的亮度,接近传感器可在手机移动到耳边时,关闭显示面板1041和/或背光。作为运动传感器的一种,加速计传感器可检测各个方向上(一般为三轴)加速度的大小,静止时可检测出重力的大小及方向,可用于识别手机姿态的应用(比如横竖屏切换、相关游戏、磁力计姿态校准)、振动识别相关功能(比如计步器、敲击)等;至于手机还可配置的陀螺仪、气压计、湿度计、温度计、红外线传感器等其他传感器,在此不再赘述。
音频电路1060、扬声器1061,传声器1062可提供用户与手机之间的音频接口。音频电路1060可将接收到的音频数据转换后的电信号,传输到扬声器1061,由扬声器1061转换为声音信号输出;另一方面,传声器1062将收集的声音信号转换为电信号,由音频电路1060接收后转换为音频数据,再将音频数据输出处理器1080处理后,经RF电路1010以发送给比如另一手机,或者将音频数据输出至存储器1020以便进一步处理。
WiFi属于短距离无线传输技术,手机通过WiFi模块1070可以帮助用户收发电子邮件、浏览网页和访问流式媒体等,它为用户提供了无线的宽带互联网访问。虽然图8示出了WiFi模块1070,但是可以理解的是,其并不属于手机的必须构成,完全可以根据需要在不改变发明的本质的范围内而省略。
处理器1080是手机的控制中心,利用各种接口和线路连接整个手机的各个部分,通过运行或执行存储在存储器1020内的软件程序和/或模块,以及调用存储在存储器1020内的数据,执行手机的各种功能和处理数据,从而对手机进行整体监控。可选的,处理器1080可包括一个或多个处理单元;优选的,处理器1080可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器1080中。
手机还包括给各个部件供电的电源1090(比如电池),优选的,电源可以通过电源管理系统与处理器1080逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。
尽管未示出,手机还可以包括摄像头、蓝牙模块等,在此不再赘述。
在本发明实施例中,该终端所包括的处理器1080还具有控制执行以上由终端执行的浏览器的升级的方法流程。
图9是本发明实施例提供的一种服务器结构示意图,该服务器1100可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上中央处理器(central processingunits,CPU)1122(例如,一个或一个以上处理器)和存储器1132,一个或一个以上存储应用程序1142或数据1144的存储介质1130(例如一个或一个以上海量存储设备)。其中,存储器1132和存储介质1130可以是短暂存储或持久存储。存储在存储介质1130的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对服务器中的一系列指令操作。更进一步地,中央处理器1122可以设置为与存储介质1130通信,在服务器1100上执行存储介质1130中的一系列指令操作。
服务器1100还可以包括一个或一个以上电源1126,一个或一个以上有线或无线网络接口1150,一个或一个以上输入输出接口1158,和/或,一个或一个以上操作系统1141,例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM等等。
上述实施例中由服务器所执行的浏览器的升级方法的步骤可以基于该图9所示的服务器结构。
另外需说明的是,以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。另外,本发明提供的装置实施例附图中,模块之间的连接关系表示它们之间具有通信连接,具体可以实现为一条或多条通信总线或信号线。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件的方式来实现,当然也可以通过专用硬件包括专用集成电路、专用CPU、专用存储器、专用元器件等来实现。一般情况下,凡由计算机程序完成的功能都可以很容易地用相应的硬件来实现,而且,用来实现同一功能的具体硬件结构也可以是多种多样的,例如模拟电路、数字电路或专用电路等。但是,对本发明而言更多情况下软件程序实现是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘、U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
综上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照上述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对上述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。