CN113302585A - 加速应用和子包安装 - Google Patents

加速应用和子包安装 Download PDF

Info

Publication number
CN113302585A
CN113302585A CN201980088644.1A CN201980088644A CN113302585A CN 113302585 A CN113302585 A CN 113302585A CN 201980088644 A CN201980088644 A CN 201980088644A CN 113302585 A CN113302585 A CN 113302585A
Authority
CN
China
Prior art keywords
application
computing device
patch
elements
version
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
Application number
CN201980088644.1A
Other languages
English (en)
Inventor
马修·帕特森
高黎远
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Google LLC
Original Assignee
Google LLC
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Google LLC filed Critical Google LLC
Publication of CN113302585A publication Critical patent/CN113302585A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/61Installation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates

Abstract

在一些示例中,一种方法包括从应用提供商下载要应用于第一应用元素的补丁和不包括要在应用安装期间重复使用的一个或多个应用元素的应用的剥离版本,解压缩第一应用元素以生成第一应用元素的解压缩版本,以及解压缩补丁以生成补丁解压缩版本。该方法还可以包括将补丁的解压缩版本应用到第一应用元素的解压缩版本以生成补丁应用元素,压缩补丁应用元素以生成压缩的补丁应用元素,以及使用压缩的补丁应用元素、应用的剥离版本,以及除第一应用元素之外的一个或多个应用元素来安装应用。

Description

