应用程序升级方法及装置
技术领域
本公开涉及软件技术领域,尤其涉及一种应用程序升级方法及装置。
背景技术
以安卓(Andriod)系统为例,作为移动设备的操作系统,安卓系统以其开源的特性,成为了主流的操作系统之一。由于单个内容开发商的推广能力有限,各内容开发商开发的各种游戏类、服务类等应用模块,通过渠道提供商提供的各接入平台生成应用程序后进行推广,用户通过接入平台进行各种应用程序的安装、下载以及升级服务。渠道提供商发布自己的渠道模块SDK(Software Development Kit,软件开发包)供内容开发商下载使用。内容开发者需要根据渠道模块提供商提供的SDK,为应用模块嵌入用户账户系统、付费系统、广告系统等功能,从而实现渠道开发商和内容开发商的收益共赢。一个渠道提供商的接入平台需要进行升级时,将影响到所有接入的应用程序,而安卓系统在软件升级过程中通常需要整体重新进行安装更新,使得用户需要花费大量时间和大量资源进行更新,而最后仅仅是增加了一部分很少的内容,资源浪费多,用户体验差。
发明内容
有鉴于此,本公开提出了一种应用程序升级方法及装置,以解决安卓系统应用程序接入平台中,应用程序升级时资源浪费的问题。
根据本公开的一方面,提供了一种应用程序升级方法,该方法应用于统一接入系统中,所述统一接入系统用于将应用模块接入渠道模块,该方法包括:
在启动应用程序后的用户进程中,判断是否有应用程序的升级文件,其中,所述应用程序集成有应用模块、渠道模块和代理组件;
在有应用程序的升级文件的情况下,调用所述应用程序中的代理组件,所述代理组件为已经通过系统验证的组件;
根据所述代理组件和所述升级文件,更新所述升级文件对应的应用程序中的目标组件,得到升级后的应用程序。
在一种可能的实现方式中,判断是否有应用程序的升级文件,包括:
通过检索升级文件目录判断是否有应用程序的升级文件,或
通过升级标识信息判断是否有应用程序的升级文件。
在一种可能的实现方式中,所述代理组件注册在所述应用程序的全局配置文件中。
在一种可能的实现方式中,根据所述代理组件和所述升级文件,更新所述升级文件对应的应用程序中的目标组件,得到升级后的应用程序,包括:
利用代理组件替换所述升级文件对应的应用程序中的目标组件;
在系统进程中,利用所述代理组件进行系统验证;
返回用户进程,利用所述目标组件替换所述代理组件;
根据所述升级文件更新所述目标组件。
在一种可能的实现方式中,根据所述升级文件更新所述目标组件,包括:
根据所述升级文件,向所述目标组件注入升级后的主题、资源和上下文。
在一种可能的实现方式中,所述方法还包括:
将系统中的资源以固定标识顺序进行统一标识,得到统一资源文件;
根据所述代理组件和所述升级文件,更新所述升级文件对应的应用程序中的目标组件,包括:
根据所述代理组件、所述升级文件和所述统一资源文件,更新所述升级文件对应的应用程序中的目标组件。
在一种可能的实现方式中,所述方法还包括:
获取升级代码的地址信息;
根据所述代理组件和所述升级文件,更新所述升级文件对应的应用程序中的目标组件,包括:
根据所述代理组件、所述升级文件和所述升级代码的地址信息,更新所述升级文件对应的应用程序中的目标组件。
根据本公开的另一方面,提供了一种应用程序升级装置,应用于统一接入系统中,所述统一接入系统用于将应用模块接入渠道模块,该装置包括:
判断模块,用于在启动应用程序后的用户进程中,判断是否有应用程序的升级文件,其中,所述应用程序集成有应用模块、渠道模块和代理组件;
调用模块,用于在有应用程序的升级文件的情况下,调用所述应用程序中的代理组件,所述代理组件为已经通过系统验证的组件;
更新模块,用于根据所述代理组件和所述升级文件,更新所述升级文件对应的应用程序中的目标组件,得到升级后的应用程序。
在一种可能的实现方式中,所述判断模块,包括:
第一判断子模块,用于通过检索升级文件目录判断是否有应用程序的升级文件,或
第二判断子模块,用于通过升级标识信息判断是否有应用程序的升级文件。
在一种可能的实现方式中,所述代理组件注册在所述应用程序的全局配置文件中。
在一种可能的实现方式中,所述更新模块,包括:
第一替换子模块,用于利用代理组件替换所述升级文件对应的应用程序中的目标组件;
验证子模块,用于在系统进程中,利用所述代理组件进行系统验证;
第二替换子模块,用于返回用户进程,利用所述目标组件替换所述代理组件;
第一更新子模块,用于根据所述升级文件更新所述目标组件。
在一种可能的实现方式中,所述更新子模块,包括:
注入子模块,用于根据所述升级文件,向所述目标组件注入升级后的主题、资源和上下文。
在一种可能的实现方式中,该装置还包括:
统一资源文件获取模块,用于将系统中的资源以固定标识顺序进行统一标识,得到统一资源文件;
所述更新模块,包括:
第二更新子模块,用于根据所述代理组件、所述升级文件和所述统一资源文件,更新所述升级文件对应的应用程序中的目标组件。
在一种可能的实现方式中,该装置还包括:
升级代码获取模块,用于获取升级代码的地址信息;
所述更新模块,包括:
第三更新子模块,用于根据所述代理组件、所述升级文件和所述升级代码的地址信息,更新所述升级文件对应的应用程序中的目标组件。
根据本公开的另一方面,提供了一种应用程序升级装置,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为执行上述应用程序升级方法。
根据本公开的另一方面,提供了一种非易失性计算机可读存储介质,其上存储有计算机程序指令,所述计算机程序指令被处理器执行时实现上述应用程序升级方法。
在公开在将应用模块、渠道模块打包形成的应用程序中,设置已经通过了系统验证的代理组件,并在有应用程序的升级文件时,利用代理组件达到应用程序无侵入的免安装升级,当统一接入系统中的各渠道模块需要升级时,不再将接入需要升级的接入渠道模块的应用模块进行重新打包,从而实现了统一接入系统的动态免安装升级。
根据下面参考附图对示例性实施例的详细说明,本公开的其它特征及方面将变得清楚。
附图说明
包含在说明书中并且构成说明书的一部分的附图与说明书一起示出了本公开的示例性实施例、特征和方面,并且用于解释本公开的原理。
图1示出根据本公开一实施例的应用程序升级方法的流程图;
图2示出根据本公开一实施例的应用程序升级方法的流程图;
图3示出根据本公开一实施例的应用程序升级方法的流程图;
图4示出根据本公开一实施例的应用程序升级方法的流程图;
图5示出根据本公开一实施例的应用程序升级方法的流程图;
图6示出根据本公开一实施例的安卓系统资源查找的流程图;
图7示出根据本公开一实施例的安卓系统中资源管理框架根据顺序查找资源的流程图;
图8示出根据本公开一实施例的组件启动流程图;
图9示出传统的多个应用模块接入多个渠道模块的接入示意图;
图10示出根据本公开一实施例的多个应用模块接入多个渠道模块的接入示意图;
图11示出传统的应用程序升级流程图;
图12示出根据本公开一实施例的应用程序升级流程图;
图13示出根据本公开一实施例的应用程序升级装置的框图;
图14示出根据本公开一实施例的应用程序升级装置的框图;
图15是根据一示例性实施例示出的一种用于应用程序升级装置的框图。
具体实施方式
以下将参考附图详细说明本公开的各种示例性实施例、特征和方面。附图中相同的附图标记表示功能相同或相似的元件。尽管在附图中示出了实施例的各种方面,但是除非特别指出,不必按比例绘制附图。
在这里专用的词“示例性”意为“用作例子、实施例或说明性”。这里作为“示例性”所说明的任何实施例不必解释为优于或好于其它实施例。
另外,为了更好的说明本公开,在下文的具体实施方式中给出了众多的具体细节。本领域技术人员应当理解,没有某些具体细节,本公开同样可以实施。在一些实例中,对于本领域技术人员熟知的方法、手段、元件和电路未作详细描述,以便于凸显本公开的主旨。
本公开提供的应用程序升级方法,可应用于安卓系统。安卓系统上的开发者套件简称为SDK(Software Development Kit,软件开发工具包),安卓系统应用程序的软件安装包格式为APK格式。其中,SDK是一些被软件工程师用于为特定的软件包、软件框架、硬件平台、操作系统等创建应用软件的开发工具的集合。安卓系统中的应用程序通过将APK文件直接传到Android模拟器或Android手机中执行即可安装。APK文件被SDK编译的工程打包成一个安装程序文件,格式为.apk。
APK的源代码包括:Java源代码、Android Mainfest.xml文件、资源文件。其中,Java源代码为系统运行的可执行文件。Android Mainfest.xml文件是APK的全局配置文件,位于APK的根目录下,描述了APK中的全局数据,包括组件、组件各自的实现类、各种能被处理的数据和启动位置等重要信息。资源文件包括动画文件、图像资源、布局文件、特征值、颜色值、尺寸值、字符串的值、样式对象等供APK调用的资源。
APK组件包括activities活动组件和services服务组件。在安卓的应用程序中,Activity是Android程序与用户交互的窗口,通常是一个单独的屏幕,屏幕上面可以显示一些控件,也可以监听并处理用户的事件做出响应,主要为保持各界面的状态做持久化的事务,妥善管理生命周期以及一些跳转逻辑。而Service在后台服务于Activity,封装有一个完整的功能逻辑实现,接受上层指令,完成相关的事务。Service是一段长生命周期的,没有用户界面的程序,可以用来开发如监控类程序。
APK的编译过程包括:1、通过Java编译器将Java源代码编译成Class类文件,Class类文件是Java编译后的目标文件,只是编译过程中的中间目标文件,需要编译成Dex(安卓系统中可执行的文件类型)文件后才能运行。将Class文件处理为Dex文件。2、使用AAPT工具(Android Asset Packaging Tool,安卓打包工具)将Dex字节码放到APK的根目录。使用AAPT工具将Android Mainfest.xml文件进行处理,并且放到APK的根目录。3、使用AAPT工具将资源文件进行处理,并且放到APK的根目录。4、最后将以上文件打包得到一个完整的APK。当一个APK中的组件或资源文件需要升级时,需要重新经历上述打包过程,生成新的APK后,升级后的APK才能被安装使用。
图1示出根据本公开一实施例的应用程序升级方法的流程图,所述方法应用于统一接入系统中,所述统一接入系统用于将应用模块接入渠道模块,如图1所示,所述方法包括:
步骤S10,在启动应用程序后的用户进程中,判断是否有应用程序的升级文件,其中,所述应用程序集成有应用模块、渠道模块和代理组件。
在一种可能的实现方式中,将内容开发商提供的游戏类、服务类等应用模块、渠道提供商提供的渠道模块SDK,和代理组件进行打包后,得到应用程序。统一接入系统可以是渠道提供商的接入平台,统一接入系统中可包括多个应用程序,用于将多个应用模块接入多个渠道提供商的渠道模块中。在一种可能的实现方式中,在每个应用程序中,打包一个应用模块和一个渠道模块以及至少一个代理组件。应用程序的升级文件,在实际的应用中,可以用于升级应用程序中的渠道模块。
图8示出根据本公开一实施例的组件启动流程图。如图8所示,组件启动后,先进APP进程(用户进程),然后转移至system-service进程(系统进程),完成系统验证后,再返回用户进程启动。本实施例在启动应用程序后,在启动组件的控制权转移到系统进程之前,首先判断是否有应用程序的升级文件。可以在应用程序中设置升级标识、或设置升级文件目录,应用程序启动后,通过升级标识或升级文件目录判断是否有应用程序的升级文件。如果没有应用程序的升级文件,则正常启动。
步骤S20,在有应用程序的升级文件的情况下,调用所述应用程序中的代理组件,所述代理组件为已经通过系统验证的组件。
在一种可能的实现方式中,当判断有应用程序的升级文件时,根据升级文件确定需要进行更新的目标组件后,调用代理组件,利用代理组件代替目标组件完成系统验证。
步骤S30,根据所述代理组件和所述升级文件,更新所述升级文件对应的应用程序中的目标组件,得到升级后的应用程序。
在一种可能的实现方式中,代理组件完成系统验证后,再利用目标组件替换代理组件,并根据升级文件更新目标组件,最终得到升级后的应用程序。
在本实施例中,在将应用模块、渠道模块打包形成的应用程序中,设置已经通过了系统验证的代理组件,并在有应用程序的升级文件时,利用代理组件达到应用程序无侵入的免安装升级,不再需要将接入渠道模块和所有应用模块进行重新打包,从而实现了统一接入系统的动态免安装升级。
图2示出根据本公开另一实施例的应用程序升级方法的流程图,如图2所示,该方法中的步骤S10包括:
步骤S11,通过检索升级文件目录判断是否有应用程序的升级文件。
在一种可能的实现方式中,在应用程序的APK中,设置升级文件目录,当有升级文件时,将升级文件放置于升级文件目录中。当没有升级文件时,升级文件目录为空。应用程序首先检索升级文件目录,发现其中有升级文件时,判断为有升级文件。
或者,该方法中的步骤S10包括:步骤S12,通过升级标识信息判断是否有应用程序的升级文件。
在一种可能的实现方式中,在应用程序的APK中设置一个升级标识信息,升级标识信息用来标识是否有升级文件,例如利用简单的二进制代码,0代表无升级文件,1代表有升级文件。应用程序通过检查升级标识信息,判断是否有升级文件。
在本实施例中,在应用程序中设置升级文件目录或升级标识信息,用于在启动应用程序中判断是否有升级文件。升级文件判断的实现方式简单、可靠。
图3示出根据本公开另一实施例的应用程序升级方法的流程图,如图3所示,该方法中的步骤S30包括:
步骤S31,利用代理组件替换所述升级文件对应的应用程序中的目标组件;
步骤S32,在系统进程中,利用所述代理组件进行系统验证;
步骤S33,返回用户进程,利用所述目标组件替换所述代理组件;
步骤S34,根据所述升级文件更新所述目标组件。
在一种可能的实现方式中,安卓系统应用程序中的组件,在应用程序的全局配置文件(Android Mainfest.xml文件)中进行注册,在应用程序启动后由用户进程进入系统进程,组件通过系统进程的验证后正常启动。
当判断有升级文件时,且所述升级文件需要升级应用程序中的组件时,在启动组件的控制权转移到系统进程之前,利用代理组件替换升级文件对应的目标组件。代理组件可在应用程序的开发阶段,就打包在APK中。通过应用程序的Dex Class Loader类加载器,完成代理组件的加载。
代理组件是已经通过了系统进程验证的组件。代理组件中的内容可以为空。
在一种可能的实现方式中,所述代理组件注册在全局配置文件中。
在一种可能的实现方式中,安卓系统的系统进程管理(Android ActivityManager Service,AMS)的一个重要的职责就是进行应用程序进程的管理。系统进程负责对组件进行生命周期以及堆栈管理、权限校验和真实性校验。代理组件可在APK的打包过程中就注册在Android Mainfest.xml文件中,由此,代理组件可以代替需要升级的目标组件完成系统进程的验证。
在一种可能的实现方式中,Android instrumentation是Android系统里面的一套控制方法或者“钩子”。这些钩子可以在正常的生命周期(正常是由操作系统控制的)之外控制Android控件的运行,同时可以控制Android如何加载应用程序。Instrumentation还负责管理应用程序中组件的生命周期。组件的生命周期包括组件的启动、运行、暂停、停止、删除、重新启动等。代理组件在返回用户进程后,在Instrumentation中New Activity(重新启动)方法中,利用目标组件再替换所述代理组件。此时,目标组件已经通过了系统进程验证,目标组件已经有了系统的生命周期的回调。
在一种可能的实现方式中,虽然目标组件有了系统的生命周期的回调,但目标组件中的内容还都是代理组件的。因此,需要根据升级文件更新目标组件,将升级文件中的相关内容注入目标组件中。完成目标组件的更新后,得到升级后的应用程序。
在一种可能的实现方式中,根据所述升级文件更新所述目标组件,包括:根据所述升级文件,向所述目标组件注入升级后的主题、资源和上下文。例如利用hook的方式,将升级文件中的主题theme、资源resource和上下文context注入目标组件中,完成应用程序的升级。
在本实施例中,通过应用程序中已经通过系统进程验证的代理组件,代替需要进行升级的目标组件,完成系统进程的验证过程。在返回用户进程后,再将代理组件替换为目标组件,并根据升级文件完成目标组件的升级。可以使需要升级的目标组件绕过系统进程的验证过程,不用重新进行应用程序的APK打包过程,真正实现应用程序无侵入的免安装升级,提高了安卓应用程序的系统资源使用率,以及提高了应用程序的转化率。可以在不嵌入应用程序打包过程的前提下,实现动态升级,不但能实现传统类级别的升级,也可以实现带资源的APK级别的升级。本公开可以实现应用程序根据多套升级方案,按需挑选进行升级,还可以做到SDK的按需后台加载或延迟懒加载,优化启动速度。
图4示出根据本公开一实施例的应用程序升级方法的流程图,如图4所示,所述方法还包括:
步骤S40,将系统中的资源以固定标识顺序进行统一标识,得到统一资源文件。
上述实例中的步骤S30,包括:
根据所述代理组件、所述升级文件和所述统一资源文件,更新所述升级文件对应的应用程序中的目标组件。
在一种可能的实现方式中,Android应用程序会配置很多资源,用来适配不同密度、大小和方向的屏幕,以及适配不同的国家、地区和语言等等。这些资源是在APK打包期间整合到APP中的,运行时由AssetManager资源管理框架和Resources资源两个类来实现资源的查找。图6示出根据本公开一实施例的安卓系统资源查找的流程图。如图6所示,应用程序组件(Application Component)调用资源,可以通过AssetManager和Resources进行查找。其中,Resources类可以根据资源的标识Resources ID来查找资源,而AssetManager类根据文件名来查找资源。Resources类是先根据ID来找到资源文件名称File Name,然后再将该文件名称交给AssetManager类来打开对应的文件的。这个资源查找过程对于APP开发过程是完全透明的。
应用程序打包过程中将资源ID与resource的对应关系编译在resources.arsc文件中,在R文件中进行声明。R文件中默认有多个静态内部类,每个静态内部类分别对应一种资源,且每个静态内部类中的静态常量分别定义为一条资源标识符。AssetManger根据resources.arsc中的映射来找到相应的资源,并且AssetManger支持从多个索引表中顺序查找,例如apk引用到的系统资源与自有资源就存在于两个不同的索引表中,如果两个索引表中的ID一致就实现了资源的查找替换,这就是资源加载的基本原理Overlay Package叠加包机制。图7示出根据本公开一实施例的安卓系统中资源管理框架根据顺序查找资源的流程图。如图7所示,Asset Manger根据顺序查找从APK3中的resources.arsc检索ID对应的资源。
为使得升级文件中的资源同时适用于所有的应用程序,而不是随着应用程序的打包过程随时变换,需要提前编译出升级文件的resources.arsc文件,做到升级文件的ID统一。而资源ID顺序编号、升级文件的ID与各应用程序的资源ID会出现冲突。因此,本实施例将所有的资源以固定标识顺序进行统一标识,得到统一资源文件。本实施通过修改AAPT打包工具,打包后的资源编码也使用统一的资源编码。
将系统中的资源以固定标识顺序进行统一标识,包括按照文字、字母、数字等各种组合形式进行顺序编号。例如按照ABCDEabcde,其中ABCDE可以为产品信息、公司信息等,后面的abcde为数字的顺序编号。例如公司YK提供的资源,可以固定标识顺序标识为YK000001、YK000002、YK000003、YK000004、YK00005,后续增加数字部分的编号即可。
当使用固定标识顺序对系统中的资源进行统一标识,得到统一资源文件后,在应用程序的生成过程中,以及升级文件的制作过程中,都可以方便的直接使用统一的资源标识,从而更加高效的完成应用程序的升级。
根据统一资源文件以及根据所述升级文件更新所述目标组件,得到升级后的应用程序,可以动态的任意加载各种资源。还可以根据不同的用户实现不同的资源加载,例如,应用程序为不同的用户调用不同的皮肤资源、不同的字体资源以及不同的图像资源,从而实现应用程序的动态免安装换肤,同一个应用程序千人千面的效果。
图5示出根据本公开一实施例的应用程序升级方法的流程图,如图5所示,所述方法还包括:
步骤S50,获取升级代码的地址信息。
上述实施例中的步骤S30,包括:
根据所述代理组件、所述升级文件和所述升级代码的地址信息,更新所述升级文件对应的应用程序中的目标组件。
在一种可能的实现方式中,升级文件中可能包括升级代码,升级代码是APK中需要进行升级的源代码。通常将升级代码存放一个文件中,当应用程序中的源代码需要升级时,升级文件根据升级代码的地址信息,即存放升级代码的文件地址,即可获取到升级代码,完成旧的代码的替换。可以理解的是,上述实施例中的步骤S50,包括:根据升级代码的地址信息,以及根据所述升级文件更新所述目标组件,得到升级后的应用程序。
应用示例:
以下结合示例性应用场景给出应用示例,应用示例仅为了便于理解,不限制本公开实施例。
图9示出传统的多个应用模块接入多个渠道模块的接入示意图。如图9所述,多个应用模块(游戏)接入多个渠道模块(支付平台)时,游戏需要根据所需要接入的支付平台进行打包。当一个支付平台升级时,所有接入的游戏均需要重新被打包。
图10示出根据本公开一实施例的多个应用模块接入多个渠道模块的接入示意图。如图10所示,利用了本公开中的应用程序升级方法后,多个游戏接入多个支付平台时,通过动态统一接口完成。图中的needle框架是应用了本公开提供的升级方法。其中,动态统一接口中,利用needle框架将每个游戏与需要接入的一个支付平台SDK打包后,生成一个应用程序。当支付平台需要升级时,不需要再将游戏和支付平台SDK重新打包。应用程序的具体升级方法如下:
图11示出传统的应用程序升级流程图,如图11所示,在传统的应用程序的升级流程中,应用程序的APK开发完成后,进行APK的安装和运行过程,当需要进行APK升级时,需要返回APK开发阶段,重新打包后重新安装并运行。
图12示出根据本公开一实施例的应用程序升级流程图,如图12所示,图中的needle框架是应用了本公开提供的升级方法。在needle框架下开发完成的APK,在安装运行后,需要进行应用程序的升级时,只需要在needle框架下完成APK的升级后,直接运行就可以完成应用程序的升级。
以Activity组件的升级为例。本实施例利用Activity组件的插件化来完成应用程序的升级。为做到无侵入的实现Activity的动态加载,本实施在用户进程中进行改进,主要包括加载和启动两个大的步骤。
一、加载。Activity从加载的角度讲与普通的类是一样的,将activity所在的插件apk注入到应用程序(以下简称宿主)的DexClassLoader中,借助DexClassLoader完成插件类的加载。
二、启动。Android有一个限制,所有的组件必须AndroidManifest.xml中显示声明,为了实现插件的动态化,必须绕过这个限制。通过显式声明的代理组件StubActivity,注册在宿主的AndroidManifest.xml里面,让代理组件Activity进入AMS进程接受检验;最后在返回用户进程时换成目标组件,目标组件是真正需要启动的Activity,于是成功地欺骗了AMS进程。具体的实现步骤包括:
(1)替身绕过AMS校验,在启动Activity的控制权转移到AMS进程之前,临时把目标组件TargetActivity替换成代理StubActivity。
通过这个替换过程,AMS进程system_server端收到Binder驱动的消息,开始执行ActivityManagerService里面真正的startActivity方法;这时候AMS看到的intent参数里面的组件已经是StubActivity了,因此可以成功绕过检查。
(2)替身的恢复为真身,上面activity启动简图中的第三步,回到用户进程,在Instrumentation中的NewActivity方法中恢复真身。
通过以上两步,目标组件Activity得已启动,并且有了系统的生命周期回调。但目标组件的theme、resource、context等都还是代理组件的,所以第三部通过hook的方式注入。
至此实现了无侵入启动插件中的Activity组件,其它组件,例如services组件也可以用上述的方式实现。
图13示出根据本公开一实施例的应用程序升级装置的框图,如图13所示,该装置包括:
判断模块41,用于在启动应用程序后的用户进程中,判断是否有应用程序的升级文件,其中,所述应用程序集成有应用模块、渠道模块和代理组件;
调用模块42,用于在有应用程序的升级文件的情况下,调用所述应用程序中的代理组件,所述代理组件为已经通过系统验证的组件;
更新模块43,用于根据所述代理组件和所述升级文件,更新所述升级文件对应的应用程序中的目标组件,得到升级后的应用程序。
图14示出根据本公开一实施例的应用程序升级装置的框图,如图14所示,在一种可能的实现方式中,所述判断模块41,包括:
第一判断子模块411,用于通过检索升级文件目录判断是否有应用程序的升级文件,或
第二判断子模块412,用于通过升级标识信息判断是否有应用程序的升级文件。
在一种可能的实现方式中,所述代理组件注册在所述应用程序的全局配置文件中。
在一种可能的实现方式中,所述更新模块43,包括:
第一替换子模块431,用于利用代理组件替换所述升级文件对应的应用程序中的目标组件;
验证子模块432,用于在系统进程中,利用所述代理组件进行系统验证;
第二替换子模块433,用于返回用户进程,利用所述目标组件替换所述代理组件;
第一更新子模块434,用于根据所述升级文件更新所述目标组件。
在一种可能的实现方式中,所述更新子模块43,包括:
注入子模块435,用于根据所述升级文件,向所述目标组件注入升级后的主题、资源和上下文。
在一种可能的实现方式中,该装置还包括:
统一资源文件获取模块44,用于将系统中的资源以固定标识顺序进行统一标识,得到统一资源文件;
所述更新模块43,包括:
第二更新子模块436,用于根据所述代理组件、所述升级文件和所述统一资源文件,更新所述升级文件对应的应用程序中的目标组件。
在一种可能的实现方式中,该装置还包括:
升级代码获取模块45,用于获取升级代码的地址信息;
所述更新模块43,包括:
第三更新子模块437,用于根据所述代理组件、所述升级文件和所述升级代码的地址信息,更新所述升级文件对应的应用程序中的目标组件。
图15是根据一示例性实施例示出的一种用于应用程序升级装置1900的框图。例如,装置1900可以被提供为一服务器。参照图15,装置1900包括处理组件1922,其进一步包括一个或多个处理器,以及由存储器1932所代表的存储器资源,用于存储可由处理组件1922的执行的指令,例如应用程序。存储器1932中存储的应用程序可以包括一个或一个以上的每一个对应于一组指令的模块。此外,处理组件1922被配置为执行指令,以执行上述方法。
装置1900还可以包括一个电源组件1926被配置为执行装置1900的电源管理,一个有线或无线网络接口1950被配置为将装置1900连接到网络,和一个输入输出(I/O)接口1958。装置1900可以操作基于存储在存储器1932的操作系统,例如Windows ServerTM,MacOS XTM,UnixTM,LinuxTM,FreeBSDTM或类似。
在示例性实施例中,还提供了一种非易失性计算机可读存储介质,例如包括计算机程序指令的存储器1932,上述计算机程序指令可由装置1900的处理组件1922执行以完成上述方法。
本公开可以是系统、方法和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于使处理器实现本公开的各个方面的计算机可读程序指令。
计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是――但不限于――电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式压缩盘只读存储器(CD-ROM)、数字多功能盘(DVD)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。
这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。
用于执行本公开操作的计算机程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言—诸如Smalltalk、C++等,以及常规的过程式编程语言—诸如“C”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA),该电子电路可以执行计算机可读程序指令,从而实现本公开的各个方面。
这里参照根据本公开实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本公开的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。
这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。
也可以把计算机可读程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其它可编程数据处理装置、或其它设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。
附图中的流程图和框图显示了根据本公开的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,所述模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
以上已经描述了本公开的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。