发明内容
本发明实施例提供一种用于软件开发包的更新方法、系统、电子设备及存储介质,用于至少解决上述技术问题之一。
第一方面,本发明实施例提供一种用于软件开发包的更新方法,其中,所述软件开发包基于静态编译型语言代码和初始平台内核生成,所述初始平台内核至少包括动态脚本语言代码和资源文件,所述方法包括:
当检测到需要进行软件开发包更新时,自服务器端下载所述软件开发包的补丁文件;
基于所述补丁文件和所述初始平台内核生成新的平台内核;
基于所述静态编译型语言代码加载所述新的平台内核的动态脚本语言代码和资源文件以完成软件开发包的更新。
第二方面,本发明实施例提供一种用于软件开发包的更新系统,其中,所述软件开发包基于静态编译型语言代码和初始平台内核生成,所述初始平台内核至少包括动态脚本语言代码和资源文件,所述系统包括:
文件下载程序模块,用于当检测到需要进行软件开发包更新时,自服务器端下载所述软件开发包的补丁文件;
内核生成程序模块,用于基于所述补丁文件和所述初始平台内核生成新的平台内核;
更新程序模块,用于基于所述静态编译型语言代码加载所述新的平台内核的动态脚本语言代码和资源文件以完成软件开发包的更新。
在一些实施例中,所述资源文件包括声学模型和/或文本转语音模型。
在一些实施例中,在完成对所述软件开发包的更新之后还包括:
建立与服务器端之间的长链接,用于当所述新的平台内核再次发生版本变更后接收服务器端发来的更新消息。
在一些实施例中,建立与服务器端之间的长链接包括:启动一个websocket客户端以保持与服务器端之间的长链接。
在一些实施例中,在完成对所述软件开发包的更新之后还包括:启动所述软件开发包的语音功能。
第三方面,本发明实施例提供一种存储介质,所述存储介质中存储有一个或多个包括执行指令的程序,所述执行指令能够被电子设备(包括但不限于计算机,服务器,或者网络设备等)读取并执行,以用于执行本发明上述任一项用于软件开发包的更新方法。
第四方面,提供一种电子设备,其包括:至少一个处理器,以及与所述至少一个处理器通信连接的存储器,其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行本发明上述任一项用于软件开发包的更新方法。
本发明实施例中使用动态脚本语言,实现无性能损耗,且不重启就生效更新。因为动态脚本语言可以无需编译,直接由解释器翻译为可以运行的机器语言,可以动态加载,sdk的大部分逻辑可以放在动态脚本语言中,从而实现动态替换脚本,达到热更新sdk的效果。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
本发明可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、元件、数据结构等等。也可以在分布式计算环境中实践本发明,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
在本发明中,“模块”、“装置”、“系统”等指应用于计算机的相关实体,如硬件、硬件和软件的组合、软件或执行中的软件等。详细地说,例如,元件可以、但不限于是运行于处理器的过程、处理器、对象、可执行元件、执行线程、程序和/或计算机。还有,运行于服务器上的应用程序或脚本程序、服务器都可以是元件。一个或多个元件可在执行的过程和/或线程中,并且元件可以在一台计算机上本地化和/或分布在两台或多台计算机之间,并可以由各种计算机可读介质运行。元件还可以根据具有一个或多个数据包的信号,例如,来自一个与本地系统、分布式系统中另一元件交互的,和/或在因特网的网络通过信号与其它系统交互的数据的信号通过本地和/或远程过程来进行通信。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”,不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
在对本发明的实施例做详细说明之前,首先说明本发明中所涉及的一些相关概念。
如图1所示,为开发者在DUI(Dialogue User Interface,对话用户界面)平台创建一个全链路的产品的界面图。其中,开发者可以选择产品类型、使用场景、运行环境和产品信息等内容来创建自己的语音产品,例如,可以选择“全链路定制”或者“基础技术”作为产品类型,选择自定义使用场景或者内置使用场景(例如,“电视语音助手”),再选择运行环境(例如,Android、iOS或者嵌入式等),最后填写产品信息(例如,产品名称和产品描述等信息)完成一个语音产品的创建。
如图2所示,为内核版本选择界面图,该界面下开发者可以选择用于sdk的内核版本号,例如,v1.0.2.1、v1.0.1.1等。当某一版本号被选中之后,在“更新时间”栏目下显示相应于该某一版本号的更新时间,在“更新内容”栏目下显示所备注的主要更新内容。
如图3所示,为发布所创建的语音产品的界面图,该界面下显示了产品名称,并且提供有供开发者编辑版本名称的栏目,供开发者选择的发布的版本分支(例如,正式版本和测试版本)的栏目,以及供开发者填写的更新说明栏目;所有信息填写完善之后开发者点击发布按钮即可完成所创建的产品的发布,产品发布之后开发者或者用户就可以直接获取集成了sdk的产品进行应用。
为解决现有技术中存储在技术问题,发明人设计了一种用于软件开发包的更新方法,所述软件开发包基于静态编译型语言代码和初始平台内核生成,所述初始平台内核至少包括动态脚本语言代码和资源文件,该方法应用于终端设备。
如图4所示,本发明的用于软件开发包的更新方法的一实施例,包括以下步骤:
S10、当检测到需要进行软件开发包更新时,自服务器端下载所述软件开发包的补丁文件;
S20、基于所述补丁文件和所述初始平台内核生成新的平台内核;
S30、基于所述静态编译型语言代码加载所述新的平台内核的动态脚本语言代码和资源文件以完成软件开发包的更新。
本发明的补丁部分是采用动态脚本语言+资源的方式生成的,动态脚本语言+资源是跨平台的,与平台解耦合的,在不同平台下,只需要一份动态脚本语言+资源,该动态脚本语言+资源是可以运行在不同平台下的,通过保证加载动态脚本语言+资源的静态编译型语言代码适配多个平台,实现了热更新方案是与平台解耦合的。
其次,可以使用动态脚本语言的方案,实现无性能损耗,实现不重启就生效。因为动态脚本语言可以无需编译,直接由解释器翻译为可以运行的机器语言,可以动态加载,sdk的大部分逻辑可以放在动态脚本语言中,从而实现动态替换脚本,达到热更新sdk的效果。
采用本发明的方案使得热更新不再仅仅局限于对应用实现热更新。移动端和嵌入式sdk的技术实现大多都是使用静态编译型语言实现,极少会使用脚本语言实现。本发明并非简单的使用了动态脚本语言,而是依托于服务端和平台(平台内核)的赋能并结合使用脚本语言实现的热更新。
此外,使用静态编译型语言+动态脚本语言来开发sdk,sdk的大部分逻辑放在动态脚本语言中,当有新版本时,在平台上发布新版本,sdk能在应用运行过程中收到推送信息,自动下载脚本和资源,实现动态替换。
如图5所示,为本发明的用于软件开发包的更新方法的另一实施例的流程图,具体包括如下步骤:
S1:首先sdk初始化,sdk由静态编译型语言代码(比如java,c等)+DUI内核组成,DUI内核中包含动态脚本语言代码(比如lua)+资源文件(比如声学模型,TTS资源等)。
S2:由静态编译型语言代码加载DUI内核中的动态脚本语言(lua代码)和资源文件。采用静态编译型语言(java,c)+资源文件组成sdk,只热更新资源文件。选用客户端主流编程语言,移动端开发人员专注于android或ios的编码,开发难度小,招聘开发人员容易,团队新成员容易快速上手工程代码的编写。
S3:在加载完毕后,lua代码去请求服务器,查询该产品id下是否有新的版本存在。
S4:如果有新的版本存在,则把新版本的补丁下载到本地磁盘中。
S5:补丁文件和老版本文件通过算法生成出最新的DUI内核。
S6:解压最新的DUI内核,删除磁盘空间中老版本的DUI内核。
S7:使用静态编译型语言代码加载最新的dui内核中的动态脚本语言(lua代码)和资源文件。
S8:启动sdk中的Wakeup,TTS(Text To Speech从文本到语音),ASR(AutomaticSpeech Recognition语音识别)等常用语音功能,运行软件。同时启动一个websocket客户端,保持与服务端的长链接,用来接收服务器的推送消息。
S9:在未来的某个时候,突然发现该sdk版本有bug,管理员可以把最新的解决了该bug的DUI内核上传到DUI平台,并选择最新的DUI内核,发布版本。
S10:发布版本成功后,客户端会由步骤八中的长链接接收到服务端推送给客户端的消息,告知有新的补丁,sdk就可以重新跳至步骤四,把新的补丁下载下来。
通过本解决方案可以让开发者快速修复消费者手上已经在使用的sdk的bug,并且用户无感知。相比重新发布应用,下载安装应用,甚至是rom,节约了很大的时间成本。
本发明的更新方法相对于现有技术中的方法的优点具体还体现在以下几个方面:
传统技术无法跨平台,例如,阿里hotfix只能用于android和ios平台,微信tinker只能用于android平台。这些技术都只是针对某一个或某两个平台做的热更新技术,与平台耦合性大,并没考虑其他平台,比如windows,linux等。
可靠性和兼容性差:随着android版本的变更,可能导致阿里hotfix和微信tinker的不可用。阿里hotfix是通过在运行时在Native修改Filed指针的方式,实现方法的替换,他是一种native的解决方案,如果android版本更新或者手机厂商修改rom导致系统的native代码有改动,那么阿里hotfix的方案就会失败。微信tinker是通过替换dex的方案来实现热更新,这种方式依赖于android系统的版本,一旦android系统之后的版本在dex方面的处理有修改,就会造成热更新的失败。而本发明加载动态脚本语言的代码是严格遵循,并且本发明的静态编译型语言部分是适配各平台的,严格使用各平台对外开放的api的,厂商的rom的改变不会对厂商自身对外开放的api做改变的,所以本发明的可靠性和兼容性会比较好。
性能损耗:微信tinker替换dex的方案,对于补丁DEX来说,应用启动时虚拟机会进行dexopt操作,将patch.dex文件转换成odex文件,这个过程本身非常耗时,应用启动时间会变长,甚至造成ANR(Application Not Responding应用无法响应)和crash。阿里hotfix因为用了native的hook方式,也会对应用造成性能损耗。而本发明的补丁替换方案不需要hook操作系统的代码,不会对系统底层的运行机制造成影响,仅仅只是应用层面脚本代码和资源的替换,所以不会造成性能损耗。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作合并,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
如图6所示,本发明的实施例还提供一种用于软件开发包的更新系统600,其中,所述软件开发包基于静态编译型语言代码和初始平台内核生成,所述初始平台内核至少包括动态脚本语言代码和资源文件,所述系统600包括:
文件下载程序模块610,用于当检测到需要进行软件开发包更新时,自服务器端下载所述软件开发包的补丁文件;
内核生成程序模块620,用于基于所述补丁文件和所述初始平台内核生成新的平台内核;
更新程序模块630,用于基于所述静态编译型语言代码加载所述新的平台内核的动态脚本语言代码和资源文件以完成软件开发包的更新。
本发明实施例中使用动态脚本语言,实现无性能损耗,且不重启就生效更新。因为动态脚本语言可以无需编译,直接由解释器翻译为可以运行的机器语言,可以动态加载,sdk的大部分逻辑可以放在动态脚本语言中,从而实现动态替换脚本,达到热更新sdk的效果。
在一些实施例中,所述资源文件包括声学模型和/或文本转语音模型。
在一些实施例中,在完成对所述软件开发包的更新之后还包括:
建立与服务器端之间的长链接,用于当所述新的平台内核再次发生版本变更后接收服务器端发来的更新消息。
在一些实施例中,建立与服务器端之间的长链接包括:启动一个websocket客户端以保持与服务器端之间的长链接。
在一些实施例中,在完成对所述软件开发包的更新之后还包括:启动所述软件开发包的语音功能。
在一些实施例中,本发明实施例提供一种非易失性计算机可读存储介质,所述存储介质中存储有一个或多个包括执行指令的程序,所述执行指令能够被电子设备(包括但不限于计算机,服务器,或者网络设备等)读取并执行,以用于执行本发明上述任一项用于软件开发包的更新方法。
在一些实施例中,本发明实施例还提供一种计算机程序产品,所述计算机程序产品包括存储在非易失性计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,使所述计算机执行上述任一项用于软件开发包的更新方法。
在一些实施例中,本发明实施例还提供一种电子设备,其包括:至少一个处理器,以及与所述至少一个处理器通信连接的存储器,其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行用于软件开发包的更新方法。
在一些实施例中,本发明实施例还提供一种存储介质,其上存储有计算机程序,其特征在于,该程序被处理器处理时执行用于软件开发包的更新方法。
上述本发明实施例的用于软件开发包的更新系统可用于执行本发明实施例的用于软件开发包的更新方法,并相应的达到上述本发明实施例的实现用于软件开发包的更新方法所达到的技术效果,这里不再赘述。本发明实施例中可以通过硬件处理器(hardwareprocessor)来实现相关功能模块。
图7是本申请另一实施例提供的执行用于软件开发包的更新方法的电子设备的硬件结构示意图,如图7所示,该设备包括:
一个或多个处理器710以及存储器720,图7中以一个处理器710为例。
执行用于软件开发包的更新方法的设备还可以包括:输入装置730和输出装置740。
处理器710、存储器720、输入装置730和输出装置740可以通过总线或者其他方式连接,图7中以通过总线连接为例。
存储器720作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,如本申请实施例中的用于软件开发包的更新方法对应的程序指令/模块。处理器710通过运行存储在存储器720中的非易失性软件程序、指令以及模块,从而执行服务器的各种功能应用以及数据处理,即实现上述方法实施例用于软件开发包的更新方法。
存储器720可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据用于软件开发包的更新装置的使用所创建的数据等。此外,存储器720可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器720可选包括相对于处理器710远程设置的存储器,这些远程存储器可以通过网络连接至用于软件开发包的更新装置。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
输入装置730可接收输入的数字或字符信息,以及产生与用于软件开发包的更新装置的用户设置以及功能控制有关的信号。输出装置740可包括显示屏等显示设备。
所述一个或者多个模块存储在所述存储器720中,当被所述一个或者多个处理器710执行时,执行上述任意方法实施例中的用于软件开发包的更新方法。
上述产品可执行本申请实施例所提供的方法,具备执行方法相应的功能模块和有益效果。未在本实施例中详尽描述的技术细节,可参见本申请实施例所提供的方法。
本申请实施例的电子设备以多种形式存在,包括但不限于:
(1)移动通信设备:这类设备的特点是具备移动通信功能,并且以提供话音、数据通信为主要目标。这类终端包括:智能手机(例如iPhone)、多媒体手机、功能性手机,以及低端手机等。
(2)超移动个人计算机设备:这类设备属于个人计算机的范畴,有计算和处理功能,一般也具备移动上网特性。这类终端包括:PDA、MID和UMPC设备等,例如iPad。
(3)便携式娱乐设备:这类设备可以显示和播放多媒体内容。该类设备包括:音频、视频播放器(例如iPod),掌上游戏机,电子书,以及智能玩具和便携式车载导航设备。
(4)服务器:提供计算服务的设备,服务器的构成包括处理器、硬盘、内存、系统总线等,服务器和通用的计算机架构类似,但是由于需要提供高可靠的服务,因此在处理能力、稳定性、可靠性、安全性、可扩展性、可管理性等方面要求较高。
(5)其他具有数据交互功能的电子装置。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。