加速应用和子包安装
背景技术
计算设备可以执行各种功能,诸如执行应用、接收用户输入和输出信息以供显示。例如,计算设备可以执行应用,诸如电子邮件客户端、旅行助手、消息客户端等。软件开发人员可以用编译成机器可读代码的人类可读源代码编写此类应用。在某些情况下,机器可读代码可以被组织成离散的可执行组件,诸如面向对象设计中的编译类。应用可以包括实现各种功能的一个或多个可执行组件。在一些分布式环境中,用户计算设备(例如,智能手机)可以使用媒体商店应用来搜索和安装由远程计算系统提供的应用。通常,当用户选择媒体商店应用中的应用以安装在用户计算设备上时,远程计算系统发送包括所有可执行组件的单个文件以执行应用的所有功能,而不管用户是否实际使用所有功能。随着应用大小的增长,下载和安装此类应用所需的时间量可能会增长,从而需要用户等待更多的时间量来安装和执行应用。更多的网络资源也可能会用在将应用传输到用户计算设备中。
发明内容
一般而言,本公开的技术可以使计算设备能够通过利用已经安装在计算设备上的应用的内容来更有效地下载应用,包括被分成具有离散功能集的各种子包的应用。当计算设备从应用提供商服务器请求要安装在计算设备上的应用时,应用提供商服务器不一定将应用的每一个应用元素或应用的特定应用子包发送到计算设备以安装该应用或应用子包。相反,应用提供商服务器可以确定是否可以从已经安装在计算设备上的其他应用或应用子包获得该应用或应用子包的一个或多个应用元素。因此可以减少网络资源的使用。在某些情况下,需要更新或“打补丁”这些应用元素,以便正在安装的应用使用已存储在该设备上的那些应用元素。但是,如果那些应用元素以压缩格式存储,则可能难以将那些应用元素更新或“打补丁”成正在安装的应用所需的版本。当前的压缩方案倾向于将应用元素内的文件的小的局部改变级联成大的全局改变,产生比应用的大小更大的应用元素的补丁版本。在具有有限存储和存储器的设备(诸如移动计算设备)中,应用大小越大越不利。因此,为了避免创建大尺寸的补丁应用,可以将来自已经安装在设备上的应用的、可以重复使用的应用元素限制到未压缩的应用元素。这种限制可能会限制可以重复使用的应用元素的数量,因为大多数应用元素(诸如库)以压缩格式被存储。反过来,这限制了下载上述应用的(更网络有效的)方法的实现。
本公开的技术可以使得能够重复使用需要打补丁的压缩应用元素,无需将小的局部改变级联成大的全局改变。因此,所得到的补丁压缩应用元素可能比如果使用传统技术对压缩应用元素打补丁更小(即,需要更少的存储字节)。因此可以更有效地使用用户计算设备上的存储和存储器。
响应于确定可从至少一个其他应用或应用子包(已经安装在设备上的)获得一个或多个应用元素,应用提供商服务器可以创建正在安装的应用或应用子包的剥离版本(即,不包括可在计算设备上获得的应用元素的应用或应用子包的版本)以及更新应用元素可能所需的任何补丁。计算设备可以与应用提供商的一个或多个服务器建立两个下载流,然后使用一个下载流启动补丁的下载,并使用另一个下载流启动剥离的应用或应用子包的下载。当被剥离的应用或应用子包和补丁正在下载时,计算设备可以解压缩将要被重复使用并且在可以被重复使用之前需要打补丁的应用元素。一旦将每个补丁下载到计算设备,计算设备就可以解压缩所下载的补丁、应用补丁,然后开始重新压缩补丁应用元素。由于补丁比剥离的应用或应用子包小得多,因此下载所需的时间更少,应用元素通常可以在剥离的应用或应用子包完成下载之前被解压缩、打补丁,然后重新压缩。
这样,本公开的技术可以减少从应用提供商服务器发送并由计算设备接收以在计算设备上安装应用或应用子包的数据量。因此可以减少网络资源的使用。本公开的技术不是将可以在应用之间共享的应用元素限制为未压缩的应用元素,而是使得应用提供商能够从被发送到计算设备的剥离应用或剥离应用子包中排除压缩组件元素(因为现在可以使用已经存储在设备上的压缩组件元素),这可以进一步减少网络资源的使用,因为传输的数据更少。此外,这些技术可以实现减少下载到计算设备的数据,同时(如果有的话),最小程度地增加应用安装时间,或者在各种情况下,减少应用安装时间。
因此,所描述的技术可以改进计算设备以及包括计算设备和应用提供商服务器的计算系统的功能。通过重复使用已经安装在计算设备上的应用或应用子包的应用元素来安装或更新不相关的应用,所描述的技术减少了用于传输要在计算设备上安装的应用的元素的网络带宽量,并且可以提高在计算设备上的应用安装的速度。
在一些示例中,一种方法包括:由计算设备接收用户输入以安装所述计算设备上当前未安装的应用,其中,在所述计算设备上当前安装了多个应用,以及其中,所述多个应用中的每一个应用包括相应的多个应用元素;以及响应于接收到所述用户输入,向应用提供商发送安装所述应用的请求;从所述应用提供商接收来自当前安装在所述计算设备上的所述多个应用包括的相应多个应用元素中的一个或多个应用元素的指示,其中,所述一个或多个应用元素将在安装所述应用期间被重复使用,其中,所述一个或多个应用元素包括将从当前版本更新到所述应用所需的不同版本的第一应用元素,以及其中,所述第一应用元素被以压缩格式存储在所述计算设备上。该方法还可以包括由所述计算设备从所述应用提供商下载要应用于所述第一应用元素的补丁和不包括在安装所述应用期间要重复使用的一个或多个应用元素的应用的剥离版本;由所述计算设备解压缩所述第一应用元素以生成所述第一应用元素的解压缩版本;由所述计算设备解压缩所述补丁以生成所述补丁的解压缩版本;由所述计算设备将所述补丁解压缩版本应用到所述第一应用元素的解压缩版本以生成补丁应用元素;由所述计算设备压缩所述补丁应用元素以生成压缩补丁应用元素,所述压缩补丁应用元素是所述应用所需的所述第一应用元素的不同版本;以及由所述计算设备使用所述压缩补丁应用元素、所述应用的剥离版本以及除所述第一应用元素之外的一个或多个应用元素,在所述计算设备上安装所述应用。
在一些示例中,一种计算设备包括一个或多个处理器;存在敏感显示器,所述存在敏感显示器检测用户输入以安装所述计算设备上当前未安装的应用;通信单元;以及计算机可读存储介质,所述计算机可读存储介质存储包括多个应用的指令,其中,所述多个应用中的每一个应用包括相应的多个应用元素。所述指令在由所述一个或多个处理器执行时,使所述一个或多个处理器执行以下操作:响应于接收到所述用户输入,经由所述通信单元,向应用提供商发送安装所述应用的请求;经由所述通信单元,从所述应用提供商接收来自当前安装在所述计算设备上的所述多个应用中包括的相应多个应用元素中的一个或多个应用元素的指示,其中,所述一个或多个应用元素将在安装所述应用期间被重复使用,其中,所述一个或多个应用元素包括将从当前版本更新到所述应用所需的不同版本的第一应用元素,以及其中,所述第一应用元素被以压缩格式存储在所述计算设备上。指令进一步使得一个或多个处理器执行以下操作:经由所述通信单元,从所述应用提供商检索要应用于所述第一应用元素的补丁和不包括在安装所述应用期间要重复使用的一个或多个应用元素的应用的剥离版本;解压缩所述第一应用元素以生成所述第一应用元素的解压缩版本;解压缩所述补丁以生成所述补丁解压缩版本;将所述补丁的解压缩版本应用到所述第一应用元素的解压缩版本以生成补丁应用元素;压缩所述补丁应用元素以生成压缩补丁应用元素,所述压缩补丁应用元素是所述应用所需的所述第一应用元素的不同版本;以及使用所述压缩补丁应用元素、所述应用的剥离版本以及除所述第一应用元素之外的一个或多个应用元素,在所述计算设备上安装所述应用。
一种编码有指令的非暂时性计算机可读存储介质(和/或计算机程序产品),所述指令当被执行时,使计算设备的一个或多个处理器:接收用户输入的指示以安装所述计算设备上当前未安装的应用,其中,在所述计算设备上当前安装了多个应用,以及其中,所述多个应用中的每一个应用包括相应的多个应用元素;响应于接收到所述用户输入的指示,向所述应用提供商发送安装所述应用的请求;以及从所述应用提供商接收来自当前安装在所述计算设备上的所述多个应用中包括的相应多个应用元素中的一个或多个应用元素的指示,其中,所述一个或多个应用元素将在安装所述应用期间被重复使用,其中,所述一个或多个应用元素包括将从当前版本更新到所述应用所需的不同版本的第一应用元素,以及其中,所述第一应用元素被以压缩格式存储在所述计算设备上。指令进一步使得一个或多个处理器从所述应用提供商下载要应用于所述第一应用元素的补丁和不包括在安装所述应用期间要重复使用的一个或多个应用元素的应用的剥离版本;解压缩所述第一应用元素以生成所述第一应用元素的解压缩版本;解压缩所述补丁以生成所述补丁解压缩版本;将所述补丁的解压缩版本应用到所述第一应用元素的解压缩版本以生成补丁应用元素;压缩所述补丁应用元素以生成压缩补丁应用元素,所述压缩补丁应用元素是所述应用所需的所述第一应用元素的不同版本;以及使用所述压缩补丁应用元素、所述应用的剥离版本以及除所述第一应用元素之外的一个或多个应用元素,在所述计算设备上安装所述应用。
一个或多个示例的细节在附图和以下描述中阐述。根据说明书和附图以及根据权利要求书,本公开的其他特征、目的和优点将是显而易见的。
附图说明
图1是图示根据本公开的一个或多个方面的示例性计算系统的概念图,其中,计算设备可以从应用提供商服务器下载应用并且可以在计算设备上安装下载的应用。
图2是图示根据本公开的一个或多个方面的示例性计算设备的框图,该示例性计算设备被配置为通过利用已经安装在计算设备上的应用的应用元素来安装一个或多个应用。
图3是图示根据本公开的一个或多个方面的示例性应用提供商服务器的框图。
图4是图示根据本公开的技术的具有用于动态加载可安装子包的应用容器的示例性计算设备的概念图。
图4是图示根据本公开的一个或多个方面的由计算系统执行的示例性操作的流程图,该计算系统包括在计算设备上执行的一个或多个处理器和在应用提供商服务器处执行的一个或多个处理器。
图5是图示由计算系统执行的示例性操作的流程图,该计算系统包括在计算设备上执行的一个或多个处理器和在应用提供商服务器上执行的一个或多个处理器。
具体实施方式
图1是图示根据本公开的一个或多个方面的示例性计算系统的概念图,其中,计算设备可以从应用提供商服务器下载应用并且可以在计算设备上安装下载的应用。如图1所示,计算系统1可以包括计算设备2和应用提供商服务器4。计算设备2可以经由网络8与应用提供商服务器4通信以下载诸如应用18的应用,并且可以在计算设备2上安装下载的应用,诸如应用18。网络8表示用于在计算系统、服务器和计算设备之间传输数据的任何公共或私有通信网络,例如蜂窝、Wi-Fi和/或其他类型的网络。当计算设备2连接到网络8时,应用提供商服务器4可以经由网络8与计算设备2交换数据以传输要安装在计算设备2上的应用。
网络8可以包括一个或多个网络集线器、网络交换机、网络路由器或任何其他网络设备,其可操作地相互耦合,从而提供在应用提供商服务器4和计算设备2之间交换信息。计算设备2和应用提供商服务器4可以使用任何合适的通信技术,跨网络8发送和接收数据。计算设备2和应用提供商服务器4可以使用各自的网络链路,分别可操作地耦合到网络8。将计算设备2和应用提供商服务器4耦合到网络8的链路可以是以太网或其他类型的网络连接,并且这样的连接可以是无线和/或有线连接。
应用供应商服务器4可以表示任何合适的远程计算系统,诸如一台或多台台式计算机、膝上型计算机、大型机、服务器、云计算系统等,能够向网络(诸如网络8)发送信息和从网络接收信息。在一些示例中,数字助理服务器160可以表示经由云提供对它们各自服务的访问的云计算系统。
应用提供商服务器4托管应用提供商6(或至少提供对应用提供商6的访问)。应用提供商6可以执行使用硬件或硬件、软件和固件的组合描述的操作,这些硬件、软件和固件驻留在应用提供商服务器4处和/或在应用提供商服务器4处执行。应用提供商服务器4可以利用多个处理器或多个设备执行应用提供商6。应用提供商服务器4还可以将应用提供商6执行为在底层硬件上执行的虚拟机。在一些示例中,应用提供商6还可以执行为操作系统或计算平台的一个或多个服务,或者执行为在计算平台的应用层处的一个或多个可执行程序。
应用提供商6可以在应用提供商服务器4处执行以管理可以下载到计算设备的应用的储存库,以及安装和更新从应用提供商6下载的应用。应用提供商6可以从计算设备(诸如计算设备2)接收对应用的请求,并且将所请求的应用传送到请求的计算设备以安装。应用提供商6还可以生成传送到计算设备的补丁以更新安装在计算设备上的应用。
计算设备2可以是移动或非移动计算设备,其被配置为从应用提供商服务器4请求应用、从应用提供商服务器4接收请求的应用,以及安装从应用提供商服务器4请求和接收的应用。计算设备2的示例包括移动电话、平板计算机、膝上型计算机、台式计算机、服务器、大型机、机顶盒、电视、可穿戴设备(例如,计算机化手表、计算机化眼镜、计算机化手套等)、家庭自动化设备或系统(例如,智能恒温器或安全系统)、语音接口或台面家庭助理设备、个人数字助理(PDA)、游戏系统、媒体播放器、电子书阅读器、移动电视平台、汽车导航或信息娱乐系统,或任何其他类型的移动、非移动、可穿戴和不可穿戴计算设备。
在图1的示例中,计算设备2可以包括用户界面组件(UIC)14、UI模块16、应用安装器26以及应用10和12。UI模块16、应用安装器26以及应用10和12可以执行使用硬件,或者硬件和软件和/或固件的组合描述的操作,硬件和软件和/或固件驻留在计算设备2中和/或在计算设备2处执行。计算设备2可以利用多个处理器或多个设备来执行UI模块16、应用安装器26以及应用10和12。在一些情况下,计算设备2可以将UI模块16和/或应用安装器26执行为在底层硬件上执行的虚拟机。UI模块16和/或应用安装器26还可以执行为操作系统或计算平台的一个或多个服务,或者执行为计算平台的应用层处的一个或多个可执行程序。
计算设备2的UIC 14可以用作计算设备2的输入和/或输出设备。UIC 14可以使用各种技术来实现。例如,UIC 14可以用作使用存在敏感输入屏(诸如电阻触摸屏、表面声波触摸屏、电容触摸屏、投射电容触摸屏、压敏屏、声脉冲识别触摸屏或其他存在敏感显示器技术)的输入设备。
UIC 14可以用作使用麦克风或其他换能器技术、红外传感器技术或用在接收用户输入中的其他输入设备技术的输入设备。例如,UIC 14可以使用内置麦克风技术检测语音输入。作为另一示例,UIC 14可以包括可以从计算设备2的用户接收触觉输入的存在敏感显示器。UIC 14可以通过检测来自用户(例如,利用手指或手写笔触摸或指向UIC 14的一个或多个位置的用户)的一个或多个手势来接收触觉输入的指示。
UIC 14可以用作输出(例如,显示)设备并且将输出呈现给用户。UIC 14可以用作使用任何一种或多种显示设备(诸如液晶显示器(LCD)、点阵显示器、发光二极管(LED)显示器、有机发光二极管(OLED)显示器、电子墨水或者能够向计算设备2的用户输出可见信息的类似的单色或彩色显示器)的输出设备。UIC 14可以用作使用扬声器技术、触觉反馈技术或用在向用户输出信息中的其他输出设备技术的输出设备。UIC 14可以呈现由应用安装器26、应用10或应用12提供的用户界面。UIC 14可以呈现与在计算设备2处执行和/或可从计算设备2访问的计算平台、操作系统、应用和/或服务(例如,电子邮件、聊天、在线服务、电话、游戏等)的其他特征相关的用户界面。
UI模块16可以管理与UIC 14和计算设备2的其他组件的用户交互。当用户在不同的时间且在用户和计算设备2处于不同位置时与用户界面交互时,UI模块16和UIC 14可以从用户接收输入(例如,语音输入、手势输入等)的一个或多个指示。UI模块16和UIC 14可以解释在UIC 14处检测到的输入,并且可以将关于在UIC 14处检测到的输入的信息中继到应用安装器26、应用10、应用12和/或在计算设备2处执行的一个或多个其他相关平台、操作系统、应用和/或服务,以例如使计算设备2执行功能。
当计算设备2的用户在UIC 14处查看输出和/或提供输入时,UI模块16可以使UIC14输出、显示或以其他方式呈现用户界面。例如,如图1所示,UI模块16可以向UIC 14发送使UIC 14在UIC 14的显示屏上显示图形用户界面(GUI)的指令。在其他示例中,UI模块16还可以使UIC 14以非视觉形式输出用户界面(诸如音频输出)。例如,如果计算设备2是音频播放器设备,则UI模块16可以向UIC 14发送使UIC 14输出音频的指令。
当用户在不同时间和在用户和计算设备2处于不同位置时,与由UIC 14输出的用户界面交互时,UI模块16和UIC 14可以从用户接收输入(例如,语音输入、触摸输入、非触摸或存在敏感输入、视频输入、音频输入等)的一个或多个指示。UI模块16和UIC 14可以解释在UIC 14处检测到的输入,并且可以将关于在UIC 14处检测到的输入的信息中继到应用安装器26、应用10、应用12和/或在计算设备2处执行的一个或多个其他相关平台、操作系统、应用和/或服务,以例如使计算设备2执行功能。
UI模块16还可以从在计算设备2和/或一个或多个远程计算系统(诸如应用提供商服务器4)处执行的一个或多个相关平台、操作系统、应用和/或服务接收信息和指令。例如,UI模块16可以接收用于呈现用户界面的信息(例如,音频数据、文本数据、图像数据等)和指令。
应用10和12可以是当前安装在计算设备2上的应用。尽管图1图示了当前安装在计算设备2上的两个应用,但是应当理解到,可以在计算设备2上安装任意数量的应用,并且计算设备2不一定限于仅具有在计算设备2上安装的两个应用。
应用10和12分别包括子包20A-20N(统称为“子包20”)和子包22A-22M(统称为“子包22”)。子包20和22中的每一个都是为应用10和12提供离散功能集的可安装应用子包。作为示例,软件开发人员可以设计具有离散功能集的应用10(例如,导航应用)。应用10可以包括逐向导航用户界面、兴趣点用户界面(例如,在地图上显示兴趣点的详细信息)和设置用户界面。软件开发人员可以设计具有三个不同子包(例如,子包20A、20B和20N)的应用10,其中,每个子包20包括一组可执行组件以实现用于相应用户界面的功能。
尽管应用10的所有子包20总体上可能很大,但是计算设备2可以仅检索、安装和执行提供用户请求的功能所必需的那些子包20。这样,当安装和/或执行应用10时,仅用于应用10的一部分子包20需要本地驻留在计算设备上以供应用10执行。例如,当初始安装应用10时,可以只安装子包20A。其他子包(诸如子包20B-20N)可以包括用户不使用(即,未使用)的功能。即,自初始安装应用10以来,用户可能尚未请求或使用由一个或多个子包20B-20N提供的功能。因此,当用户初始请求由一个或多个子包20B-20N提供的功能时,可以安装(即,按需安装)子包20B-20N中的一个或多个。在一些示例中,如果用户至少在阈值持续时间(例如,一天、一周、一个月、一年等)内不使用由一个或多个子包20B-20N提供的功能,则可以从计算设备2卸载相应的一个或多个子包20B-20N。在这样的示例中,下次用户请求由已卸载的一个或多个子包20B-20N提供的功能时,可以重新安装(即,按需重新安装)已卸载的一个或多个子包20B-20N。
当用户请求应用的附加功能时,计算设备2可以自动地检索提供所请求功能的所需子包20(例如,子包20B、子包20N等)。当应用10当前正在计算设备2上执行时,计算设备可以自动地检索和安装所需子包20。这样,应用可以更快地安装和加载,因为如果仅需要应用功能的子集,不需要检索和安装用于该应用的整个子包集。因此,与检索整个应用相比,用于安装的网络、计算和存储资源可能会减少。申请人注意到,虽然在各种情况下,参考应用描述了本公开的技术,但是相同的技术可以应用于应用子包(例如,为了提供某种功能,可以使用已经安装在该设备上的另一应用子包的补丁版本来提供和安装应用子包的剥离版本)。同样地,即使参考应用具体描述了特定技术,但是除非特别指出,否则申请人并不将这些技术的描述限制为仅适用于某些应用。
安装在计算设备2处的应用和应用子包可以分别包括一个或多个应用元素。应用的应用元素可以包括在执行应用时使用的代码。例如,应用元素可以包括由计算设备2执行以执行应用的可执行代码和库、在应用执行期间访问的资源(例如,图像、纹理、文件、脚本、未编译的代码等)等。通常,应用元素以压缩形式被包括在应用或应用子包中。即,当应用或应用子包被安装在计算设备2处时,许多或大多数应用元素(诸如库)以压缩格式存储。应当理解到,在没有包含该应用元素的应用的明确许可下,其他应用可能无法访问该应用的应用元素。因此,应用的应用元素不包括由多个不同应用访问的共享库或其他数据。同样地,应用10可能无法访问应用12的应用元素,而应用12可能无法访问应用10的应用元素。在一些示例中,计算设备2中的应用可以在沙盒环境中执行,这将应用的应用元素与其他应用隔离。
在一些示例中,应用元素可以是四种内容中的一种或多种:二进制内容、资源、托管代码和编译资源。二进制内容可以指特定于计算设备2的一个或多个处理器的架构的本机代码。例如,应用10和12可以包括用于包括计算设备在内的各种平台的本机代码。资源可以包括图像内容、音频内容、视频内容等。例如,当应用10或应用12在计算设备2处执行时,应用10或12可以在UIC 14处输出这样的图像内容、音频内容和/或视频内容。
编译资源可以是编译后的资源,诸如编译为编译资源的字符串或可扩展标记语言(XML)文件。托管代码可以是非架构特定的编译代码,并且可以由虚拟机执行,诸如编译后的Java代码、编译后的Dalvik可执行代码等。在一些示例中,应用可以包括托管代码和本机代码两者作为应用元素。例如,应用可以包括以本机代码编写的一个或多个库,并且还可以包括以托管代码编写的一个或多个其他库。
应用安装器26可以由一个或多个处理器(诸如图2的处理器36)执行以在计算设备2处安装和更新应用。应用安装器26可以执行应用市场应用的功能,其允许用户经由UIC 14与应用安装器26交互以浏览、下载和安装来自应用提供商服务器(诸如应用提供商服务器4)的应用。UIC 14可以接收指示在计算设备2处安装应用18的请求的输入,并且UI模块16可以将在计算设备2处安装应用18的请求转发给应用安装器26。
根据本公开的各方面,计算设备2可以从应用提供商服务器4下载应用或应用子包,以便以利用当前安装在计算设备2上的应用或应用子包的应用元素的方式安装在计算设备2处。在图1的示例中,为了安装应用18,应用安装器26可以在计算设备2处执行以向在应用提供商服务器4处的应用提供商6发送请求,来从应用提供商服务器4将应用18下载到计算设备2,该请求可以是响应于安装当前未安装在计算设备上的应用(可选地提供特定应用功能)的用户输入。当用户输入是对特定应用先前未使用的功能的请求时,即对应于安装提供离散功能集的一个或多个子包的请求时,可以在特定应用正在计算设备处执行的同时接收用户输入。当应用安装器26已经接收和/或获得应用18的至少一个应用子包24A-24O(统称为“应用子包24”)时,应用安装器26可以在计算设备2处安装应用18。当用户输入是对特定应用先前未使用的功能的请求时,可以在特定应用在计算设备处执行的同时执行下载和安装。这种对子包安装的即时方法可以在不影响用户体验的情况下提高移动计算设备的资源利用率。
响应于从计算设备2接收到将应用(例如,应用18)下载到计算设备2的请求,应用提供商6可以确定是否可以从当前已经安装在计算设备2上的一个或多个应用中获得要下载的应用的一个或多个应用元素(即,是否可以使用一个或多个子包20和/或22来代替一个或多个子包24)。响应于确定要下载的应用的一个或多个应用元素可从当前已经安装在计算设备2上的一个或多个应用中获得,当可以从当前已经安装在计算设备2上的一个或多个应用中获得应用的一个或多个应用元素时,应用提供商6可以抑制将应用的每个应用元素发送到计算设备2。以这种方式,如果可以从当前已经安装在计算设备2上的一个或多个应用中获得应用的一个或多个应用元素,应用提供商6可以抑制将应用的每个应用元素发送到计算设备2。
应用提供商6可以确定哪些应用和哪些应用子包当前安装在计算设备2上,并且还可以确定当前安装在计算设备2上的应用的应用元素。例如,应用提供商6可以访问在应用提供商服务器4处存储的、关于当前安装在应用18处的应用的信息,或者可以从计算设备2接收当前安装在计算设备2处的应用的指示。应用提供商6可以基于这样的确定,确定可以从当前安装在计算设备2上的应用中获得的一个或多个应用元素,并且可以确定是否应该抑制将那些一个或多个应用元素传输到计算设备2。在应用提供商6将抑制传输应用元素的情况下,应用提供商6可以代替传输指示,该指示是在安装应用18期间,将重复使用的、当前安装在计算设备上的一个或多个应用元素的指示。
在此处讨论的系统收集关于用户的个人信息或可能利用个人信息的情况下,可能为用户提供控制程序或功能部件是否收集用户信息(例如,关于用户社交网络、行为或活动、职业、用户偏好或用户当前位置的信息),或控制是否和/或如何从内容服务器接收可能与用户更相关的内容的机会。此外,某些数据在被存储或使用之前可能会以一种或多种方式被处理,使得个人身份信息被移除。例如,用户的身份可能会被处理,使得无法确定用户的个人身份信息,或者可以概括获得位置信息的用户的地理位置(诸如到市、邮政编码或州级),使得无法确定用户的具体位置。因此,用户可以控制如何由内容服务器收集和使用关于用户的信息。
在图1的示例中,计算设备2的用户可以控制由应用提供商6收集的关于计算设备2的信息。例如,用户可以控制应用提供商6是否能够接收和/或访问与计算设备相关联的信息,诸如关于当前安装在计算设备2上的应用的信息。用户还可以控制应用提供商6对这些信息的访问级别。在某些情况下,应用提供商6可能能够接收和/或访问关于当前安装在计算设备2上的应用的信息,和/或仅在接收到计算设备2的用户的明确同意之后,接收和/或访问与计算设备2相关联的信息。
在图1的示例中,应用提供商6可以确定是否可以从当前已经安装在计算设备2上的应用10和12获得应用18的一个或多个应用元素。例如,应用提供商6可以访问指示当前安装在计算设备2上的一个或多个应用(例如,应用10和12)的信息,以及指示当前安装在计算设备2上的这些应用的应用元素的信息。这些信息可以被存储在应用提供商服务器4或应用提供商6可访问的另一位置(例如,另一远程服务器)处。应用提供商6可以读取这样的信息并且可以确定可以从已经安装在计算设备2上的一个或多个应用获得的应用18的一个或多个应用元素。
如果已经安装在计算设备2上的应用具有与应用18的应用元素相同的应用元素,则应用提供商6可以确定可以从已经安装在计算设备2上的应用获得应用18的应用元素。例如,如果应用18的应用元素是库,则应用提供商6可以确定可以从已经安装在计算设备2处的应用获得该库。在另一个示例中,如果应用18的应用元素是视频文件,并且如果相同的视频文件已经存在于已经安装在计算设备2上的应用中,则应用提供商6可以确定可以从已经安装在计算设备2上的应用获得该视频文件。
当已经安装在计算设备2上的应用具有可以诸如经由补丁被修改以变为与应用18的应用元素完全一样的应用元素时,应用提供商6也可以确定可以从已经安装在计算设备2上的应用获得应用18的应用元素。例如,如果应用18的应用元素是库的最新版本,并且如果已经安装在计算设备2上的应用的应用元素包含同一库的旧版本,则计算设备2可能能够通过将该库的旧版本更新为该库的最新版本来从已经安装在计算设备2上的应用获得该库的最新版本库。在该示例中,应用提供商6可以生成补丁以将库的旧版本更新为库的最新版本,并且可以将该补丁发送到计算设备2,使得计算设备2可以将该补丁应用到库的旧版本来将其更新为库的最新版本。
当应用提供商6确定可以从已经安装在计算设备2处的应用中获得(或者,换言之,可用的)应用元素中的应用元素时,应用提供商6可以确定是否请求计算设备2从已经安装在计算设备2上的应用获得应用元素,并使用所获得的应用元素来安装应用18,或者应用提供商6是否仍然将应用元素中的某一应用元素发送到计算设备2。应用提供商6可以至少部分地基于多种因素(诸如用户对下载时间的敏感性、计算设备2可用的网络带宽、计算设备2具有的网络连接类型、计算设备2的可用处理能力、计算设备2的剩余电池寿命、计算设备2的位置、计算设备2的存储器和存储限制等)来做出确定。
在一些示例中,应用提供商6可以基于这些和其他因素来生成计算设备2的简档。使用该简档,应用提供商6可以确定是否指示计算设备2从已经安装在计算设备2上的应用获得应用元素,并且使用所获得的应用元素安装应用18,或者应用提供商6是否仍然将应用18的应用元素发送到计算设备2。
例如,如果计算设备2经由蜂窝数据连接连接到应用提供商6,则应用提供商6可以向计算设备2发送从已经安装在计算设备2上的应用中获得应用元素的请求,并且如果计算设备2经由Wi-Fi连接到应用提供商6,则可以将应用元素发送到计算设备2。在另一个示例中,如果计算设备2经由计量网络连接连接到应用提供商6,则应用提供商6可以向计算设备2发送从已经安装在计算设备2上的应用中获得应用元素的请求,并且如果计算设备2经由未计量的网络连接或具有无限数据的网络连接连接到应用提供商6,则可以将应用元素发送到计算设备2。在另一个示例中,应用提供商6可以确定计算设备2可用的网络带宽量,并且如果计算设备2的可用网络带宽高于阈值,则可以将应用元素发送到计算设备2。
在另一个示例中,如果计算设备2的剩余电池寿命量小于阈值,如果计算设备2经由蜂窝数据连接连接到应用提供商6,则应用提供商6可以向计算设备2发送从已经安装在计算设备2上的应用获得应用元素的请求,并且如果计算设备2经由Wi-Fi连接到应用提供商6,则可以将应用元素发送到计算设备2,因为Wi-Fi可能比蜂窝数据连接的功率效率更高。
在某些情况下,应用18可能已经安装在计算设备2上,但是一个或多个子包24没有安装在计算设备2上。代替安装应用18的初始请求,计算设备2的用户可能正在请求使用在当前尚未安装在计算设备2上的、应用18的子包(诸如子包24B)中提供的应用18的附加功能。在这样的情况下,应用提供商6可以确定被包括在应用子包24B中的应用元素并且确定任何应用元素是否被包括在其他子包20、22或已安装在计算设备2上的应用10、12中。
当应用提供商6确定计算设备2将从已经安装在计算设备2上的应用或应用子包中获得应用元素时,应用提供商6可以向计算设备2发送从已经安装在计算设备2上的应用获得应用18的应用元素的请求。该请求可以识别可以从已经安装在计算设备2上的应用获得的应用18的应用元素、识别已经安装在计算设备2上的应用的应用元素、识别已经安装在计算设备2上的应用的应用元素的位置等。换言之,计算设备2可以从应用提供商接收当前安装在计算设备上的、在安装应用18期间将被重复使用的一个或多个应用元素的指示。如果需要,应用提供商6还可以向计算设备2发送补丁,该补丁可以被用来更新已经安装在计算设备2上的应用的应用元素,使得当被打补丁时,该应用元素与应用元素中的某一应用元素相同。例如,一个或多个应用元素可以包括通过将补丁应用到应用元素以生成补丁应用元素,从而将当前版本更新到应用18所需的不同版本的应用元素。
以这种方式,应用提供商6可以向计算设备2发送以及计算设备2可以从应用提供商6接收指示和一个或多个补丁,该指示是可以从已经安装在计算设备2上的应用获得的应用18的一个或多个应用元素的指示,该一个或多个补丁是计算设备2可以应用于已经安装在计算设备2上的应用的一个或多个应用元素的一个或多个补丁,以便从已经安装在计算设备2上的应用中获得应用18的一个或多个应用元素。
计算设备2可以从应用提供商6接收应用18的一个或多个应用元素。如果应用提供商6确定计算设备2将从已经安装在计算设备2上的一个或多个应用中获得一个或多个应用元素,则计算设备2还可以从应用提供商6接收从已经安装在计算设备2上的一个或多个应用中获得应用18的一个或多个应用元素的请求。
计算设备2接收到的请求可以指示对应于将从已经安装在计算设备2上的一个或多个应用获得的应用18的一个或多个应用元素的、已经安装在计算设备2上的一个或多个应用中的一个或多个应用元素。如果计算设备2可以诸如通过制作相应应用元素的副本或通过将补丁应用于相应应用元素来生成应用18的应用元素,则已经安装在计算设备2上的应用的应用元素可以对应于应用18的应用元素。
该请求可以包括已经安装在计算设备2上的一个或多个应用的一个或多个应用元素中的每一个的识别信息,诸如与一个或多个应用和/或一个或多个应用元素相关联的名称或其他识别信息、一个或多个应用元素在包括在计算设备2中或可操作地耦合到计算设备2的存储设备中的存储位置(例如,目录路径)等。
该请求还可以指定如何从已经安装在计算设备2上的一个或多个应用的相应应用元素获得应用18的一个或多个应用元素。在一个示例中,如果已经安装在计算设备2上的一个或多个应用的相应应用元素与应用18的应用元素完全一样,则可以通过制作相应应用元素的副本并且通过将相应应用元素的副本用作应用18的应用元素来获得应用18的应用元素。
在另一示例中,如果从已经安装在计算设备2上的一个或多个应用的相应应用元素获得应用18的应用元素包括对相应应用元素打补丁,则计算设备2可以从应用提供商6接收一个或多个补丁,计算设备2可以将补丁应用于相应应用元素以便获得应用18的应用元素。计算设备2可以将补丁应用到相应应用元素并且可以将相应应用元素的补丁副本(即,补丁应用元素)用作应用18的应用元素。
在一个示例中,要安装在计算设备2上的应用18可以包括应用子包24A和24B。当发送安装应用18的请求时,计算设备2可以启动来自应用提供商6的两个或更多个下载流。两个或更多个下载流中的每一个下载流可以被用来从应用提供商6下载应用18的不同部分。例如,一个下载流可以被用来下载子包24A的剥离版本而另一下载流可以被用来下载需要应用于已经安装在计算设备2上的应用元素的补丁,以便应用子包24A使用该应用元素。
在该示例中,应用子包24A提供应用18的核心功能并且被需要用于执行应用18。应用提供商6可以确定可以从已经安装在计算设备2上的应用或应用子包获得应用子包24A的应用元素,并且应用元素在被应用子包24A使用之前需要打补丁。作为响应,应用提供商6可以生成不包括已经安装在计算设备2上的应用元素的应用子包24A的剥离版本。在一些情况下,即使已经使用标准压缩算法压缩了应用子包24A的剥离版本,应用提供商6可以应用第二、不同的压缩算法来生成进一步压缩并因此尺寸更小的应用子包的剥离版本,以进一步减少需要发送到计算设备2的数据量,并且更有效地利用网络资源和计算资源,如存储器、存储和处理能力。
应用提供商6还可以生成将由计算设备2应用于已经安装的应用元素的补丁,以便将应用元素更改为应用子包24A所需的应用元素的版本。应用提供商6压缩补丁并且使用与计算设备2建立的下载流之一将补丁发送到计算设备2。应用提供商6还使用与计算设备2建立的下载流中的另一个下载流将应用子包24A的剥离版本发送到计算设备2。典型地,压缩补丁的大小将小于应用子包24A的剥离版本,因此将需要更少的时间来传输到计算设备2。
由于将补丁应用于压缩应用元素(诸如库)会产生低效的元素的补丁版本(即,比将补丁应用到同一应用元素的未压缩版本时尺寸更大),优选的是将补丁应用于应用元素的未压缩版本。因此,根据本公开的技术,当应用提供商6正在创建和发送补丁和应用子包24A的剥离版本时,计算设备2可以创建将由应用子包24A重复使用的一个或多个应用元素的副本。如果任何应用元素以压缩格式被存储在计算设备2处,则计算设备2可以对压缩应用元素的副本进行解压缩。在各种情况下,与下载补丁所需的时间相比,创建应用元素的副本和解压缩压缩应用元素的副本可能花费更少的时间。
一旦将每个补丁下载到计算设备2,计算设备2就解压缩每个补丁并将未压缩的补丁应用到应用元素的相应未压缩副本以生成补丁应用元素。在应用子包24A要求以压缩格式存储应用元素的情况下,在补丁被应用之后,计算设备2重新压缩应用元素的补丁版本(以形成压缩补丁应用元素)。通常,与下载应用子包24A的剥离版本所需的时间相比,该下载、解压缩、打补丁和重新压缩处理所需要的时间更少。以这种方式,本公开的技术允许即使压缩应用元素在被应用子包24A使用之前可能需要打补丁,也能够使用已经安装在计算设备2上的压缩应用元素,并且无需产生应用元素的次优补丁版本。然后,计算设备2可以使用压缩补丁应用元素和所需的任何其他应用元素以及应用或应用子包的剥离版本来安装应用。此外,通过如上所述下载、解压缩、打补丁和重新压缩应用元素,与如果将整个应用子包24A发送到计算设备2或如果在应用子包24A中仅剥离出已经安装在计算设备2上的未压缩的应用元素所需的时间相比,安装应用子包24A所需的下载和安装时间更低。还可以减少网络资源和计算资源,如存储器、存储和处理能力。
本文描述的技术还可以通过最小化安装应用18对计算设备2的电池寿命和/或处理能力的影响来改进计算设备2本身的功能。通过至少部分地基于由计算设备2建立的网络连接的类型、由计算设备2建立的网络连接的可用带宽、计算设备2的当前处理器和/或存储器负载,和/或计算设备2的剩余电池寿命,来确定是否将一个或多个应用元素从应用提供商服务器4发送到计算设备2或者是否从已经安装在计算设备2上的应用中获得一个或多个应用元素,本文描述的技术可以以最小化安装应用18对计算设备2的电池寿命和/或处理能力的影响的方式,在计算设备2上自适应地安装应用18。
图2是图示根据本公开的一个或多个方面的示例性计算设备的框图,该示例性计算设备被配置为通过利用已经安装在计算设备上的应用的应用元素来安装一个或多个应用。图2图示了计算设备2的仅一个具体示例,且计算设备2的许多其他示例可以用在其他实例中并且可以包括示例性计算设备2中包括的组件的子集或者可以包括图2中未示出的附加组件。
如图2的示例中所示,计算设备2包括用户界面组件(UIC)14、一个或多个处理器36、一个或多个通信单元38和一个或多个存储组件28。UIC 14包括输出组件32和输入组件34。计算设备2的存储组件28包括UI模块16、应用安装器26以及应用10、12和18。
通信信道30可以互连组件14、36、38和28中的每一个以用于组件间(物理地、通信地和/或操作地)通信。在一些示例中,通信信道30可以包括系统总线、网络连接、进程间通信数据结构或用于传送数据的任何其他方法。
计算设备2的一个或多个通信单元38可以通过在一个或多个网络上发送和/或接收网络信号,经由一个或多个有线和/或无线网络(例如,网络8)来与外部设备(例如,应用提供商服务器4)通信。通信单元38的示例包括网络接口卡(诸如以太网卡)、光收发器、射频收发器、全球定位卫星(GPS)接收器,或可以发送和/或接收信息的任何其他类型的设备。通信单元38的其他示例可以包括短波无线电、蜂窝数据无线电、无线网络无线电以及通用串行总线(USB)控制器。
计算设备2的一个或多个输入组件34可以接收输入。输入的示例是触觉、音频和视频输入。在一个示例中,计算设备2的输入组件34包括存在敏感输入设备(例如,触敏屏、存在敏感显示器)、鼠标、键盘、语音响应系统、摄像机、麦克风或用于检测来自人或机器的输入的任何其他类型的设备。在一些示例中,输入组件34可以包括一个或多个传感器组件,诸如一个或多个位置传感器(GPS组件、Wi-Fi组件、蜂窝组件)、一个或多个温度传感器、一个或多个运动传感器(例如,加速度计、陀螺仪)、一个或多个压力传感器(例如气压计)、一个或多个环境光传感器以及一个或多个其他传感器(例如麦克风、照相机、红外接近传感器、湿度计等)。其他传感器可以包括心率传感器、磁力计、葡萄糖传感器、湿度计传感器、嗅觉传感器、罗盘传感器、计步器传感器,仅举几个其他非限制性示例。
计算设备2的一个或多个输出组件32可以产生输出。输出的示例是触觉、音频和视频输出。在一个示例中,计算设备2的输出组件32包括PSD、声卡、视频图形适配卡、扬声器、阴极射线管(CRT)监视器、液晶显示器(LCD)或用于产生对人或机器的输出的任何其他类型的设备。
UIC 14可以包括输出组件32和输入组件34。输出组件32可以是显示组件,诸如UIC14在其上显示信息的屏幕,而输入组件34可以是检测在输出组件32处和/或附近的对象的存在敏感输入组件。输出组件32和输入组件34可以是扬声器和麦克风对或者一个或多个输入和输出组件的任何其他组合,诸如输入组件34和输出组件32。在图2的示例中,UIC 14可以呈现用户界面。
虽然图示为计算设备2的内部组件,但是UIC 14也可以表示与计算设备2共享数据路径以用于发送和/或接收输入和输出的外部组件。例如,在一个示例中,UIC 14表示计算设备2的内置组件,其位于计算设备2的外包装内并且物理地连接到计算设备2的外包装(例如,移动电话上的屏幕)。在另一示例中,UIC 14表示计算设备2的外部组件,其位于计算设备2的包装或壳体外部并且与计算设备2的包装或壳体物理分离(例如,与计算设备2共享有线和/或无线数据路径的监视器、投影仪等)。
计算设备2内的一个或多个存储组件28可以存储用于在计算设备2的操作期间处理的信息(例如,计算设备2可以存储在计算设备2上执行期间,由UI模块16、应用安装器26以及应用10、12和18访问的数据)。在一些示例中,存储组件28是临时存储器,意指存储组件28的主要目的不是长期存储。计算设备2上的存储组件28可以被配置为用于短期存储信息的易失性存储器,因此如果断电则不保留存储的内容。易失性存储器的示例包括随机存取存储器(RAM)、动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)和本领域已知的其他形式的易失性存储器。
在一些示例中,存储组件28还包括一个或多个计算机可读存储介质。在一些示例中,存储组件28包括一个或多个非暂时性计算机可读存储介质。存储组件28可以被配置为存储比通常由易失性存储器存储的信息量更大的信息量。存储组件28可以进一步被配置为用于长期存储信息的非易失性存储器空间并在电源开/关周期之后保留信息。非易失性存储器的示例包括磁性硬盘、光盘、软盘、闪存或电可编程存储器(EPROM)或电可擦除可编程(EEPROM)存储器的形式。存储组件28可以存储与UI模块16、应用安装器26以及应用10、12和18相关联的程序指令和/或信息(例如,数据)。存储组件28可以包括被配置为存储与UI模块16、应用安装器26以及应用10、12和18相关联的数据或其他相关信息的存储器。
一个或多个处理器36可以实现与计算设备2相关联的功能和/或执行与计算设备2相关联的指令。处理器36的示例包括应用处理器、显示控制器、辅助处理器、一个或多个传感器集线器以及被配置为用作处理器、处理单元或处理设备的任何其他硬件。UI模块16、应用安装器26以及应用10、12和18可由处理器36操作来实现计算设备2的各种动作、操作或功能。例如,计算设备2的处理器36可以检索和执行由存储组件28存储的指令,使得处理器36执行UI模块16、应用安装器26以及应用10、12和18的操作。指令当由处理器36执行时,可以使计算设备2将信息存储在存储组件28内.
UI模块16可以管理用户与UIC 14和计算设备2的其他组件的交互。当计算设备2的用户在UIC 14处查看输出和/或提供输入时,UI模块16可以使UIC 14输出用户界面。
应用10和12是已经安装在计算设备2上的应用,并且可以由处理器36执行以实现各种功能。
应用安装器26可以由处理器36执行以在计算设备2处安装和更新应用。应用安装器26可以执行允许用户经由UIC 14与应用安装器26交互以浏览、下载和安装来自应用提供商服务器(诸如应用提供商服务器4)的应用的应用市场应用的功能。UIC 14可以接收指示在计算设备2处安装应用18的请求的输入,并且UI模块16可以向应用安装器26转发在计算设备2处安装应用18的请求。
响应于接收到在计算设备2处安装应用18的请求,应用安装器可以经由通信单元38向应用提供商服务器4处的应用提供商6发送对应用18的请求。该请求可以包括可由应用提供商6使用来确定如何将应用18的应用元素发送到计算设备2的信息。例如,此类信息可以包括计算设备2的当前位置(例如,地理位置)、由通信单元38建立的网络连接的类型、由通信单元38建立的网络连接的可用带宽、当前处理器和/或处理器36的存储器负载、计算设备2的剩余电池寿命、关于应用18下载的用户偏好、当前安装在计算设备2上的应用、当前安装在计算设备2上的应用的应用元素等。
响应于向应用提供商6发送对应用18的请求,应用安装器26可以从应用提供商6接收应用18的第一一个或多个应用元素。应用安装器26可以接收以压缩形式的应用18的第一一个或多个应用元素,以便减少下载第一一个或多个应用元素所需的时间量并且减少下载中使用的网络资源。
第一一个或多个应用元素中的每个应用元素可能已经使用特定于该应用元素的应用元素类型的压缩算法进行了压缩(例如,由应用提供商服务器4),以减小经由网络传输到计算设备2的第一一个或多个应用元素的大小。因此,如果应用18的第一一个或多个应用元素包括两个或更多个应用元素类型的两个或更多个应用元素,则两个或更多个应用元素中的两个或更多个应用元素中的每一个可能已经使用不同的压缩算法进行了压缩。为了帮助解压缩从应用提供商6接收到的应用元素,计算设备可以对已经使用基于字典的压缩算法压缩过的应用元素,在存储组件28中存储压缩字典,在该算法中,通过引用压缩字典中的数据块的位置,替换诸如字符串的数据块。压缩字典可以包括基于字典的压缩算法可以索引的数据块的索引,以便压缩和解压缩数据。为了解压缩已经使用基于字典的压缩算法压缩的应用元素,应用安装器26可以用压缩字典中的相应引用位置处的数据块替换压缩图形元素中的引用。
应用安装器26可能不会从应用提供商6接收应用18的多个应用元素中的每一个。相反,应用安装器可以接收从已经安装在计算设备2上的一个或多个应用获得应用18的第二一个或多个应用元素的请求。该请求可以识别对应于应用18的第二一个或多个应用元素的、已经安装在计算设备2上的应用的一个或多个相应应用元素,使得应用安装器26可以通过复制或打补丁已经安装在计算设备2上的应用的相应一个或多个应用元素,获得第二一个或多个应用元素。例如,该请求可以包括一个或多个相应应用元素在存储组件28中的位置的指示、一个或多个相应应用元素的唯一标识符的指示等,其可以使得计算设备2能够从已经安装在计算设备2上的应用的应用元素中识别出一个或多个相应的应用元素。
在一些示例中,当下载应用18时,计算设备2可以启动来自应用提供商6的两个或更多个下载流。两个或更多个下载流中的每一个下载流都可以用于从应用提供商6下载应用18的不同部分。例如,一个下载流可以被用来下载应用18的剥离版本(即,不包括已经安装在计算设备2上的应用元素的版本),而另一个下载流可以被用来下载需要应用到已经安装在计算设备2上的应用元素的补丁,以便应用18使用应用元素。
当应用提供商6正在创建和发送补丁和应用18的剥离版本时,计算设备2可以创建将由应用18重复使用的一个或多个应用元素的副本,包括需要打补丁的应用元素。如果任何应用元素以压缩格式被存储在计算设备2处,则应用安装器26可以解压缩(多个)压缩应用元素的副本。在各种情况下,与下载补丁所需的时间相比,创建应用元素的副本和解压缩(多个)压缩应用元素的副本可能花费更少的时间。
一旦将每个补丁下载到计算设备2,应用安装器26就解压缩每个补丁并将未压缩的补丁应用到应用元素的相应未压缩副本。在应用18要求以压缩格式存储应用元素的情况下,在应用补丁之后,应用安装器26重新压缩应用元素的补丁版本。
一旦应用安装器26接收或获得了应用18的每个应用元素,包括第一和第二应用元素,并且已经对需要打补丁的应用元素打补丁,应用安装器26就可以使用应用18的应用元素来安装应用18。安装应用18可以包括为应用18创建包,其中,应用18的应用元素以该包表示计算设备2可以执行以实现一个或多个功能的应用的方式存储在该包内。
图3是图示了根据本公开的一个或多个方面的示例性应用提供商服务器的框图。图3仅图示了应用提供商服务器4的一个具体示例,并且可以在其他实例中使用应用提供商服务器4的许多其他示例。在其他示例中,应用提供商服务器可以包括示例性应用提供商服务器4中包括的组件的子集或者可以包括图3中未示出的附加组件。例如,应用提供商服务器4可以包括服务器集群,并且构成应用提供商服务器4的服务器集群的每个服务器可以包括图3中本文描述的所有或一些组件以实现本文公开的的技术。
如图3的示例中所示,应用提供商服务器4包括一个或多个处理器40、一个或多个通信单元42和一个或多个存储设备48。存储设备48包括应用提供商6和应用提供商数据存储52。
处理器40类似于图2的计算设备2的处理器36。通信单元42类似于图2的计算设备2的通信单元38。存储设备48类似于图2的计算设备2的存储组件28。通信信道50类似于图2的计算设备2的通信信道30,因此,可以互连组件40、42和48中的每一个以组件间通信。在一些示例中,通信信道50可以包括系统总线、网络连接、进程间通信数据结构或用于传送数据的任何其他方法。
在一些示例中,存储设备48是临时存储器,意指存储设备48的主要目的不是长期存储。在这个示例中,存储设备48可以被配置为用于短期存储信息的易失性存储器,因此如果断电则不保留存储的内容。易失性存储器的示例包括随机存取存储器(RAM)、动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)和本领域已知的其他形式的易失性存储器。
在一些示例中,存储设备48还包括一个或多个计算机可读存储介质。在一些示例中,存储设备48包括一个或多个非暂时性计算机可读存储介质。存储设备48可以被配置为存储比通常由易失性存储器存储的信息量更大的信息量。存储设备48可以进一步被配置为用于长期存储信息的非易失性存储器空间并在电源开/关周期之后保留信息。非易失性存储器的示例包括磁性硬盘、光盘、软盘、闪存或电可编程存储器(EPROM)或电可擦除可编程(EEPROM)存储器的形式。存储设备48可以存储与应用提供商6和应用提供商数据存储52相关联的程序指令和/或信息(例如,数据)。存储设备48可以包括被配置为存储与应用提供商6和应用提供商数据存储52相关联的数据或其他相关信息的存储器。
应用提供商数据存储52可以被配置为存储由应用提供商6接收、创建和/或以其他方式与应用提供商6相关联的信息。例如,应用提供商数据存储52可以存储可以从应用提供商服务器4下载以用于安装在计算设备(诸如计算设备2)上的应用。这样的应用可以由应用开发人员上传到应用提供商服务器4,使得应用可以用于由应用提供商6下载到计算设备。
应用提供商数据存储52还可以存储关于安装在与应用提供商服务器4通信的计算设备上的应用的信息。例如,对于计算设备2,应用提供商数据存储52可以存储在计算设备2上安装的应用的指示、安装在计算设备2上的应用的版本、组成安装在计算设备2上的应用的应用元素、先前在计算设备2上安装过但不再安装在计算设备2上的应用等。
应用提供商6可以在处理器40处执行并且可以被配置为向计算设备发送应用和补丁以便在计算设备上安装应用和/或更新在计算设备2处安装的应用。应用提供商6可以从计算设备2接收对应用的请求,并且可以响应于接收到来自计算设备2的请求,将所请求的应用的一个或多个应用元素发送到计算设备2。
代替发送所请求的应用的所有应用元素,应用提供商6可以确定是否可以从当前已经安装在计算设备2上的一个或多个应用获得该应用的一个或多个应用元素。如果是这样,则应用提供商6可以指示计算设备2从当前已经安装在计算设备2上的一个或多个应用中获得这样的一个或多个应用元素,并且可以抑制将这样的一个或多个应用元素发送到计算设备2。
应用提供商数据存储52可以存储当前安装在与应用提供商服务器4通信的各种计算设备上的应用的指示。例如,当应用提供商6从计算设备2接收到对应用的请求时,应用提供商服务器4可以更新应用提供商数据存储52以包括所请求的应用被安装在计算设备2上的指示。此外,当从计算设备2删除或以其他方式卸载应用时,应用提供商服务器4可以接收应用被从计算设备2删除或卸载的指示,并且可以更新应用提供商数据存储52以包括该应用不再被安装在计算设备2上的指示。以这种方式,应用提供商数据存储52可以存储当前安装在与应用提供商服务器4通信的计算设备2上的应用的指示。
应用提供商6可以基于存储在应用提供商数据存储52中的信息(或请求中提供的信息,其中,不存储该信息),确定可以从当前安装在请求计算设备(例如计算设备2)上的应用获得的所请求的应用的一个或多个应用元素。如果1)当前安装在请求计算设备上的应用包括与被请求应用的应用元素相同的应用元素,或2)当前安装在请求计算设备上的应用包括可以被打补丁以与被请求应用的应用元素相同的应用元素,则可以从当前安装在请求计算设备上的应用中获得被请求应用的应用元素。例如,如果被请求应用的应用元素为库,则如果应用包括该库的相同版本,或可以经由补丁更新为该库的相同版本的库的较早版本,则可以从当前安装在计算设备2上的应用获得应用元素。
当应用提供商6确定可以从当前安装在请求计算设备上的应用中获得被请求应用的一个或多个应用元素时,应用提供商6可以确定抑制将所请求的应用的一个或多个应用元素发送到请求计算设备,而是指示请求计算设备从当前安装在请求计算设备上的应用中获得被请求应用的一个或多个应用元素。在其他情况下,即使当可以从当前安装在请求计算设备上的应用获得被请求应用的一个或多个应用元素时,应用提供商6也可以将被请求应用的一个或多个应用元素发送到请求计算设备。
应用提供商6可以基于各种因素,确定即使当可以从当前安装在请求计算设备上的应用中获得被请求应用的一个或多个应用元素时,是否仍然将被请求应用的一个或多个应用元素发送到请求计算设备。这些因素可以包括用户对安装被请求应用的时间量的敏感性、请求计算设备的网络连接特性、请求计算设备的网络连接的可用带宽、请求计算设备的网络连接类型、计算设备的位置、要由请求计算设备应用以获得一个或多个应用元素的任何补丁的处理器和/或存储器利用率、计算设备的剩余电池寿命等。应用提供商服务器4可以从请求计算设备接收这些因素的指示,并且可以将这些信息存储在应用提供商数据存储52中。应用提供商6可以基于这些和其他因素生成请求计算设备的简档以确定是否将被请求应用的一个或多个应用元素发送到请求计算设备。
在一些示例中,如果计算设备2经由蜂窝数据连接而不是Wi-Fi连接到应用提供商6,则应用提供商6可以抑制将被请求应用的一个或多个应用元素发送到请求计算设备,以及如果请求设备经由Wi-Fi连接到应用提供商6,则可以将被请求应用的一个或多个应用元素发送给请求计算设备。
在一些示例中,如果请求计算设备经由计量网络连接连接到应用提供商6,则应用提供商6可以抑制将被请求应用的一个或多个应用元素发送到请求计算设备,并且如果请求设备经由未计量的网络连接或具有无限数据的网络连接连接到应用提供商6,则可以将被请求应用的一个或多个应用元素发送到请求计算设备。在另一示例中,应用提供商6可以确定可用于请求计算设备的网络带宽量,并且如果请求计算设备的可用网络带宽高于阈值,则可以将被请求应用的一个或多个应用元素发送到请求计算设备。
在一些示例中,当从当前安装在请求计算设备上的应用获得被请求应用的一个或多个应用元素包括向当前安装的应用的应用元素应用补丁时,应用提供商6可以确定将由请求计算设备应用到当前安装的应用的应用元素的补丁的处理器和/或存储器利用率,以及请求计算设备的当前处理器和/或存储器利用率以及请求计算设备的剩余电池寿命。因为对当前安装的应用的应用元素应用补丁可能是潜在地处理器密集型和存储器密集型的,并且可能潜在地耗尽请求计算设备的电池,所以应用提供商6可以确定请求计算设备是否具有可用资源以比从应用提供商服务器4下载被请求应用的一个或多个应用元素更快和/或更资源有效的方式应用补丁。
应用提供商6可以生成并向请求设备发送被请求应用的剥离版本,以及要从已经安装在请求设备处的应用中获得的被请求应用的一个或多个应用元素的指示。被请求应用的剥离版本是不包括要从已经安装在请求设备处的应用中获得的一个或多个应用元素的被请求应用的版本。如有必要,应用提供商6还可以生成一个或多个补丁并将其发送到请求计算设备,其可以被用来更新已经安装在请求计算设备上的应用的一个或多个应用元素。在各种情况下,可以使用不同的下载流,将被请求应用的剥离版本和补丁并行地发送到请求计算设备。通过在与被请求应用的剥离版本分开的下载流中发送补丁,请求计算设备可以开始执行并且通常将在被请求应用的剥离版本被完全下载到请求设备上之前,完成本文描述的解压缩、打补丁和重新压缩技术。
根据本公开的各方面,为了进一步减少从应用提供商服务器4和计算设备(例如,计算设备2)发送以将一个或多个应用元素发送到计算设备来安装或更新计算设备上的应用的数据量,应用提供商服务器4可以压缩从应用提供商服务器4发送到计算设备的应用元素。具体地,压缩模块56可以在处理器40处执行以将不同的压缩技术应用于不同类型的应用元素,并且可以基于应用元素的内容来调整用于相同类型的应用元素的压缩技术的参数。以这种方式,与应用单一压缩技术来压缩不同类型的不同应用元素相比,压缩模块56可能能够更好地压缩不同类型的不同应用元素。
压缩模块56可以至少部分地基于压缩模块56要压缩的应用元素的类型来确定要应用于应用元素的压缩技术。因此,当压缩模块56遇到至少包括第一类型的第一应用元素和不同于第一类型的第二类型的第二应用元素的多个应用元素时,压缩模块可以将第一压缩技术应用于第一类型的第一应用元素,并且可以将不同于第一压缩技术的第二压缩技术应用于第二类型的第二应用元素。以这种方式,压缩模块56可以对多个不同类型的应用元素中的每一个应用元素,应用不同的压缩技术来压缩多个不同类型的应用元素中的每一个应用元素。
如前所述,应用可以包括不同应用元素类型的多个应用元素。例如,应用可以包括为包含特定于架构的本机代码的二进制内容的一个或多个应用元素。为了压缩这种类型的应用元素,与将本机代码视作任意文本块的压缩技术相比,压缩模块56可以使用为压缩本机代码而优化的压缩技术,诸如在每CPU指令级处对齐代码的压缩技术。
应用还可以包括作为资源的一个或多个应用元素,诸如图像、音频文件、视频文件等。对于这种类型的应用元素,压缩模块56可以依赖于由图像、音频文件、视频文件等本地文件格式提供的现有压缩。在这种情况下,压缩模块56可能不必进一步压缩这些应用元素。
应用还可以包括作为托管代码的一个或多个应用元素。托管代码可以是在虚拟机的管理下执行的可执行代码,诸如编译后的Java代码、编译后的Dalvik可执行代码等。对于这种类型的应用元素,压缩模块56可以使用为压缩托管代码而优化的压缩技术。例如,这种压缩技术可以对已编译的Java代码或已编译的Dalvik可执行代码中的常见短语调整基于字典的压缩算法。
应用提供商数据存储52可以存储用于压缩技术的压缩字典,该压缩技术使用基于字典的压缩算法,其中,可以通过引用压缩字典中的数据块的位置来替换诸如字符串的数据块。压缩字典可以包括基于字典的压缩算法可以索引以压缩和解压缩数据的数据块的索引。
根据本公开的各方面,为了进一步减少从应用提供商服务器4和计算设备(例如,计算设备2)发送以将一个或多个应用元素发送到计算设备的数据量,应用提供商服务器4可以变换应用的应用元素以减小可以被应用来更新应用元素的先前或旧版本的补丁的大小。例如,应用提供商6可以重新组织库的新版本的代码以减小被用来将库的先前版本更新为库的新版本的补丁的大小。
这种重组可能对作为托管代码的应用元素很有帮助。对于托管代码,由编译器生成的输出代码的微小更改可能会导致偏移量创建的参数出现很大差异。因此,与托管代码的大小相比,即使对托管代码的增量更改,用于对托管代码打补丁的补丁的大小也可能相对较大。
用于将应用元素的先前版本更新为应用元素的更新版本的补丁是应用元素的更新版本与应用元素的先前版本之间的差异的小型编码。补丁的大小越大,下载和应用补丁所需的时间就越长。通过减小补丁的大小,应用提供商6可以减少从应用提供商服务器4下载补丁所花费的时间量和传输补丁所需的网络资源,并且还可以减少在计算设备上应用补丁所需的处理。
应用提供商6可以包括重组模块58,其在处理器40处执行以基于一个或多个应用元素的先前版本重组一个或多个应用元素的代码,以便减小被用来对一个或多个应用元素的先前版本打补丁以将它们更新为一个或多个应用元素的补丁的大小。例如,当应用提供商6接收到应用元素的新版本的上传时,应用提供商6可以基于应用元素的先前版本重组应用元素的新版本内的代码以减小补丁的大小,该补丁可以被用来将应用元素的先前版本更新为应用元素的新版本。应用提供商6可以至少部分地基于包含重组代码的应用元素的新版本与应用元素的先前版本之间的差异来生成补丁。
对于包括代码文件的应用元素,诸如在托管代码或本机代码的情况下,重组模块58可以通过最大化应用元素的新版本的代码中的连续块的数量来减小补丁的大小,该补丁将应用元素的先前版本打补丁到应用元素的新版本,该连续块是具有应用元素的先前版本的代码中的匹配连续块的连续块。在应用元素的新版本中,具有应用元素的先前版本中的匹配连续块的连续块可以被称为共享连续块。共享连续块的数量越多,补丁中可以编码的替换就越少,从而减小补丁的大小。
为了重组应用元素的新版本,重组模块58可以获得要被打补丁的应用元素的先前版本的简档。在一些示例中,应用提供商6可以执行应用元素的先前版本的归档。在其他示例中,应用提供商6可以从另一个计算设备接收应用元素的先前版本的简档。
应用元素的简档可以包括源自应用元素的信息,该信息描述应用元素中的代码(例如,托管代码),诸如代码中的方法、常量、类等,并且描述代码中的方法、常量和类的顺序。当应用元素包括一个以上的代码文件时,每个代码文件可以具有描述代码文件内的代码的相关简档。
重组模块58可以使用应用元素的先前版本的简档来重组应用元素的新版本。重组模块58可以在对应于应用元素的先前版本的方法、常量和类的应用元素的新版本中包括的一个或多个代码文件中找到所有方法、常量和类,如由简档所示。重组模块58可以通过在应用元素的新版本的代码文件中,或者在应用元素的新版本的新创建的代码文件中将这些方法、常量和类分组在一起来重组代码文件。重组模块58还可以重新排列分组在一起的方法、常量和类的顺序,使得它们匹配简档中的方法、常量和类的顺序。重组模块58可以调整应用元素的新版本的代码文件中对方法、常量和类的所有内部引用,以考虑它们在代码文件中的新位置。如有必要,应用提供商6可以对组成应用元素的新版本的二进制文件重新签名。
在一些示例中,根据上述技术重组应用元素的新版本的代码文件可以增加应用元素中的代码文件的数量。例如,重组模块58可以将单个代码文件分成应用元素的新版本中的多个代码文件,其中,每个代码文件分别与单个简档相关联。
根据上述技术重组应用元素的新版本的代码文件可以增加应用元素的新版本中、与应用元素的先前版本中的连续区域匹配的连续块的数量和大小。通过增加匹配连续区域的数量和大小,上述技术减小了被用来将应用元素的先前版本更新为应用元素的新版本的补丁的大小。
图4是图示根据本公开的技术的具有用于动态加载可安装子包的应用容器的示例性计算设备的概念图。图4仅图示了计算设备100的一个具体示例。计算设备100的许多其他示例可以在其他实例中使用并且可以包括示例性计算设备100中包括的组件的子集或者可以包括图4的示例性计算设备100中未示出的附加组件。
如图4的示例中所示,计算设备100包括一个或多个处理器240、一个或多个输入组件242、一个或多个通信单元244、一个或多个输出组件246、一个或多个存储组件248和存在敏感显示器212。计算设备100的存储组件248包括应用容器102、运行时系统126和操作系统136。
处理器240类似于图2的计算设备2的处理器36。通信单元244类似于图2的计算设备2的通信单元38。存储组件248类似于图2的计算设备2的存储组件28。通信信道250类似于图2的计算设备2的通信信道30,因此,互连组件204、240、242、244、246,248和258中的每一个以用于组件间通信。在一些示例中,通信信道250可以包括系统总线、网络连接、进程间通信数据结构或用于传送数据的任何其他方法。
一个或多个处理器240可以在计算设备100内实现功能和/或执行指令。例如,计算设备100上的处理器240可以接收和执行由存储组件248存储的指令,这些指令提供操作系统136、应用容器102A-102C(统称为“应用容器102”)和运行时系统126的功能。由处理器240执行的这些指令可以使计算设备100在程序执行期间在存储组件248存储和/或修改信息。处理器240可以执行操作系统136、应用容器102和运行时系统126的指令以实现一个或多个操作。即,操作系统136、应用容器102和运行时系统126可由处理器240操作以执行本公开中描述的各种功能。
计算设备100的一个或多个输入组件242可以接收输入。输入的示例是触觉、音频、动能和光学输入,仅举几个例子。在一个示例中,计算设备100的输入组件242包括鼠标、键盘、语音响应系统、摄像机、按钮、控制板、麦克风或用于检测来自人或机器的输入的任何其他类型的设备。在一些示例中,输入组件242可以是存在敏感输入组件,其可以包括存在敏感屏、触敏屏等。
计算设备100的一个或多个输出组件246可以生成输出。输出的示例是触觉、音频和视频输出。在一些示例中,计算设备100的输出组件246包括存在敏感屏、声卡、视频图形适配器卡、扬声器、阴极射线管(CRT)监视器、液晶显示器(LCD)或用于生成对人或机器的输出的任何其他类型的设备。输出组件可以包括显示组件,诸如阴极射线管(CRT)监视器、液晶显示器(LCD)、发光二极管(LED)或用于生成触觉、音频和/或视觉输出的任何其他类型的设备。
在一些示例中,计算设备100的存在敏感显示器204可以包括输入组件242和/或输出组件246的功能。在图4的示例中,存在敏感显示器204可以包括存在敏感输入组件215,诸如存在敏感屏或触敏屏。在一些示例中,存在敏感输入组件215可以检测存在敏感输入组件215处和/或附近的对象。作为一个示例性范围,存在敏感输入组件215可以检测对象,诸如存在敏感输入组件215的两英寸或更小范围内的手指或手写笔。存在敏感输入组件215可以确定检测到对象的存在敏感输入组件的位置(例如,(x,y)坐标)。在另一个示例性范围中,存在敏感输入组件215可以检测距存在敏感输入组件215两英寸或更小的对象,并且其他范围也是可能的。存在敏感输入组件215可以使用电容、电感和/或光学识别技术来确定由用户的手指选择的存在敏感输入组件215的位置。
在一些示例中,存在敏感显示器204还可以使用如参考输出组件246所描述的触觉、音频或视频刺激向用户提供输出。例如,存在敏感显示器204可以包括呈现图形用户界面的显示组件213。显示组件213可以是提供视觉输出的任何类型的输出组件,诸如参考输出组件246所述。虽然被图示为计算设备100的集成组件,但在一些示例中,存在敏感显示器204可以是与计算设备100的其他组件共享数据路径以发送和/或接收输入和输出的外部组件。例如,存在敏感显示器204可以是计算设备100的内置组件,其位于计算设备100的外包装内并且物理地连接到计算设备100的外包装(例如,移动电话上的屏幕)。在另一示例中,存在敏感显示器204可以是计算设备100的外部组件,其位于计算设备100的包装外部并且与计算设备100的包装物理地分离(例如,与平板电脑共享有线和/或无线数据路径的监视器、投影仪等)。在一些示例中,存在敏感显示器204当位于计算设备100的包装外部并且与其物理分离时,可以由两个单独的组件来实现:用于接收输入的存在敏感输入组件215和用于提供输出的显示组件213。
如图4所示,计算设备100可以包括电源258。在一些示例中,电源258可以是电池。电源258可以向计算设备100的一个或多个组件供电。电源258的示例可以包括但不一定限于具有锌碳、铅酸、镍镉(NiCd)、镍金属氢化物(NiMH)、锂离子(Li-ion)和/或锂离子聚合物(Li-ion聚合物)化学物质的电池。在一些示例中,电源258可能具有有限的容量(例如,1000-3000mAh)。
计算设备100包括支持被分成各种应用子包的应用(诸如图1的应用10、12和18)的功能,其分别包括子包20、22和24。子包可以包括资源(例如,图像、文本、视频或任何其他未编译的数据)、安全和/或签名信息、版本信息和/或相关性信息,或应用的任何其他信息。软件开发人员可以将应用设计为由多个用户定义的子包组成。每个用户定义的子包可以包括一组可执行组件,这些组件共同提供一组离散的功能。例如,软件开发人员可以设计具有多个不同用户界面的导航应用。每个用户界面可以包括一组不同的用户界面元素和相应的行为,同样地,每个用户界面可以利用一组不同的可执行组件来实现。例如,导航应用可以包括逐向导航用户界面、兴趣点用户界面(例如,在地图上显示兴趣点的详细信息)和设置用户界面。软件开发人员可以设计具有三个不同子包的应用,其中,每个子包包括一组可执行组件以实现相应用户界面的功能。
通过允许软件开发人员设计具有用于单独功能集的单独子包的应用,应用容器102可以使得应用能够在计算设备100处执行,而用于其所有子包的所有相应执行组件无需本地驻留在计算设备100上。以这种方式,应用的初始执行可能不需要检索和/或安装所有子包,而是仅需要包括实现被请求功能的可执行组件的子包的子集。此外,通过将多个可执行组件打包在单个子包中,可执行组件的检索和/或安装可以根据被请求功能(例如,渲染特定用户界面)在子包的基础上发生,而不是在逐个可执行组件的基础上检索和安装可执行组件,这可能具有较差的性能和/或导致较差的用户体验。因为应用的整个子包集不需要本地存储在计算设备100上,与需要从远程计算系统下载、安装和由计算设备100执行整个应用相比,计算设备100处的应用的初始安装和/或初始执行可能需要更少的时间。同样地,用户可以体验更多应用的响应能力和/或应用行为的性能。与下载整个应用相比,初始安装所需的网络资源也可能减少。
为了能够执行这样的应用,计算设备100包括应用容器102和运行时系统126。运行时系统126实现用于根据编写和构建或编译应用的特定编程语言构建的应用的执行模型。运行时系统126可以包括在执行期间,应用容器102可访问的一个或多个库和/或服务。如本公开中进一步所述,每个应用容器102可以对应于不同的应用。运行时系统126可以包括线程管理服务、屏幕绘制和用户界面渲染组件以及应用间和应用内消息传递服务,仅举几个示例性服务。应用容器102可以通过由运行时系统126公开的应用编程接口(API)访问服务。在一些示例中,运行时系统126可以被执行为一个或多个进程和/或线程。一个或多个处理和/或线程可以在有或没有操作系统特权的情况下执行。
在用户请求执行应用(诸如图1的应用10)的情况下,运行时系统126接收执行应用的特定功能或安装当前未安装的整个应用的请求。例如,用户可以在存在敏感显示器204处提供用户输入以安装当前没有安装在计算设备上的应用,其中,该应用可以是提供离散功能集的应用子包。存在敏感显示器204可以使运行时系统126生成对应于为应用选择图标的事件。响应于确定在存储组件248的易失性存储器中未分配用于维护应用的可安装应用子包的应用容器,运行时系统126从远程计算系统(例如,图1的应用提供商6)检索应用定义。例如,运行时系统126使通信单元244之一向远程计算系统发送对应用定义的请求。应用定义可以定义应用的可安装子包和用户指定标识符之间的多个映射。
响应于在计算设备100的易失性存储器中分配应用容器102A,运行时系统126可以至少部分地基于请求的用户指定标识符来启动应用的特定功能。响应于由在计算设备上执行的应用容器102A至少部分地基于应用定义和用户指定标识符,确定特定功能的可安装子包未被存储在计算设备100中,应用容器102A可以从远程计算系统(例如,应用提供商6)检索包括多个可执行组件的可安装子包。
不是在逐个组件的基础上下载每个可执行组件并且也不是下载应用的所有可执行组件,计算设备100可以仅检索对应于应用所需的离散功能集的一个或多个子包。此外,不是在运行时和执行期间使应用加载器识别未在本地存储的每个单独的可执行组件,以及在逐个组件的基础上单独检索和安装此类可执行组件,而是应用容器102A可以基于具有用户指定的标识符的子包的软件开发人员的标识,下载用于特定功能的子包。同样地,与在逐个组件的基础上,单独地检索和安装此类可执行组件相比,检索子包可以是粒度更小但更有效的检索机制。应用容器102A可以使用检索到的子包的一个或多个可执行组件执行应用的特定功能。
当从应用提供商6下载并安装应用子包时,应用提供商6可以确定可以从已经安装在计算设备100上的应用或应用子包(例如,在图1的示例中,应用10和12以及子包20和22)中获得应用子包的应用元素并且确定应用元素在被应用子包使用之前需要打补丁。作为响应,应用提供商6可以生成不包括已经安装在计算设备100处的应用元素的应用子包的剥离版本。在一些情况下,即使已经使用标准压缩算法压缩了应用子包的剥离版本,应用提供商6也可以应用第二、不同的压缩算法来生成进一步压缩的、因此尺寸更小的剥离应用子包的版本,以进一步减少发送到计算设备100所需的数据量。
应用提供商6还可以生成将由计算设备100应用到应用元素的补丁,以便将应用元素改变为应用子包所需的应用元素的版本。应用提供商6压缩补丁并使用与计算设备100建立的下载流之一将补丁发送到计算设备2。应用提供商6还使用与计算设备100建立的另一个下载流,将应用子包的剥离版本发送到计算设备100。通常,压缩补丁的大小比应用子包的剥离版本更小,因此将需要更少的时间来传输到计算设备100。
由于对压缩应用元素(诸如库)应用补丁会产生低效的元素的补丁版本(即,与将补丁应用到同一应用元素的未压缩版本时相比,尺寸更大),优选的是将补丁应用于应用元素的未压缩版本。因此,根据本公开的技术,当应用提供商6正在创建和发送补丁和应用子包的剥离版本时,运行时系统126可以创建将由应用子包重复使用的一个或多个应用元素的副本。如果任何应用元素以压缩格式存储在计算设备100处,则运行时系统126可以解压缩(多个)压缩应用元素的副本。在各种情况下,与下载补丁所需的时间相比,创建应用元素的副本和解压缩(多个)压缩应用元素的副本可能花费更少的时间。
一旦将每个补丁下载到计算设备2,运行时系统126就解压缩每个补丁并将未压缩的补丁应用到应用元素的相应未压缩副本。在应用子包要求应用元素以压缩格式存储的情况下,在应用补丁之后,运行时系统126重新压缩应用元素的补丁版本。通常,与下载应用子包的剥离版本相比,该下载、解压缩、打补丁和重新压缩处理所需的时间更少。以这种方式,即使压缩应用元素在被应用子包使用之前可能需要打补丁,本公开的技术也使得当下载和安装应用子包时,能够使用已经安装在计算设备100上的压缩应用元素,无需产生应用元素的次优补丁版本。
在一些示例中,每个相应的应用容器102可以对应于不同的应用。例如,操作系统可以包括用户界面,其允许用户基于对应于不同应用的各个图标来选择不同的应用(例如,从菜单或图标网格)。例如,用户可以从操作系统用户界面选择电子邮件客户端图标,这使得利用其自己的单独应用容器执行电子邮件客户端应用。与应用容器不同,Web浏览器的扩展或其他子应用(例如,插件、JavaScript、Java虚拟机等)可能不会被表示为要在操作系统的用户界面中发起的单独应用。例如,即使Web浏览器为选项卡式界面的每个选项卡创建了单独的进程,每个选项卡也可能不会被表示为作为可独立发起的应用的、操作系统的用户界面内的单独应用。
如本公开中所描述的,应用容器可以不同于Web浏览器,因为应用容器可以包括容器运行时。如本公开中所描述的,应用容器的容器运行时可以包括库,但是也可能使操作系统API向应用容器内的子包的可执行组件公开。与应用容器不同,Web浏览器可能不会使此类操作系统API向Web浏览器内的扩展或其他子应用公开。
如本公开中所描述的,应用容器可以不同于Web浏览器,因为应用容器可以从应用容器外部的(例如,运行时系统或操作系统中的)管理器组件接收用户指定的标识符(例如,URI),使得在无需额外的用户干预的情况下,检索改变应用的执行行为或外观的子包。用户指定的标识符可以源自在同一计算设备或不同计算设备上执行的其他应用,并且在被应用容器接收时,可以自动地改变应用的执行行为或外观。相反,Web浏览器可以在Web浏览器本身内接收用户输入(例如,为URL输入文本),而不是从应用容器外部的源(例如,管理器组件或Web浏览器外部的另一个应用)接收用户输入。此外,Web浏览器可能不包括路由器和/或应用定义,如本公开的应用容器内所述,以执行用户指定标识符的查找并改变由应用容器表示的应用的执行。与应用容器不同,Web浏览器可能不包括回调接口,该接口接收和缓冲生命周期调用以改变应用容器内的子包的操作。
在一些示例中,Web浏览器可以包括核心功能(例如,渲染引擎)和一个或多个第三方扩展、插件和/或子应用。与应用容器不同,在所有Web浏览器的核心功能都未本地存储并可用于计算设备以执行的情况下,Web浏览器可能无法正常运行或根本无法执行。相反,应用容器可以在本地存储其核心功能的子集(例如,仅用于用户界面子集的子包)并且可用于计算设备以执行的情况下,就可以正常运行。
图5是图示根据本公开的一个或多个方面的由计算系统执行的示例性操作的流程图,该计算系统包括在计算设备上执行的一个或多个处理器和在应用提供商服务器处执行的一个或多个处理器。如图5所示,在下文中,在图1、2和4所示的计算设备2的上下文中描述操作502、516、518、520、522、524和526,以及在下文中,在图1和3所示的应用提供商服务器4的上下文中描述操作504、506、508、510、512和514。
计算设备2可以接收用户输入以安装当前未安装在计算设备上的应用,其中,多个应用当前被安装在计算设备上,并且其中,多个应用中的每一个应用包括相应的多个应用元素。响应于接收到用户输入,在操作中,计算设备可以向应用提供商服务器4发送请求以下载要安装在计算设备2上的应用(例如,应用18)(502)。例如,该请求可以包括应用18的标识符,该标识符使得计算设备2能够从存储在应用提供商服务器4处的应用中识别应用18。虽然该示例被描述为应用18的初始安装,但这些技术也可以应用于已经安装在计算设备2上的应用的子包的安装。例如,这些技术可以应用于应用18的子包24B的安装,其中,应用18的其他应用子包(例如,子包24A和24O)已经安装在计算设备2上。
应用提供商服务器4接收请求(504),并且作为响应,应用提供商服务器4可以确定是否可以从已经安装在计算设备2上的另一应用获得应用18的一个或多个应用元素,以及任何可重复使用的应用元素是否需要打补丁(506)。如果应用提供商服务器4确定可以从已经安装在计算设备2上的另一应用获得应用18的一个或多个应用元素,则应用提供商服务器4可以抑制将应用18的一个或多个应用元素发送到计算设备2,而是向计算设备2发送从安装在计算设备2上的另一应用获得应用18的一个或多个元素的请求(508)。该请求可以包括当前安装在计算设备上、在安装应用18期间将重复使用的应用的(多个)应用元素的指示。
对于可以从安装在计算设备2上的另一应用获得并且需要打补丁的应用18的应用元素,应用提供商服务器4生成必要的补丁(或者例如从存储库中检索先前生成的补丁)并将补丁发送到计算设备2(510)。在各种情况下,使用在计算设备2和应用提供商服务器4之间建立的多个下载流之一来发送补丁。该请求可以包括当前安装在计算设备上、在安装应用18之前将要被打补丁的应用的应用元素的指示。
应用提供商服务器4生成不包括已经安装在计算设备2上的应用元素的应用18的版本(512)。所生成的应用18的版本可以被称为剥离应用。在生成应用18的剥离版本之后,应用提供商服务器将剥离版本发送到计算设备2以供下载(514)。在各种情况下,可以使用来自计算设备2和应用提供商服务器4之间的多个下载流的另一个下载流来发送剥离应用。该另一下载流通常不同于用于将补丁发送到计算设备2的下载流.
当应用提供商服务器4正在生成补丁和剥离应用时,计算设备2可以至少开始创建将被重复使用的应用元素的副本(516),并且在应用元素需要被打补丁并且是以压缩格式存储的情况下,至少开始解压缩应用元素(518)。由于应用提供商服务器4发送的补丁是以压缩格式发送的,因此在计算设备2接收到补丁之后,计算设备2解压缩补丁(520)。在应用元素被打补丁和补丁被解压缩之后,计算设备2将补丁应用到应用元素(522)并且将应用元素重新压缩成应用18可用的压缩版本(524)。通常,这些解压缩、打补丁和重新压缩步骤在从应用提供商服务器4下载剥离应用的同时发生。
计算设备2可以使用应用元素的补丁版本、已经存储在计算设备2但不需要打补丁的应用元素的任何其他副本以及从应用提供商服务器4下载的应用18的剥离版本来安装应用18(526)。可选地,在两个或更多个单独的流上执行剥离的应用和补丁的下载。在一些示例中,在下载应用的剥离版本的同时执行解压缩补丁、应用补丁和压缩补丁应用元素。在一些示例中,在下载补丁的同时对第一应用元素进行解压缩。与下载整个应用相比,在不增加安装延迟的情况下,这些方法可以减少网络资源的使用。
以下编号的示例可以说明本公开的一个或多个方面。
示例1:一种方法,包括:由计算设备接收用户输入以安装所述计算设备上当前未安装的应用,其中,在所述计算设备上当前安装了多个应用,以及其中,所述多个应用中的每一个应用包括相应的多个应用元素;响应于接收到所述用户输入,向所述应用提供商发送安装所述应用的请求;从所述应用提供商接收来自当前安装在所述计算设备上的所述多个应用包括的相应多个应用元素中的一个或多个应用元素的指示,其中,所述一个或多个应用元素将在安装所述应用期间被重复使用,其中,所述一个或多个应用元素包括将从当前版本更新到所述应用所需的不同版本的第一应用元素,以及其中,所述第一应用元素被以压缩格式存储在所述计算设备上;由所述计算设备从所述应用提供商下载要应用于所述第一应用元素的补丁和不包括在安装所述应用期间要重复使用的一个或多个应用元素的应用的剥离版本;由所述计算设备解压缩所述第一应用元素以生成所述第一应用元素的解压缩版本;由所述计算设备解压缩所述补丁以生成所述补丁的解压缩版本;由所述计算设备将所述补丁的解压缩版本应用到所述第一应用元素的解压缩版本以生成补丁应用元素;由所述计算设备压缩所述补丁应用元素以生成压缩补丁应用元素,所述压缩补丁应用元素是所述应用所需的所述第一应用元素的不同版本;以及由所述计算设备使用所述压缩补丁应用元素、所述应用的剥离版本以及除所述第一应用元素之外的一个或多个应用元素,在所述计算设备上安装所述应用。
示例2。如示例1所述的方法,其中:所述计算设备上当前未安装的应用是用于所述计算设备上已经安装的所述多个应用中的特定应用的应用子包;所述应用子包当前未安装在所述计算设备上;所述特定应用包括多个应用子包;所述多个应用子包的子集当前安装在所述计算设备上;所述特定应用的多个应用子包中的每个应用子包可以单独的安装,并且提供用于所述特定应用的一组离散的功能;应用的剥离版本是应用子包的剥离版本;以及安装应用包括使用所述压缩补丁应用元素、所述应用子包的剥离版本以及除所述第一应用元素之外的一个或多个应用元素,将所述应用子包安装在所述计算设备上。
示例3。如示例2所述的方法,其中,在所述计算设备上执行所述特定应用的同时,执行接收所述一个或多个应用元素的指示、下载所述补丁和所述应用子包的剥离版本、解压缩所述第一应用元素、解压缩所述补丁、应用所述补丁的解压缩版本、压缩所述补丁应用元素以及安装所述应用子包。
示例4。如示例2或示例3所述的方法,其中:在所述计算设备上执行所述特定应用的同时接收所述用户输入;以及安装所述应用的用户输入是请求所述特定应用的先前未使用的功能的用户输入。
示例5。如示例4所述的方法,其中,由在所述计算设备上执行的应用容器管理所述特定应用的执行,所述方法进一步包括:响应于接收到所述用户输入,由所述应用容器确定提供由所述用户输入请求的所述特定应用的功能的可安装应用子包是否没有被安装在所述计算设备上;以及响应于确定所述可安装应用子包未被安装在所述计算设备上,由所述应用容器生成安装所述应用子包的请求。
示例6。如示例1至5中的任一项所述的方法,其中,下载所述补丁和所述应用的剥离版本包括:由所述计算设备启动下载要应用于所述第一应用元素的补丁;以及由所述计算设备启动下载所述应用的剥离版本,所述剥离版本不包括在安装所述应用期间要重复使用的一个或多个应用元素。
示例7。如示例1至6中的任一项所述的方法,进一步包括:由所述计算设备与所述应用提供商建立至少两个下载流,其中,启动下载所述补丁包括使用来自所述至少两个下载流中的第一下载流来启动下载所述补丁,以及其中,启动下载所述应用的剥离版本包括使用来自所述至少两个下载流的第二下载流启动下载所述应用的剥离版本。
示例8。如示例1至7中的任一项所述的方法,其中,在下载所述应用的剥离版本的同时,执行解压缩所述补丁、应用所述补丁以及压缩所述补丁应用元素。
示例9。如示例1至8中的任一项所述的方法,其中,在下载所述补丁的同时执行解压缩所述第一应用元素。
示例10。如示例1至9中的任一项所述的方法,进一步包括:由所述计算设备从当前存储在所述计算设备上的一个或多个应用元素创建每个应用元素的相应副本,包括所述第一应用元素的副本。
示例11.一种计算设备,包括:一个或多个处理器;存在敏感显示器,所述存在敏感显示器检测用户输入以安装所述计算设备上当前未安装的应用;通信单元;以及计算机可读存储介质,所述计算机可读存储介质存储多个应用,其中,所述多个应用中的每一个应用包括相应的多个应用元素,并且存储指令,所述指令在由所述一个或多个处理器执行时,使所述一个或多个处理器:响应于接收到所述用户输入,经由所述通信单元,向应用提供商发送安装所述应用的请求;经由所述通信单元,从所述应用提供商接收来自当前安装在所述计算设备上的所述多个应用包括的相应多个应用元素中的一个或多个应用元素的指示,其中,所述一个或多个应用元素将在安装所述应用期间被重复使用,其中,所述一个或多个应用元素包括将从当前版本更新到所述应用所需的不同版本的第一应用元素,以及其中,所述第一应用元素被以压缩格式存储在所述计算设备上;经由所述通信单元,从所述应用提供商检索要应用于所述第一应用元素的补丁和不包括在安装所述应用期间要重复使用的一个或多个应用元素的应用的剥离版本;解压缩所述第一应用元素以生成所述第一应用元素的解压缩版本;解压缩所述补丁以生成所述补丁的解压缩版本;将所述补丁的解压缩版本应用到所述第一应用元素的解压缩版本以生成补丁应用元素;压缩所述补丁应用元素以生成压缩补丁应用元素,所述压缩补丁应用元素是所述应用所需的所述第一应用元素的不同版本;以及使用所述压缩补丁应用元素、所述应用的剥离版本以及除所述第一应用元素之外的一个或多个应用元素,在所述计算设备上安装所述应用。
示例12。如示例11所述的计算设备,其中:所述计算设备上当前未安装的应用是用于所述计算设备上已经安装的所述多个应用中的特定应用的应用子包;所述应用子包当前未安装在所述计算设备上;所述特定应用包括多个应用子包;所述多个应用子包的子集当前安装在所述计算设备上;所述特定应用的多个应用子包中的每个应用子包可以单独的安装,并且提供用于所述特定应用的一组离散的功能;应用的剥离版本是应用子包的剥离版本;并且指令使一个或多个处理器安装应用包括使一个或多个处理器使用所述压缩补丁应用元素、所述应用子包的剥离版本以及除所述第一应用元素之外的一个或多个应用元素,将所述应用子包安装在所述计算设备上。
示例13。示例12所述的计算设备,其中,在所述计算设备上执行所述特定应用的同时,指令使得一个或多个处理器接收所述一个或多个应用元素的指示、下载所述补丁和所述应用子包的剥离版本、解压缩所述第一应用元素、解压缩所述补丁、应用所述补丁的解压缩版本、压缩所述补丁应用元素以及安装所述应用子包。
示例14。如示例12或示例13所述的计算设备,其中:在所述计算设备上执行所述特定应用的同时接收所述用户输入;以及安装所述应用的用户输入是请求所述特定应用的以前未使用的功能的用户输入。
示例15。如示例14所述的计算设备,其中,由在所述计算设备上执行的应用容器管理所述特定应用的执行,并且其中,用于在计算设备上执行的应用容器的指令使得一个或多个处理器:响应于接收到所述用户输入,确定提供由所述用户输入请求的所述特定应用的功能的可安装应用子包是否没有被安装在所述计算设备上;以及响应于确定所述可安装应用子包未被安装在所述计算设备上,生成安装所述应用子包的请求。
示例16。如示例11至15中的任一项所述的计算设备,其中,使得一个或多个处理器下载所述补丁和所述应用的剥离版本的指令包括使得一个或多个处理器启动下载要应用于所述第一应用元素的补丁;以及启动下载所述应用的剥离版本的指令,所述剥离版本不包括在安装所述应用期间要重复使用的一个或多个应用元素。
示例17。如示例11至16中的任一项所述的计算设备,其中,指令进一步使得一个或多个处理器与所述应用提供商建立至少两个下载流,其中,使得一个或多个处理器启动下载所述补丁的指令使得一个或多个处理器使用来自所述至少两个下载流中的第一下载流来启动下载所述补丁的指令,以及其中,使得一个或多个处理器启动下载所述应用的剥离版本的指令包括使得一个或多个处理器使用来自所述至少两个下载流的第二下载流启动下载所述应用的剥离版本的指令。
示例18。如示例11至17中的任一项所述的计算设备,其中,在下载所述应用的剥离版本的同时,执行使得一个或多个处理器解压缩所述补丁、应用所述补丁以及压缩所述补丁应用元素的指令。
示例19。如示例11至18中的任一项所述的计算设备,其中,在下载所述补丁的同时,执行使得一个或多个处理器解压缩所述第一应用元素的指令。
示例20。如示例11至19中的任一项所述的计算设备,其中,指令进一步使得一个或多个处理器从当前存储在所述计算设备上的一个或多个应用元素创建每个应用元素的相应副本,包括所述第一应用元素的副本。
示例21。一种编码有指令的非暂时性计算机可读存储介质,所述指令当被执行时,使计算设备的一个或多个处理器:接收用户输入的指示以安装所述计算设备上当前未安装的应用,其中,在所述计算设备上当前安装了多个应用,以及其中,所述多个应用中的每一个包括相应的多个应用元素;响应于接收到所述用户输入的指示,向所述应用提供商发送安装所述应用的请求;从所述应用提供商接收来自当前安装在所述计算设备上的所述多个应用包括的相应多个应用元素中的一个或多个应用元素的指示,其中,所述一个或多个应用元素将在安装所述应用期间被重复使用,其中,所述一个或多个应用元素包括将从当前版本更新到所述应用所需的不同版本的第一应用元素,以及其中,所述第一应用元素被以压缩格式存储在所述计算设备上;从所述应用提供商下载要应用于所述第一应用元素的补丁和不包括在安装所述应用期间要重复使用的一个或多个应用元素的应用的剥离版本;解压缩所述第一应用元素以生成所述第一应用元素的解压缩版本;解压缩所述补丁以生成所述补丁的解压缩版本;将所述补丁解压缩版本应用到所述第一应用元素的解压缩版本以生成补丁应用元素;压缩所述补丁应用元素以生成压缩补丁应用元素,所述压缩补丁应用元素是所述应用所需的所述第一应用元素的不同版本;以及使用所述压缩补丁应用元素、所述应用的剥离版本以及除所述第一应用元素之外的一个或多个应用元素,在所述计算设备上安装所述应用。
在一个或多个示例中,所描述的功能可以以硬件、软件、固件或其任何组合来实现。如果以软件实现,则功能可以作为一个或多个指令或代码存储在计算机可读介质上或通过计算机可读介质传输并由基于硬件的处理单元执行。计算机可读介质可以包括计算机可读存储介质,其对应于诸如数据存储介质的有形介质,或者通信介质,包括例如,根据通信协议,便于将计算机程序从一个地方转移到另一个地方的任何介质。以这种方式,计算机可读介质通常可以对应于(1)有形的计算机可读存储介质,其是非暂时性的或(2)诸如信号或载波的通信介质。数据存储介质可以是可由一台或多台计算机或一个或多个处理器访问以检索用于实现本公开中描述的技术的指令、代码和/或数据结构的任何可用介质。计算机程序产品可以包括计算机可读介质。
通过示例而非限制的方式,这种计算机可读存储装置介质可以包括RAM、ROM、EEPROM、CD-ROM或其他光盘存储、磁盘存储或其他磁性存储设备、闪存或可用于以指令或数据结构形式存储所需程序代码并且可以由计算机访问的任何其他介质。而且,任何连接都适当地称为计算机可读介质。例如,如果使用同轴电缆、光纤电缆、双绞线、数字用户线(DSL)或无线技术(诸如红外、无线电和微波)从网站、服务器或其他远程源发送指令,则介质的定义包括同轴电缆、光纤电缆、双绞线、DSL或无线技术(例如红外、无线电和微波)。但是,应当理解到,计算机可读存储介质以及数据存储介质不包括连接、载波、信号或其他瞬态介质,而是针对非瞬态的有形存储介质。本文使用的磁盘和光盘包括光盘(CD)、激光光盘、光盘、数字多功能光盘(DVD)、软盘和蓝光光盘,其中光盘通常以磁性方式复制数据,而光盘则通过激光光学方式复制数据。上述的组合也应包括在计算机可读介质的范围内。
指令可以由一个或多个处理器(诸如一个或多个数字信号处理器(DSP)、通用微处理器、专用集成电路(ASIC)、现场可编程逻辑阵列(FPGA)或其他等效集成或分立逻辑电路)执行。因此,如本文中所使用的,术语“处理器”可以指任何前述结构或适合于实现本文中所描述的技术的任何其他结构。另外,在一些方面,本文描述的功能可以在专用硬件和/或软件模块内提供。同样,该技术可以在一个或多个电路或逻辑元件中完全实现。
可以在包括无线手持机、集成电路(IC)或一组IC(例如,芯片组)在内的多种设备或装置中实现本公开的技术。在本公开中描述各种组件、模块或单元以强调经配置以执行所揭示技术的装置的功能方面,但不一定需要由不同硬件单元来实现。相反,如上所述,各种单元可以组合在硬件单元中,或者由包括如上所述的一个或多个处理器互操作硬件单元的集合结合合适的软件和/或固件提供。
已经描述了本公开的各种方面。这些和其他方面在所附权利要求的范围内。

Claims (14)

1.一种方法,包括:
由计算设备接收用户输入以安装所述计算设备上当前未安装的应用,其中,在所述计算设备上当前安装了多个应用,以及其中,所述多个应用中的每一个应用包括相应的多个应用元素;
响应于接收到所述用户输入,由所述计算设备向应用提供商发送安装所述应用的请求;
由所述计算设备从所述应用提供商接收来自当前安装在所述计算设备上的所述多个应用中包括的所述相应的多个应用元素中的一个或多个应用元素的指示,其中,所述一个或多个应用元素将在安装所述应用期间被重复使用,其中,所述一个或多个应用元素包括将从当前版本更新到所述应用所需的不同版本的第一应用元素,以及其中,所述第一应用元素被以压缩格式存储在所述计算设备上;
由所述计算设备从所述应用提供商下载要应用于所述第一应用元素的补丁和不包括在安装所述应用期间要重复使用的所述一个或多个应用元素的所述应用的剥离版本;
由所述计算设备解压缩所述第一应用元素以生成所述第一应用元素的解压缩版本;
由所述计算设备解压缩所述补丁以生成所述补丁的解压缩版本;
由所述计算设备将所述补丁的所述解压缩版本应用到所述第一应用元素的所述解压缩版本以生成补丁应用元素;
由所述计算设备压缩所述补丁应用元素以生成压缩补丁应用元素,所述压缩补丁应用元素是所述应用所需的所述第一应用元素的不同版本;以及
由所述计算设备使用所述压缩补丁应用元素、所述应用的所述剥离版本以及除所述第一应用元素之外的一个或多个应用元素,在所述计算设备上安装所述应用。
2.如权利要求1所述的方法,其中:
所述计算设备上当前未安装的所述应用是用于所述计算设备上已经安装的所述多个应用中的特定应用的应用子包;
所述应用子包当前未安装在所述计算设备上;
所述特定应用包括多个应用子包;
所述多个应用子包的子集当前安装在所述计算设备上;
所述特定应用的所述多个应用子包中的每个应用子包能够单独地安装,并且提供用于所述特定应用的一组离散的功能;以及
安装所述应用包括使用所述压缩补丁应用元素、所述应用子包的所述剥离版本以及除所述第一应用元素之外的所述一个或多个应用元素,将所述应用子包安装在所述计算设备上。
3.如权利要求2所述的方法,其中,在所述计算设备上执行所述特定应用的同时,执行接收所述一个或多个应用元素的指示、下载所述补丁和所述应用子包的所述剥离版本、解压缩所述第一应用元素、解压缩所述补丁、应用所述补丁的所述解压缩版本、压缩所述补丁应用元素以及安装所述应用子包。
4.如权利要求2所述的方法,其中:
在所述计算设备上执行所述特定应用的同时接收所述用户输入;以及
安装所述应用的所述用户输入是请求所述特定应用的先前未使用的功能的用户输入。
5.如权利要求4所述的方法,
其中,由在所述计算设备上执行的应用容器管理所述特定应用的执行,
所述方法进一步包括:
响应于接收到所述用户输入,由所述应用容器确定提供由所述用户输入请求的所述特定应用的功能的可安装应用子包是否没有被安装在所述计算设备上;以及
响应于确定所述可安装应用子包未被安装在所述计算设备上,由所述应用容器生成安装所述应用子包的所述请求。
6.如权利要求1和2中的任一项所述的方法,
其中,下载所述补丁和所述应用的所述剥离版本包括:
由所述计算设备启动下载要应用于所述第一应用元素的所述补丁;以及
由所述计算设备启动下载所述应用的所述剥离版本,所述剥离版本不包括在安装所述应用期间要重复使用的所述一个或多个应用元素。
7.如权利要求6所述的方法,进一步包括:
由所述计算设备与所述应用提供商建立至少两个下载流,
其中,启动下载所述补丁包括使用来自所述至少两个下载流中的第一下载流来启动下载所述补丁,以及
其中,启动下载所述应用的所述剥离版本包括使用来自所述至少两个下载流的第二下载流启动下载所述应用的所述剥离版本。
8.如权利要求6所述的方法,其中,在下载所述应用的所述剥离版本的同时,执行解压缩所述补丁、应用所述补丁以及压缩所述补丁应用元素。
9.如权利要求6所述的方法,其中,在下载所述补丁的同时执行解压缩所述第一应用元素。
10.如权利要求1、2和6中的任一项所述的方法,进一步包括:
由所述计算设备从当前存储在所述计算设备上的所述一个或多个应用元素创建每个应用元素的相应副本,包括所述第一应用元素的副本。
11.一种计算设备,包括用于执行如权利要求1-10中的任一项所述的方法的装置。
12.一种编码有指令的计算机可读存储介质,所述指令在被执行时使计算设备的一个或多个处理器执行如权利要求1-10中的任一项所述的方法。
13.一种计算设备,包括:
一个或多个处理器;
存在敏感显示器,所述存在敏感显示器检测用户输入以安装所述计算设备上当前未安装的应用;
通信单元;以及
计算机可读存储介质,所述计算机可读存储介质存储多个应用,其中,所述多个应用中的每一个应用包括相应的多个应用元素,并且存储指令,所述指令在由所述一个或多个处理器执行时使所述一个或多个处理器:
响应于接收到所述用户输入,经由所述通信单元向应用提供商发送安装所述应用的请求;
经由所述通信单元从所述应用提供商接收来自当前安装在所述计算设备上的所述多个应用中包括的所述相应的多个应用元素中的一个或多个应用元素的指示,其中,所述一个或多个应用元素将在安装所述应用期间被重复使用,其中,所述一个或多个应用元素包括将从当前版本更新到所述应用所需的不同版本的第一应用元素,以及其中,所述第一应用元素被以压缩格式存储在所述计算设备上;
经由所述通信单元从所述应用提供商检索要应用于所述第一应用元素的补丁和不包括在安装所述应用期间要重复使用的所述一个或多个应用元素的所述应用的剥离版本;
解压缩所述第一应用元素以生成所述第一应用元素的解压缩版本;
解压缩所述补丁以生成所述补丁的解压缩版本;
将所述补丁的所述解压缩版本应用到所述第一应用元素的所述解压缩版本以生成补丁应用元素;
压缩所述补丁应用元素以生成压缩补丁应用元素,所述压缩补丁应用元素是所述应用所需的所述第一应用元素的不同版本;以及
使用所述压缩补丁应用元素、所述应用的所述剥离版本以及除所述第一应用元素之外的一个或多个应用元素,在所述计算设备上安装所述应用。
14.一种编码有指令的非暂时性计算机可读存储介质,所述指令当被执行时使计算设备的一个或多个处理器:
接收用户输入的指示以安装所述计算设备上当前未安装的应用,其中,在所述计算设备上当前安装了多个应用,以及其中,所述多个应用中的每一个应用包括相应的多个应用元素;
响应于接收到所述用户输入的指示,向应用提供商发送安装所述应用的请求;
从所述应用提供商接收来自当前安装在所述计算设备上的所述多个应用中包括的所述相应的多个应用元素中的一个或多个应用元素的指示,其中,所述一个或多个应用元素将在安装所述应用期间被重复使用,其中,所述一个或多个应用元素包括将从当前版本更新到所述应用所需的不同版本的第一应用元素,以及其中,所述第一应用元素被以压缩格式存储在所述计算设备上;
从所述应用提供商下载要应用于所述第一应用元素的补丁和不包括在安装所述应用期间要重复使用的所述一个或多个应用元素的所述应用的剥离版本;
解压缩所述第一应用元素以生成所述第一应用元素的解压缩版本;
解压缩所述补丁以生成所述补丁的解压缩版本;
将所述补丁的所述解压缩版本应用到所述第一应用元素的所述解压缩版本以生成补丁应用元素;
压缩所述补丁应用元素以生成压缩补丁应用元素,所述压缩补丁应用元素是所述应用所需的所述第一应用元素的不同版本;以及
使用所述压缩补丁应用元素、所述应用的所述剥离版本以及除所述第一应用元素之外的一个或多个应用元素,在所述计算设备上安装所述应用。
CN201980088644.1A 2019-09-03 2019-09-03 加速应用和子包安装 Pending CN113302585A (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US2019/049316 WO2021045723A1 (en) 2019-09-03 2019-09-03 Accelerating application and sub-package installations

Publications (1)

Publication Number Publication Date
CN113302585A true CN113302585A (zh) 2021-08-24

Family

ID=67957447

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201980088644.1A Pending CN113302585A (zh) 2019-09-03 2019-09-03 加速应用和子包安装

Country Status (4)

Country Link
US (2) US11416232B2 (zh)
EP (2) EP4296849A1 (zh)
CN (1) CN113302585A (zh)
WO (1) WO2021045723A1 (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2021045723A1 (en) * 2019-09-03 2021-03-11 Google Llc Accelerating application and sub-package installations
TWI737106B (zh) * 2019-12-31 2021-08-21 啟碁科技股份有限公司 韌體更新方法和韌體更新系統
WO2023055438A1 (en) * 2021-09-29 2023-04-06 Intel Corporation Dynamic resource determination for system update

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1777867A (zh) * 2003-12-15 2006-05-24 微软公司 使用增量压缩打补丁更新文件的系统和方法
US20100257520A1 (en) * 2009-04-07 2010-10-07 Navarro Luis A Determining and Downloading Portions of a Software Application in a Computer System
CA2786879A1 (en) * 2011-11-02 2013-05-02 Research In Motion Limited Method and system for on-demand patch generation and management
CN108886511A (zh) * 2015-12-11 2018-11-23 皇家Kpn公司 基于补丁来更新清单文件的部分

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5619698A (en) * 1995-05-05 1997-04-08 Apple Computer, Inc. Method and apparatus for patching operating systems
US7665081B1 (en) * 2006-05-06 2010-02-16 Kaspersky Lab, Zao System and method for difference-based software updating
WO2009132261A1 (en) * 2008-04-25 2009-10-29 Vmware, Inc. Updating a file using differences and file format therefor
US9720674B1 (en) * 2008-05-05 2017-08-01 Open Invention Network, Llc Automating application of software patches to a server having a virtualization layer
US8954949B2 (en) * 2010-10-11 2015-02-10 International Business Machines Corporation Smart patch delivery system
EP2680135B1 (en) * 2012-06-27 2021-03-10 Google LLC Methods for updating applications
US9075693B2 (en) * 2012-06-27 2015-07-07 Google Inc. Methods for updating applications
US9471300B2 (en) * 2012-07-26 2016-10-18 Utc Fire And Security America Corporation, Inc. Wireless firmware upgrades to an alarm security panel
CN103051723B (zh) * 2012-12-27 2016-08-31 广州市动景计算机科技有限公司 一种增量升级方法及服务器、终端
CN105404521B (zh) * 2014-05-30 2017-05-31 广州市动景计算机科技有限公司 一种增量升级方法及相关装置
EP2993578A1 (en) * 2014-09-02 2016-03-09 Gemalto M2M GmbH Method for adapting firmware of a wireless communication device
CN105808284B (zh) * 2014-12-31 2019-10-22 广州市动景计算机科技有限公司 一种增量升级方法及应用其的服务器
US20180150256A1 (en) * 2016-11-29 2018-05-31 Intel Corporation Technologies for data deduplication in disaggregated architectures
US10402273B2 (en) * 2016-12-14 2019-09-03 Microsoft Technology Licensing, Llc IoT device update failure recovery
US10827034B2 (en) * 2017-07-14 2020-11-03 Vmware, Inc. Providing application versions via delta volumes
JP2019036238A (ja) * 2017-08-21 2019-03-07 株式会社東芝 更新制御装置、端末、更新制御方法およびプログラム
EP3759885B1 (en) * 2018-02-27 2022-08-17 Excelfore Corporation Broker-based bus protocol and multi-client architecture
US11055087B2 (en) * 2018-03-16 2021-07-06 Google Llc Leveraging previously installed application elements to install an application
US11138295B2 (en) * 2019-03-11 2021-10-05 Good Way Technology Co., Ltd. Method for securely updating firmware components and docking station using the same
WO2021045723A1 (en) * 2019-09-03 2021-03-11 Google Llc Accelerating application and sub-package installations
US11080169B2 (en) * 2019-11-13 2021-08-03 Google Llc Framework for providing binary release isolation for parts of a web application

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1777867A (zh) * 2003-12-15 2006-05-24 微软公司 使用增量压缩打补丁更新文件的系统和方法
US20100257520A1 (en) * 2009-04-07 2010-10-07 Navarro Luis A Determining and Downloading Portions of a Software Application in a Computer System
CA2786879A1 (en) * 2011-11-02 2013-05-02 Research In Motion Limited Method and system for on-demand patch generation and management
CN108886511A (zh) * 2015-12-11 2018-11-23 皇家Kpn公司 基于补丁来更新清单文件的部分

Also Published As

Publication number Publication date
US11416232B2 (en) 2022-08-16
WO2021045723A1 (en) 2021-03-11
EP3884375A1 (en) 2021-09-29
US20220334815A1 (en) 2022-10-20
US20220137944A1 (en) 2022-05-05
EP3884375B1 (en) 2023-11-01
EP4296849A1 (en) 2023-12-27

Similar Documents

Publication Publication Date Title
US10963270B2 (en) Identifiers across application instances
US10445083B2 (en) Application containers with dynamic sub-package loading
US20220334815A1 (en) Accelerating application and sub-package installations
US11288059B2 (en) Leveraging previously installed application elements to install an application
KR20160014629A (ko) 업데이트에 대한 기지의 의존관계를 관리하는 기법
US10394768B2 (en) Selective data migration on schema breaking changes
US20210373881A1 (en) Memory efficient software patching for updating applications on computing devices
CN113568645A (zh) 软件更新方法、装置、电子设备和存储介质
CN117112500B (zh) 一种资源管理方法、装置、设备和存储介质
CN115826981A (zh) 实时操作系统驱动适配方法、装置、电子设备和可读介质
CN112947846A (zh) 对象存储系统的批处理任务执行方法、装置及电子设备
CN115951903A (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