Accelerated application and subpackage installation

By reusing application elements on the device, a method for downloading stripped and patched versions is created, solving the problem of wasted network resources and time in traditional installation methods and achieving more efficient application installation.

CN119883296BActive Publication Date: 2026-02-17GOOGLE LLC
View PDF 2 Cites 0 Cited by

Patent Information

Application Number
CN202411684722.3
Authority / Receiving Office
CN · China
Patent Type
Patents(China)
Current Assignee / Owner
Filing Date
2019-09-03
Publication Date
2026-02-17
Estimated Expiration
2039-09-03

AI Technical Summary

Technical Problem

Existing technologies require downloading and installing a large number of application elements during application installation, resulting in a waste of network resources and time. This is especially true in devices with limited storage and memory. Traditional compression schemes lead to excessively large patch versions, limiting the number of application elements that can be reused.

Method used

By identifying reusable application elements from applications already installed on the device, stripped and patched versions are created. The patched and stripped applications or application sub-packages are downloaded and decompressed separately using two download streams, reducing network resource usage and installation time.

Benefits of technology

It reduces the use of network resources and application installation time, improves the speed of application installation on computing devices, and optimizes the efficiency of storage and memory usage.

✦ Generated by Eureka AI based on patent content.

Smart Images

  • Figure CN119883296B_ABST
    Figure CN119883296B_ABST
Patent Text Reader

Abstract

This application discloses accelerating application and subpackage installation. In some examples, a method includes downloading, from an application provider, a patch to be applied to a first application element and a stripped version of an application that does not include one or more application elements to be reused during application installation, decompressing the first application element to generate a decompressed version of the first application element, and decompressing the patch to generate a decompressed version of the patch. The method can also include applying the decompressed version of the patch to the decompressed version of the first application element to generate a patched application element, compressing the patched application element to generate a compressed patched application element, and installing the application using the compressed patched application element, the stripped version of the application, and one or more application elements other than the first application element.
Need to check novelty before this filing date? Find Prior Art

Description

[0001] Case Analysis

[0002] This application is a divisional application of Chinese invention patent application 201980088644.1, filed on September 3, 2019. Technical Field

[0003] This disclosure relates to accelerating application and subpackage installation. Background Technology

[0004] Computing devices can perform various functions, such as running applications and receiving user input and output information for display. For example, computing devices can run applications such as email clients, travel assistants, and messaging clients. Software developers can write such applications using human-readable source code compiled into machine-readable code. In some cases, machine-readable code can be organized into discrete executable components, such as compiled classes in object-oriented design. An application can include one or more executable components that implement various functionalities. In some distributed environments, user computing devices (e.g., smartphones) can use media store apps to search for and install applications provided by remote computing systems. Typically, when a user selects an application from a media store app to install on their user computing device, the remote computing system sends a single file containing all executable components to execute all the application's functionalities, regardless of whether the user actually uses all of them. As application size increases, the amount of time required to download and install such applications may increase, requiring users to wait even longer for the application to install and run. More network resources may also be used to transfer applications to user computing devices. Summary of the Invention

[0005] In general, the technology disclosed herein enables computing devices to download applications more efficiently by utilizing the content of applications already installed on the computing device, including applications divided into various sub-packages with discrete sets of functions. When a computing device requests an application to be installed on the computing device from an application provider server, the application provider server does not necessarily send every application element of the application or a specific application sub-package of the application to the computing device for installation. Instead, the application provider server can determine whether one or more application elements of the application or application sub-package can be obtained from other applications or application sub-packages already installed on the computing device. This can reduce the use of network resources. In some cases, these application elements need to be updated or "patched" so that the application being installed can use those application elements already stored on the device. However, if those application elements are stored in a compressed format, it may be difficult to update or "patchase" those application elements to the version required by the application being installed. Current compression schemes tend to cascade small local changes within files within application elements into large global changes, resulting in patched versions of application elements that are larger than the application size. In devices with limited storage and memory (such as mobile computing devices), larger application sizes are more disadvantageous. Therefore, to avoid creating large patch applications, reusable application elements from applications already installed on the device can be limited to uncompressed application elements. This limitation may restrict the number of reusable application elements because most application elements (such as libraries) are stored in compressed formats. In turn, this limits the implementation of (more network-efficient) methods for downloading the aforementioned applications.

[0006] The technology disclosed herein enables the reuse of compressed application elements that require patching, without cascading small local changes into large global changes. Therefore, the resulting patched compressed application elements may be smaller than those patched using conventional techniques (i.e., requiring fewer storage bytes). This allows for more efficient use of storage and memory on user computing devices.

[0007] In response to determining that one or more application elements are available from at least one other application or application subpackage (already installed on the device), the application provider server can create a stripped version of the installed application or application subpackage (i.e., a version of the application or application subpackage excluding the application elements available on the computing device) and any patches that may be needed to update the application elements. The computing device can establish two download streams with one or more servers of the application provider, then use one download stream to initiate the download of patches and the other download stream to initiate the download of the stripped application or application subpackage. While the stripped application or application subpackage and patches are downloading, the computing device can decompress the application elements that will be reused and need patching before they can be reused. Once each patch is downloaded to the computing device, the computing device can decompress the downloaded patch, apply the patch, and then begin recompressing the patched application elements. Because patches are much smaller than stripped applications or application subpackages, the download time is much shorter, and application elements can often be decompressed, patched, and then recompressed before the stripped application or application subpackage has finished downloading.

[0008] Thus, the technology disclosed herein can reduce the amount of data sent from the application provider's server and received by the computing device for installing the application or application sub-package on the computing device. This reduces network resource usage. Instead of limiting application elements that can be shared between applications to uncompressed application elements, the technology disclosed herein enables application providers to exclude compressed component elements from the stripped application or stripped application sub-package sent to the computing device (because compressed component elements already stored on the device can now be used), which further reduces network resource usage due to the less data transmitted. Furthermore, these technologies can reduce the amount of data downloaded to the computing device while (if any) minimizing or, in various cases, reducing application installation time.

[0009] Therefore, the described technology can improve the functionality of computing devices and computing systems, including computing devices and application provider servers. By reusing application elements of applications or application sub-packages already installed on the computing device to install or update unrelated applications, the described technology reduces the amount of network bandwidth used to transmit elements of applications to be installed on the computing device and can increase the speed of application installation on the computing device.

[0010] In some examples, a method includes: receiving user input from a computing device to install an application not currently installed on the computing device, wherein multiple applications are currently installed on the computing device, and wherein each of the multiple applications includes a plurality of corresponding application elements; and in response to receiving the user input, sending a request to an application provider to install the application; receiving from the application provider an indication from the application provider of one or more application elements from the plurality of corresponding application elements included in the multiple applications currently installed on the computing device, wherein the one or more application elements will be reused during the installation of the application, wherein the one or more application elements include a first application element that is a different version required to update the application from the current version, and wherein the first application element is stored on the computing device in a compressed format. The method may further include: the computing device downloading a patch to be applied to the first application element and a stripped version of the application, excluding one or more application elements to be reused during the installation of the application, from the application provider; the computing device decompressing the first application element to generate a decompressed version of the first application element; the computing device decompressing the patch to generate a decompressed version of the patch; the computing device applying the decompressed version of the patch to the decompressed version of the first application element to generate a patched application element; the computing device compressing the patched application element to generate a compressed patched application element, the compressed patched application element being a different version of the first application element required by the application; and the computing device installing the application on the computing device using the compressed patched application element, the stripped version of the application, and one or more application elements other than the first application element.

[0011] In some examples, a computing device includes one or more processors; an presence-sensitive display that detects user input to install an application not currently installed on the computing device; a communication unit; and a computer-readable storage medium storing instructions comprising a plurality of applications, wherein each of the plurality of applications includes a corresponding plurality of application elements. When executed by the one or more processors, the instructions cause the one or more processors to perform the following operations: in response to receiving the user input, send a request to an application provider via the communication unit to install the application; receive, via the communication unit, instructions from the application provider for one or more application elements from the corresponding plurality of application elements included in the plurality of applications currently installed on the computing device, wherein the one or more application elements will be reused during the installation of the application, wherein the one or more application elements include a first application element required to update from the current version to the application, and wherein the first application element is stored on the computing device in a compressed format. The instructions further cause one or more processors to perform the following operations: retrieving, via the communication unit, a patch to be applied to the first application element and a stripped version of the application, excluding one or more application elements to be reused during the installation of the application; decompressing the first application element to generate a decompressed version of the first application element; decompressing the patch to generate a decompressed version of the patch; applying the decompressed version of the patch to the decompressed version of the first application element to generate a patch application element; compressing the patch application element to generate a compressed patch application element, the compressed patch application element being a different version of the first application element required by the application; and installing the application on the computing device using the compressed patch application element, the stripped version of the application, and one or more application elements other than the first application element.

[0012] A non-transitory computer-readable storage medium (and / or computer program product) encoded with instructions, which, when executed, cause one or more processors of a computing device to: receive an instruction from user input to install an application not currently installed on the computing device, wherein a plurality of applications are currently installed on the computing device, and wherein each of the plurality of applications includes a plurality of corresponding application elements; in response to receiving the instruction from the user input, send a request to the application provider to install the application; and receive from the application provider an instruction from one or more application elements from the plurality of corresponding application elements included in the plurality of applications currently installed on the computing device, wherein the one or more application elements will be reused during the installation of the application, wherein the one or more application elements include a first application element that is required to update the application from the current version, and wherein the first application element is stored on the computing device in a compressed format. The instructions further cause one or more processors to download a patch to be applied to the first application element and a stripped version of the application, excluding one or more application elements to be reused during the installation of the application, from the application provider; decompress the first application element to generate a decompressed version of the first application element; decompress the patch to generate a decompressed version of the patch; apply the decompressed version of the patch to the decompressed version of the first application element to generate a patch application element; compress the patch application element to generate a compressed patch application element, the compressed patch application element being a different version of the first application element required by the application; and install the application on the computing device using the compressed patch application element, the stripped version of the application, and one or more application elements other than the first application element.

[0013] Details of one or more examples are set forth in the accompanying drawings and the following description. Other features, objects, and advantages of this disclosure will be apparent from the specification, the drawings, and the claims. Attached Figure Description

[0014] Figure 1 This is a conceptual diagram illustrating an exemplary computing system according to one or more aspects of this disclosure, wherein the computing device can download applications from an application provider server and can install the downloaded applications on the computing device.

[0015] Figure 2 This is a block diagram illustrating an exemplary computing device according to one or more aspects of this disclosure, the exemplary computing device being configured to install one or more applications by utilizing application elements of applications already installed on the computing device.

[0016] Figure 3This is a block diagram illustrating an exemplary application provider server according to one or more aspects of this disclosure.

[0017] Figure 4 This is a conceptual diagram illustrating an exemplary computing device having an application container for dynamically loading installable subpackages according to the technology of this disclosure.

[0018] Figure 4 This is a flowchart illustrating exemplary operations performed by a computing system according to one or more aspects of this disclosure, the computing system including one or more processors executing on a computing device and one or more processors executing at an application provider server.

[0019] Figure 5 This is a flowchart illustrating exemplary operations performed by a computing system, which includes one or more processors running on a computing device and one or more processors running on an application provider server. Detailed Implementation

[0020] Figure 1 This is a conceptual diagram illustrating an exemplary computing system according to one or more aspects of this disclosure, wherein a computing device can download applications from an application provider's server and can install the downloaded applications on the computing device. Figure 1 As shown, computing system 1 may include computing device 2 and application provider server 4. Computing device 2 can communicate with application provider server 4 via network 8 to download applications such as application 18, and can install the downloaded applications, such as application 18, on computing device 2. Network 8 refers to any public or private communication network used for transmitting data between computing system, server, and computing device, such as cellular, Wi-Fi, and / or other types of networks. When computing device 2 is connected to network 8, application provider server 4 can exchange data with computing device 2 via network 8 to transfer applications to be installed on computing device 2.

[0021] Network 8 may include one or more network hubs, network switches, network routers, or any other network devices operatively coupled to each other to provide information exchange between application provider server 4 and computing device 2. Computing device 2 and application provider server 4 may use any suitable communication technology to send and receive data across network 8. Computing device 2 and application provider server 4 may each be operatively coupled to network 8 using their respective network links. The links coupling computing device 2 and application provider server 4 to network 8 may be Ethernet or other types of network connections, and such connections may be wireless and / or wired connections.

[0022] Application provider server 4 can represent any suitable remote computing system, such as one or more desktop computers, laptop computers, mainframes, servers, cloud computing systems, etc., capable of sending and receiving information to and from a network (such as network 8). In some examples, digital assistant server 160 can represent a cloud computing system that provides access to its respective services via the cloud.

[0023] Application provider server 4 hosts application provider 6 (or at least provides access to application provider 6). Application provider 6 can perform operations described using hardware or a combination of hardware, software, and firmware residing at and / or executing on application provider server 4. Application provider server 4 can execute application provider 6 using multiple processors or multiple devices. Application provider server 4 can also execute application provider 6 as a virtual machine running on the underlying hardware. In some examples, application provider 6 can also execute as one or more services of an operating system or computing platform, or as one or more executable programs at the application layer of the computing platform.

[0024] Application provider 6 can operate on application provider server 4 to manage a repository of applications that can be downloaded to computing devices, as well as to install and update applications downloaded from application provider 6. Application provider 6 can receive requests for applications from computing devices (such as computing device 2) and deliver the requested applications to the requesting computing device for installation. Application provider 6 can also generate patches to be delivered to computing devices to update applications installed on the computing devices.

[0025] Computing device 2 can be a mobile or non-mobile computing device configured to request applications from application provider server 4, receive requested applications from application provider server 4, and install applications requested and received from application provider server 4. Examples of computing device 2 include mobile phones, tablet computers, laptop computers, desktop computers, servers, mainframes, set-top boxes, televisions, wearable devices (e.g., computerized watches, computerized glasses, computerized gloves, etc.), home automation devices or systems (e.g., smart thermostats or security systems), voice interface or tabletop home assistant devices, personal digital assistants (PDAs), gaming systems, media players, e-book readers, mobile TV platforms, car navigation or infotainment systems, or any other type of mobile, non-mobile, wearable, and non-wearable computing device.

[0026] exist Figure 1In the example, computing device 2 may include a user interface component (UIC) 14, a UI module 16, an application installer 26, and applications 10 and 12. UI module 16, application installer 26, and applications 10 and 12 may perform operations described using hardware, or a combination of hardware and software and / or firmware, which reside in and / or execute on computing device 2. Computing device 2 may utilize multiple processors or multiple devices to execute UI module 16, application installer 26, and applications 10 and 12. In some cases, computing device 2 may execute UI module 16 and / or application installer 26 as virtual machines executing on the underlying hardware. UI module 16 and / or application installer 26 may also execute as one or more services of an operating system or computing platform, or as one or more executable programs at the application layer of a computing platform.

[0027] The UIC 14 of computing device 2 can be used as an input and / or output device of computing device 2. The UIC 14 can be implemented using various technologies. For example, the UIC 14 can be used as an input device using a presence-sensitive input screen (such as a resistive touch screen, surface acoustic wave touch screen, capacitive touch screen, projected capacitive touch screen, pressure-sensitive screen, acoustic impulse recognition touch screen, or other presence-sensitive display technologies).

[0028] UIC 14 can be used as an input device that uses microphone or other transducer technologies, infrared sensor technologies, or other input device technologies used in receiving user input. For example, UIC 14 can use built-in microphone technology to detect voice input. As another example, UIC 14 may include a presence-sensitive display that can receive tactile input from a user of computing device 2. UIC 14 can receive tactile input indications by detecting one or more gestures from a user (e.g., a user touching or pointing at one or more locations of UIC 14 with a finger or stylus).

[0029] UIC 14 can be used as an output (e.g., display) device and present output to a user. UIC 14 can be used as an output device employing any one or more display devices, such as a liquid crystal display (LCD), dot matrix display, light-emitting diode (LED) display, organic light-emitting diode (OLED) display, electronic ink, or a similar monochrome or color display capable of outputting visible information to a user of computing device 2. UIC 14 can be used as an output device employing speaker technology, haptic feedback technology, or other output device technologies used in outputting information to a user. UIC 14 can present a user interface provided by application installer 26, application 10, or application 12. UIC 14 can present a user interface related to other features of the computing platform, operating system, applications, and / or services (e.g., email, chat, online services, telephone, games, etc.) that are executed at and / or accessible from computing device 2.

[0030] UI module 16 can manage user interactions with UIC 14 and other components of computing device 2. When a user interacts with the user interface at different times and when the user and computing device 2 are in different locations, UI module 16 and UIC 14 can receive one or more instructions from the user regarding input (e.g., voice input, gesture input, etc.). UI module 16 and UIC 14 can interpret the input detected at UIC 14 and can relay information about the input detected at UIC 14 to application installer 26, application 10, application 12, and / or one or more other relevant platforms, operating systems, applications, and / or services executing on computing device 2, to, for example, enable computing device 2 to perform functions.

[0031] When a user of computing device 2 views output and / or provides input at UIC 14, UI module 16 can cause UIC 14 to output, display, or otherwise present a user interface. For example, as Figure 1 As shown, UI module 16 can send instructions to UIC 14 to display a graphical user interface (GUI) on UIC 14's display screen. In other examples, UI module 16 can also cause UIC 14 to output the user interface in a non-visual form (such as audio output). For example, if computing device 2 is an audio player device, UI module 16 can send instructions to UIC 14 to output audio.

[0032] When a user interacts with the user interface output by UIC 14 at different times and when the user and computing device 2 are in different locations, UI module 16 and UIC 14 can receive one or more indications from the user regarding input (e.g., voice input, touch input, non-touch or presence-sensitive input, video input, audio input, etc.). UI module 16 and UIC 14 can interpret the input detected at UIC 14 and can relay information about the input detected at UIC 14 to application installer 26, application 10, application 12, and / or one or more other relevant platforms, operating systems, applications, and / or services executing on computing device 2, to, for example, enable computing device 2 to perform functions.

[0033] UI module 16 can also receive information and instructions from one or more related platforms, operating systems, applications, and / or services executing on computing device 2 and / or one or more remote computing systems (such as application provider server 4). For example, UI module 16 can receive information (e.g., audio data, text data, image data, etc.) and instructions for presenting the user interface.

[0034] Applications 10 and 12 can be applications currently installed on computing device 2. Although Figure 1 The illustration shows two applications currently installed on computing device 2, but it should be understood that any number of applications can be installed on computing device 2, and computing device 2 is not necessarily limited to having only two applications installed on computing device 2.

[0035] Applications 10 and 12 each include subpackages 20A-20N (collectively referred to as "subpackage 20") and subpackages 22A-22M (collectively referred to as "subpackage 22"), respectively. Each of subpackages 20 and 22 is an installable application subpackage that provides a discrete set of features for applications 10 and 12. As an example, a software developer can design application 10 with a discrete set of features (e.g., a navigation application). Application 10 may include a turn-by-turn navigation user interface, a point-of-interest user interface (e.g., displaying details of points of interest on a map), and a settings user interface. A software developer can design application 10 with three different subpackages (e.g., subpackages 20A, 20B, and 20N), where each subpackage 20 includes a set of executable components to implement the functionality for the corresponding user interface.

[0036] Although all the sub-packages 20 of application 10 may be large in total, computing device 2 can retrieve, install, and execute only those sub-packages 20 necessary to provide the functions requested by the user. Thus, when application 10 is installed and / or executed, only a portion of the sub-packages 20 for application 10 need to reside locally on the computing device for execution by application 10. For example, when application 10 is initially installed, only sub-package 20A may be installed. Other sub-packages (such as sub-packages 20B-20N) may include functions that the user does not use (i.e., are unused). That is, the user may not have requested or used the functions provided by one or more sub-packages 20B-20N since the initial installation of application 10. Therefore, when the user initially requests functions provided by one or more sub-packages 20B-20N, one or more of sub-packages 20B-20N can be installed (i.e., installed on demand). In some examples, if a user does not use the functionality provided by one or more sub-packages 20B-20N for at least a threshold duration (e.g., one day, one week, one month, one year, etc.), the corresponding one or more sub-packages 20B-20N can be uninstalled from computing device 2. In such examples, the next time a user requests functionality provided by the uninstalled one or more sub-packages 20B-20N, the uninstalled one or more sub-packages 20B-20N can be reinstalled (i.e., reinstalled on demand).

[0037] When a user requests additional functionality from an application, computing device 2 can automatically retrieve the required subpackage 20 (e.g., subpackage 20B, subpackage 20N, etc.) to provide the requested functionality. When application 10 is currently executing on computing device 2, the computing device can automatically retrieve and install the required subpackage 20. This allows applications to install and load faster because if only a subset of the application's functionality is needed, it is not necessary to retrieve and install the entire set of subpackages for that application. Therefore, the network, computing, and storage resources used for installation may be reduced compared to retrieving the entire application. The applicant notes that while the techniques of this disclosure are described in various instances in the reference applications, the same techniques can be applied to application subpackages (e.g., to provide a certain functionality, a patched version of another application subpackage already installed on the device can be used to provide and install a stripped version of the application subpackage). Similarly, even though the reference applications specifically describe particular techniques, the applicant does not limit the description of these techniques to only certain applications unless specifically indicated.

[0038] Applications and application subpackages installed on computing device 2 may each include one or more application elements. Application elements may include code used when the application is executed. For example, application elements may include executable code and libraries executed by computing device 2 to run the application, resources accessed during application execution (e.g., images, textures, files, scripts, uncompiled code, etc.), etc. Typically, application elements are included in the application or application subpackage in a compressed form. That is, when the application or application subpackage is installed on computing device 2, many or most application elements (such as libraries) are stored in a compressed format. It should be understood that other applications may not be able to access the application elements of an application without the explicit permission of the application containing those application elements. Therefore, application elements do not include shared libraries or other data accessed by multiple different applications. Similarly, application 10 may not be able to access the application elements of application 12, and application 12 may not be able to access the application elements of application 10. In some examples, applications in computing device 2 may execute in a sandbox environment, which isolates the application elements of the application from other applications.

[0039] In some examples, application elements can be one or more of four types of content: binary content, resources, managed code, and compiled resources. Binary content can refer to native code specific to the architecture of one or more processors on computing device 2. For example, applications 10 and 12 can include native code for various platforms, including computing devices. Resources can include image content, audio content, video content, etc. For example, when application 10 or application 12 executes on computing device 2, application 10 or 12 can output such image content, audio content, and / or video content at UIC 14.

[0040] Compiled resources can be resources that have been compiled, such as strings or Extensible Markup Language (XML) files compiled into compiled resources. Managed code can be non-architecture-specific compiled code that can be executed by a virtual machine, such as compiled Java code, compiled Dalvik executable code, etc. In some examples, an application may include both managed code and native code as application elements. For example, an application may include one or more libraries written in native code, and may also include one or more other libraries written in managed code.

[0041] Application installer 26 can be powered by one or more processors (such as...) Figure 2The processor 36 executes to install and update applications on computing device 2. Application installer 26 can perform the functions of an application marketplace application, allowing users to interact with it via UIC 14 to browse, download, and install applications from application provider servers (such as application provider server 4). UIC 14 can receive input instructing a request to install application 18 on computing device 2, and UI module 16 can forward the request to install application 18 on computing device 2 to application installer 26.

[0042] According to various aspects of this disclosure, computing device 2 can download applications or application sub-packages from application provider server 4 so as to install them on computing device 2 in a manner that utilizes application elements of applications or application sub-packages currently installed on computing device 2. Figure 1 In the example, to install application 18, application installer 26 can execute on computing device 2 to send a request to application provider 6 at application provider server 4 to download application 18 from application provider server 4 to computing device 2. This request may be in response to user input requesting the installation of an application (optionally providing specific application functionality) not currently installed on the computing device. When the user input is a request for functionality not previously used by a specific application, i.e., a request to install one or more sub-packages providing a discrete set of functionality, the user input can be received while the specific application is executing on the computing device. When application installer 26 has received and / or obtained at least one application sub-package 24A-24O (collectively, "application sub-package 24") of application 18, application installer 26 can install application 18 on computing device 2. When the user input is a request for functionality not previously used by a specific application, the download and installation can be performed while the specific application is executing on the computing device. This instantaneous method of sub-package installation can improve the resource utilization of mobile computing devices without impacting the user experience.

[0043] In response to receiving a request from computing device 2 to download an application (e.g., application 18) to computing device 2, application provider 6 may determine whether one or more application elements of the application to be downloaded can be obtained from one or more applications currently installed on computing device 2 (i.e., whether one or more sub-packages 20 and / or 22 can be used instead of one or more sub-packages 24). In response to determining that one or more application elements of the application to be downloaded can be obtained from one or more applications currently installed on computing device 2, application provider 6 may suppress the sending of each application element of the application to computing device 2 if the application elements can be obtained from one or more applications currently installed on computing device 2. In this way, if one or more application elements of the application can be obtained from one or more applications currently installed on computing device 2, application provider 6 may suppress the sending of each application element of the application to computing device 2.

[0044] Application provider 6 can determine which applications and application subpackages are currently installed on computing device 2, and can also determine the application elements of the applications currently installed on computing device 2. For example, application provider 6 can access information about the applications currently installed on application 18 stored at application provider server 4, or can receive instructions from computing device 2 regarding the applications currently installed on computing device 2. Based on such determination, application provider 6 can determine one or more application elements that can be obtained from the applications currently installed on computing device 2, and can determine whether the transmission of those one or more application elements to computing device 2 should be suppressed. In the case where application provider 6 will suppress the transmission of application elements, application provider 6 can replace the transmission instructions, which are instructions on one or more application elements currently installed on the computing device that will be reused during the installation of application 18.

[0045] In systems discussed herein that collect or may use personal information about users, the system may provide users with the opportunity to control whether programs or functionalities collect user information (e.g., information about a user's social networks, behavior or activities, occupation, user preferences, or current location), or to control whether and / or how content that may be more relevant to the user is received from the content server. Furthermore, some data may be processed in one or more ways before being stored or used, resulting in the removal of personally identifiable information. For example, a user's identity may be processed to the point that it is impossible to determine the user's personally identifiable information, or location information that can be generalized to the user's geographic location (such as to the city, zip code, or state level) may be used to determine the user's specific location. Therefore, users can control how information about themselves is collected and used by the content server.

[0046] exist Figure 1In the example, the user of computing device 2 can control the information collected about computing device 2 by application provider 6. For example, the user can control whether application provider 6 can receive and / or access information associated with the computing device, such as information about applications currently installed on computing device 2. The user can also control the level of access that application provider 6 has to this information. In some cases, application provider 6 may be able to receive and / or access information about applications currently installed on computing device 2, and / or only receive and / or access information associated with computing device 2 after receiving explicit consent from the user of computing device 2.

[0047] exist Figure 1 In the example, application provider 6 can determine whether one or more application elements of application 18 can be obtained from applications 10 and 12 currently installed on computing device 2. For example, application provider 6 can access information indicating one or more applications currently installed on computing device 2 (e.g., applications 10 and 12), and information indicating the application elements of these applications currently installed on computing device 2. This information can be stored on application provider server 4 or at another location accessible to application provider 6 (e.g., another remote server). Application provider 6 can read such information and determine whether one or more application elements of application 18 can be obtained from one or more applications already installed on computing device 2.

[0048] If an application already installed on computing device 2 has the same application element as application 18, then application provider 6 can determine that the application element of application 18 can be obtained from the application already installed on computing device 2. For example, if the application element of application 18 is a library, then application provider 6 can determine that the library can be obtained from the application already installed on computing device 2. In another example, if the application element of application 18 is a video file, and if the same video file already exists in the application already installed on computing device 2, then application provider 6 can determine that the video file can be obtained from the application already installed on computing device 2.

[0049] When an application already installed on computing device 2 has application elements that can be modified, for example, via a patch, to become exactly the same as application elements of application 18, application provider 6 can also determine that it can obtain application elements of application 18 from the application already installed on computing device 2. For example, if application elements of application 18 are the latest version of the library, and if application elements of the application already installed on computing device 2 contain an older version of the same library, computing device 2 may be able to obtain the latest version of the library from the application already installed on computing device 2 by updating the older version of the library to the latest version of the library. In this example, application provider 6 can generate a patch to update the older version of the library to the latest version of the library, and can send the patch to computing device 2, so that computing device 2 can apply the patch to the older version of the library to update it to the latest version of the library.

[0050] When application provider 6 determines that an application element can be obtained (or, in other words, available) from an application already installed on computing device 2, application provider 6 may determine whether to request computing device 2 to obtain an application element from the application already installed on computing device 2 and use the obtained application element to install application 18, or whether application provider 6 should still send an application element from the application elements to computing device 2. Application provider 6 may make this determination based at least in part on a variety of factors, such as user sensitivity to download time, available network bandwidth of computing device 2, type of network connection of computing device 2, available processing power of computing device 2, remaining battery life of computing device 2, location of computing device 2, memory and storage limitations of computing device 2, etc.

[0051] In some examples, application provider 6 may generate a profile for computing device 2 based on these and other factors. Using the profile, application provider 6 may determine whether to instruct computing device 2 to obtain application elements from an application already installed on computing device 2 and to install application 18 using the obtained application elements, or whether application provider 6 may still send application elements of application 18 to computing device 2.

[0052] For example, if computing device 2 is connected to application provider 6 via a cellular data connection, application provider 6 can send a request to computing device 2 to obtain application elements from applications already installed on computing device 2, and if computing device 2 is connected to application provider 6 via Wi-Fi, the application elements can be sent to computing device 2. In another example, if computing device 2 is connected to application provider 6 via a metered network connection, application provider 6 can send a request to computing device 2 to obtain application elements from applications already installed on computing device 2, and if computing device 2 is connected to application provider 6 via an unmetered network connection or a network connection with unlimited data, the application elements can be sent to computing device 2. In yet another example, application provider 6 can determine the amount of network bandwidth available to computing device 2, and if the available network bandwidth of computing device 2 is higher than a threshold, the application elements can be sent to computing device 2.

[0053] In another example, if the remaining battery life of computing device 2 is less than a threshold, and if computing device 2 is connected to application provider 6 via cellular data connection, application provider 6 can send a request to computing device 2 to obtain application elements from applications already installed on computing device 2, and if computing device 2 is connected to application provider 6 via Wi-Fi, application elements can be sent to computing device 2, because Wi-Fi may be more power efficient than cellular data connection.

[0054] In some cases, application 18 may already be installed on computing device 2, but one or more sub-packages 24 may not be installed on computing device 2. Instead of the initial request to install application 18, the user of computing device 2 may be requesting additional functionality of application 18 provided in a sub-package (such as sub-package 24B) of application 18 that is not currently installed on computing device 2. In such cases, application provider 6 can identify the application elements included in application sub-package 24B and determine whether any application elements are included in other sub-packages 20, 22 or applications 10, 12 already installed on computing device 2.

[0055] When application provider 6 determines that computing device 2 will obtain application elements from an application or application subpackage already installed on computing device 2, application provider 6 may send a request to computing device 2 to obtain application elements of application 18 from the application already installed on computing device 2. This request may identify the application elements of application 18 that can be obtained from the application already installed on computing device 2, identify the application elements of the application already installed on computing device 2, identify the location of the application elements of the application already installed on computing device 2, etc. In other words, computing device 2 can receive from the application provider an indication of one or more application elements currently installed on the computing device that will be reused during the installation of application 18. If necessary, application provider 6 may also send a patch to computing device 2, which can be used to update the application elements of the application already installed on computing device 2 so that when patched, the application element is identical to a certain application element in the application elements. For example, one or more application elements may include application elements that update the current version to a different version required for application 18 by applying a patch to the application element to generate a patch application element.

[0056] In this way, application provider 6 can send and computing device 2 can receive instructions and one or more patches from application provider 6, the instructions being instructions for one or more application elements of application 18 that can be obtained from applications already installed on computing device 2, the one or more patches being one or more patches that computing device 2 can apply to one or more application elements of applications already installed on computing device 2 in order to obtain one or more application elements of application 18 from applications already installed on computing device 2.

[0057] Computing device 2 may receive one or more application elements of application 18 from application provider 6. If application provider 6 determines that computing device 2 will obtain one or more application elements from one or more applications already installed on computing device 2, computing device 2 may also receive a request from application provider 6 to obtain one or more application elements of application 18 from one or more applications already installed on computing device 2.

[0058] The request received by computing device 2 may indicate one or more application elements from one or more applications already installed on computing device 2, corresponding to one or more application elements of application 18 obtained from one or more applications already installed on computing device 2. If computing device 2 can generate application elements of application 18, such as by making a copy of the corresponding application element or by applying a patch to the corresponding application element, then the application elements of the applications already installed on computing device 2 may correspond to the application elements of application 18.

[0059] The request may include identification information of each of one or more application elements of one or more applications that are already installed on computing device 2, such as the name or other identification information associated with one or more applications and / or one or more application elements, the storage location (e.g., directory path) of one or more application elements in a storage device included in or operatively coupled to computing device 2.

[0060] The request can also specify how to obtain one or more application elements of application 18 from the corresponding application elements of one or more applications already installed on computing device 2. In one example, if the corresponding application elements of one or more applications already installed on computing device 2 are exactly the same as the application elements of application 18, the application elements of application 18 can be obtained by making a copy of the corresponding application elements and using the copy of the corresponding application elements as the application elements of application 18.

[0061] In another example, if obtaining the application element of application 18 from the corresponding application element of one or more applications already installed on computing device 2 includes patching the corresponding application element, then computing device 2 can receive one or more patches from application provider 6. Computing device 2 can apply the patches to the corresponding application element to obtain the application element of application 18. Computing device 2 can apply the patches to the corresponding application element and can use a patched copy of the corresponding application element (i.e., a patched application element) as the application element of application 18.

[0062] In one example, application 18 to be installed on computing device 2 may include application subpackages 24A and 24B. When a request to install application 18 is sent, computing device 2 may initiate two or more download streams from application provider 6. Each of the two or more download streams may be used to download different parts of application 18 from application provider 6. For example, one download stream may be used to download a stripped version of subpackage 24A while another download stream may be used to download patches that need to be applied to application elements already installed on computing device 2 so that application subpackage 24A can use those application elements.

[0063] In this example, application subpackage 24A provides the core functionality of application 18 and is required to execute application 18. Application provider 6 can determine that the application elements of application subpackage 24A can be obtained from an application or application subpackage already installed on computing device 2, and that the application elements need to be patched before being used by application subpackage 24A. In response, application provider 6 can generate a stripped version of application subpackage 24A that does not include the application elements already installed on computing device 2. In some cases, even if the stripped version of application subpackage 24A has already been compressed using a standard compression algorithm, application provider 6 can apply a second, different compression algorithm to generate a further compressed and therefore smaller stripped version of the application subpackage, further reducing the amount of data that needs to be sent to computing device 2 and more effectively utilizing network and computing resources, such as memory, storage, and processing power.

[0064] Application provider 6 can also generate patches that will be applied by computing device 2 to already installed application elements to change the application elements to the version required by application subpackage 24A. Application provider 6 compresses the patch and sends it to computing device 2 using one of the download streams established with computing device 2. Application provider 6 also sends a stripped version of application subpackage 24A to computing device 2 using another download stream established with computing device 2. Typically, the compressed patch will be smaller than the stripped version of application subpackage 24A, and therefore will require less time to transfer to computing device 2.

[0065] Since applying a patch to a compressed application element (such as a library) results in an inefficient patched version of the element (i.e., larger in size than when the patch is applied to an uncompressed version of the same application element), it is preferable to apply the patch to the uncompressed version of the application element. Therefore, according to the technology of this disclosure, while application provider 6 is creating and sending a stripped version of the patch and application subpackage 24A, computing device 2 can create copies of one or more application elements that will be reused by application subpackage 24A. If any application element is stored at computing device 2 in a compressed format, computing device 2 can decompress the copies of the compressed application elements. In various cases, creating copies of application elements and decompressing copies of compressed application elements may take less time than downloading the patch.

[0066] Once each patch is downloaded to computing device 2, computing device 2 decompresses each patch and applies the uncompressed patch to the corresponding uncompressed copy of the application element to generate a patched application element. If application subpackage 24A requires application elements to be stored in a compressed format, computing device 2 recompresses the patched version of the application element (to form a compressed patched application element) after the patch is applied. Typically, this download, decompression, patching, and recompression process takes less time than downloading a stripped version of application subpackage 24A. In this way, the technology of this disclosure allows the use of compressed application elements already installed on computing device 2, even if the compressed application element may require patching before being used by application subpackage 24A, without generating a suboptimal patched version of the application element. Computing device 2 can then install the application using the compressed patched application element and any other required application elements, as well as stripped versions of the application or application subpackage. Furthermore, by downloading, decompressing, patching, and recompressing the application elements as described above, the download and installation time required to install the application subpackage 24A is lower than that required if the entire application subpackage 24A were sent to the computing device 2, or if only the uncompressed application elements already installed on the computing device 2 were extracted from the application subpackage 24A. It also reduces network and computing resources, such as memory, storage, and processing power.

[0067] The techniques described herein can also improve the functionality of computing device 2 itself by minimizing the impact of installing application 18 on the battery life and / or processing power of computing device 2. By determining whether to send one or more application elements from application provider server 4 to computing device 2 or obtain one or more application elements from applications already installed on computing device 2, based at least in part on the type of network connection established by computing device 2, the available bandwidth of the network connection established by computing device 2, the current processor and / or memory load of computing device 2, and / or the remaining battery life of computing device 2, the techniques described herein can adaptively install application 18 on computing device 2 in a manner that minimizes the impact of installing application 18 on the battery life and / or processing power of computing device 2.

[0068] Figure 2 This is a block diagram illustrating an exemplary computing device according to one or more aspects of this disclosure, the exemplary computing device being configured to install one or more applications by utilizing application elements of applications already installed on the computing device. Figure 2 The illustration shows only one specific example of computing device 2, and many other examples of computing device 2 can be used in other instances and may include a subset of the components included in the exemplary computing device 2 or may include... Figure 2 Additional components not shown.

[0069] like Figure 2 As shown in the example, computing device 2 includes a user interface component (UIC) 14, one or more processors 36, one or more communication units 38, and one or more storage components 28. UIC 14 includes an output component 32 and an input component 34. The storage component 28 of computing device 2 includes a UI module 16, an application installer 26, and applications 10, 12, and 18.

[0070] Communication channel 30 can interconnect each of components 14, 36, 38, and 28 for inter-component (physical, communicative, and / or operational) communication. In some examples, communication channel 30 may include a system bus, a network connection, an inter-process communication data structure, or any other method for transmitting data.

[0071] One or more communication units 38 of computing device 2 can communicate with external devices (e.g., application provider server 4) via one or more wired and / or wireless networks (e.g., network 8) by sending and / or receiving network signals on one or more networks. Examples of communication units 38 include network interface cards (such as Ethernet cards), optical transceivers, radio frequency transceivers, global positioning satellite (GPS) receivers, or any other type of device capable of sending and / or receiving information. Other examples of communication units 38 may include shortwave radios, cellular data radios, wireless network radios, and universal serial bus (USB) controllers.

[0072] One or more input components 34 of computing device 2 can receive input. Examples of input are tactile, audio, and video input. In one example, input component 34 of computing device 2 includes presence-sensitive input devices (e.g., touchscreen, presence-sensitive display), mice, keyboards, voice response systems, cameras, microphones, or any other type of device for detecting input from a person or machine. In some examples, input component 34 may include one or more sensor components, such as one or more location sensors (GPS components, Wi-Fi components, cellular components), one or more temperature sensors, one or more motion sensors (e.g., accelerometers, gyroscopes), one or more pressure sensors (e.g., barometers), one or more ambient light sensors, and one or more other sensors (e.g., microphones, cameras, infrared proximity sensors, hygrometers, etc.). Other sensors may include heart rate sensors, magnetometers, glucose sensors, hygrometer sensors, olfactory sensors, compass sensors, pedometer sensors, and a few other non-limiting examples.

[0073] One or more output components 32 of computing device 2 can generate output. Examples of output are haptic, audio, and video output. In one example, the output component 32 of computing device 2 includes a PSD, sound card, video graphics adapter card, speaker, cathode ray tube (CRT) monitor, liquid crystal display (LCD), or any other type of device for generating output to a person or machine.

[0074] UIC 14 may include an output component 32 and an input component 34. The output component 32 may be a display component, such as a screen on which UIC 14 displays information, while the input component 34 may be a sensitive input component that detects the presence of objects at and / or near the output component 32. The output component 32 and the input component 34 may be a speaker and microphone pair or any other combination of one or more input and output components, such as input component 34 and output component 32. Figure 2 In the example, UIC 14 can render the user interface.

[0075] Although illustrated as an internal component of computing device 2, UIC 14 can also represent an external component that shares a data path with computing device 2 for sending and / or receiving input and output. For example, in one example, UIC 14 represents a built-in component of computing device 2 that is located within and physically connected to the outer packaging of computing device 2 (e.g., a screen on a mobile phone). In another example, UIC 14 represents an external component of computing device 2 that is located outside the packaging or housing of computing device 2 and physically separate from it (e.g., a monitor, projector, etc., that shares a wired and / or wireless data path with computing device 2).

[0076] One or more storage components 28 within computing device 2 may store information for processing during operation of computing device 2 (e.g., computing device 2 may store data accessed by UI module 16, application installer 26, and applications 10, 12, and 18 during execution on computing device 2). In some examples, storage component 28 is temporary memory, meaning that the primary purpose of storage component 28 is not long-term storage. Storage component 28 on computing device 2 may be configured as volatile memory for short-term storage of information, so that the stored contents are not retained if power is lost. Examples of volatile memory include random access memory (RAM), dynamic random access memory (DRAM), static random access memory (SRAM), and other forms of volatile memory known in the art.

[0077] In some examples, storage component 28 also includes one or more computer-readable storage media. In some examples, storage component 28 includes one or more non-transitory computer-readable storage media. Storage component 28 may be configured to store a larger amount of information than is typically stored by volatile memory. Storage component 28 may be further configured as a non-volatile memory space for long-term storage of information and to retain information after power-on / off cycles. Examples of non-volatile memory include magnetic hard disks, optical disks, floppy disks, flash memory, or electrically programmable memory (EPROM) or electrically erasable programmable memory (EEPROM). Storage component 28 may store program instructions and / or information (e.g., data) associated with UI module 16, application installer 26, and applications 10, 12, and 18. Storage component 28 may include memory configured to store data or other relevant information associated with UI module 16, application installer 26, and applications 10, 12, and 18.

[0078] One or more processors 36 can implement functions associated with computing device 2 and / or execute instructions associated with computing device 2. Examples of processors 36 include application processors, display controllers, auxiliary processors, one or more sensor hubs, and any other hardware configured to function as a processor, processing unit, or processing device. UI module 16, application installer 26, and applications 10, 12, and 18 can be operated by processor 36 to implement various actions, operations, or functions of computing device 2. For example, processor 36 of computing device 2 can retrieve and execute instructions stored in storage component 28, causing processor 36 to perform operations of UI module 16, application installer 26, and applications 10, 12, and 18. When executed by processor 36, instructions can cause computing device 2 to store information in storage component 28.

[0079] UI module 16 can manage user interactions with UIC 14 and other components of computing device 2. When the user of computing device 2 views output and / or provides input at UIC 14, UI module 16 can enable UIC 14 to output a user interface.

[0080] Applications 10 and 12 are applications that have been installed on computing device 2 and can be executed by processor 36 to perform various functions.

[0081] Application installer 26 can be executed by processor 36 to install and update applications on computing device 2. Application installer 26 can perform functions that allow users to interact with application installer 26 via UIC 14 to browse, download, and install applications from application provider servers (such as application provider server 4). UIC 14 can receive input instructing a request to install application 18 on computing device 2, and UI module 16 can forward the request to install application 18 on computing device 2 to application installer 26.

[0082] In response to receiving a request to install application 18 on computing device 2, the application installer can send the request for application 18 to application provider 6 at application provider server 4 via communication unit 38. This request may include information that application provider 6 can use to determine how to send application elements of application 18 to computing device 2. For example, such information may include the current location of computing device 2 (e.g., geographic location), the type of network connection established by communication unit 38, the available bandwidth of the network connection established by communication unit 38, the current memory load of the processor and / or processor 36, the remaining battery life of computing device 2, user preferences regarding application 18 downloads, applications currently installed on computing device 2, and the application elements of applications currently installed on computing device 2.

[0083] In response to sending a request for application 18 to application provider 6, application installer 26 may receive one or more application elements of application 18 from application provider 6. Application installer 26 may receive the first one or more application elements of application 18 in compressed form to reduce the amount of time required to download the first one or more application elements and to reduce the network resources used in the download.

[0084] Each of the first or more application elements may have been compressed using a compression algorithm specific to that application element type (e.g., by application provider server 4) to reduce the size of the first or more application elements transmitted over the network to computing device 2. Therefore, if the first or more application elements of application 18 comprise two or more application elements of two or more application element types, each of the two or more application elements may have been compressed using a different compression algorithm. To aid in decompressing application elements received from application provider 6, computing device 28 may store a compression dictionary in storage component 28 for application elements that have been compressed using a dictionary-based compression algorithm, in which data blocks, such as strings, are replaced by referencing the positions of data blocks in the compression dictionary. The compression dictionary may include indexes of data blocks that can be indexed by the dictionary-based compression algorithm for compressing and decompressing data. To decompress application elements that have been compressed using a dictionary-based compression algorithm, application installer 26 may replace references in the compressed graphic element with data blocks at the corresponding reference positions in the compression dictionary.

[0085] Application installer 26 may not receive each of the multiple application elements of application 18 from application provider 6. Instead, application installer may receive a request to obtain a second or more application elements of application 18 from one or more applications already installed on computing device 2. This request may identify one or more corresponding application elements of an application already installed on computing device 2 that correspond to the second or more application elements of application 18, allowing application installer 26 to obtain the second or more application elements by copying or patching the corresponding one or more application elements of the application already installed on computing device 2. For example, the request may include an indication of the location of one or more corresponding application elements in storage component 28, an indication of the unique identifier of one or more corresponding application elements, etc., which may enable computing device 2 to identify one or more corresponding application elements from the application elements of applications already installed on computing device 2.

[0086] In some examples, when downloading application 18, computing device 2 may initiate two or more download streams from application provider 6. Each of the two or more download streams can be used to download different parts of application 18 from application provider 6. For example, one download stream may be used to download a stripped version of application 18 (i.e., a version that does not include the application elements already installed on computing device 2), while another download stream may be used to download patches that need to be applied to the application elements already installed on computing device 2 so that application 18 can use the application elements.

[0087] While application provider 6 is creating and sending patches and stripped versions of application 18, computing device 2 can create copies of one or more application elements that will be reused by application 18, including those that need patching. If any application element is stored on computing device 2 in a compressed format, application installer 26 can decompress the copies of the compressed application elements(s). In various cases, creating copies of application elements and decompressing the copies of the compressed application elements(s) may take less time than downloading the patches.

[0088] Once each patch is downloaded to computing device 2, application installer 26 decompresses each patch and applies the uncompressed patch to the corresponding uncompressed copy of the application element. If application 18 requires the application element to be stored in a compressed format, application installer 26 recompresses the patch version of the application element after applying the patch.

[0089] Once the application installer 26 receives or obtains each application element of application 18, including the first and second application elements, and has patched the application elements that need patching, the application installer 26 can use the application elements of application 18 to install application 18. Installing application 18 may include creating a package for application 18, wherein the application elements of application 18 are stored within the package in such a way that the computing device 2 can execute an application to perform one or more functions.

[0090] Figure 3 This is a block diagram illustrating an exemplary application provider server according to one or more aspects of this disclosure. Figure 3 The illustration shows only one specific example of application provider server 4, and many other examples of application provider server 4 can be used in other instances. In other examples, the application provider server may include a subset of the components included in the exemplary application provider server 4, or may include... Figure 3 Additional components not shown. For example, application provider server 4 may include a server cluster, and each server in the server cluster constituting application provider server 4 may include Figure 3 All or some of the components described herein are used to implement the techniques disclosed herein.

[0091] like Figure 3 As shown in the example, the application provider server 4 includes one or more processors 40, one or more communication units 42, and one or more storage devices 48. The storage device 48 includes the application provider 6 and the application provider data storage 52.

[0092] Processor 40 is similar to Figure 2 The processor 36 of the computing device 2. The communication unit 42 is similar to... Figure 2The communication unit 38 of the computing device 2. The storage device 48 is similar to... Figure 2 The storage component 28 of the computing device 2. The communication channel 50 is similar to... Figure 2 The computing device 2 has a communication channel 30, which allows each of components 40, 42, and 48 to communicate between components. In some examples, the communication channel 50 may include a system bus, a network connection, an inter-process communication data structure, or any other method for transmitting data.

[0093] In some examples, storage device 48 is temporary memory, meaning that its primary purpose is not long-term storage. In this example, storage device 48 may be configured as volatile memory for short-term storage of information, so that the stored contents are not retained if power is lost. Examples of volatile memory include random access memory (RAM), dynamic random access memory (DRAM), static random access memory (SRAM), and other forms of volatile memory known in the art.

[0094] In some examples, storage device 48 also includes one or more computer-readable storage media. In some examples, storage device 48 includes one or more non-transitory computer-readable storage media. Storage device 48 can be configured to store a larger amount of information than is typically stored by volatile memory. Storage device 48 can be further configured for non-volatile memory space for long-term storage of information and to retain information after power-on / off cycles. Examples of non-volatile memory include magnetic hard disks, optical disks, floppy disks, flash memory, or electrically programmable memory (EPROM) or electrically erasable programmable memory (EEPROM). Storage device 48 can store program instructions and / or information (e.g., data) associated with application provider 6 and application provider data storage 52. Storage device 48 may include memory configured to store data or other relevant information associated with application provider 6 and application provider data storage 52.

[0095] Application provider data storage 52 can be configured to store information received, created, and / or otherwise associated with application provider 6. For example, application provider data storage 52 can store applications that can be downloaded from application provider server 4 for installation on computing devices (such as computing device 2). Such applications can be uploaded to application provider server 4 by application developers, making them available for download to computing devices by application provider 6.

[0096] The application provider data storage 52 can also store information about applications installed on computing devices that communicate with the application provider server 4. For example, for computing device 2, the application provider data storage 52 can store instructions for applications installed on computing device 2, versions of applications installed on computing device 2, application elements that make up applications installed on computing device 2, applications that were previously installed on computing device 2 but are no longer installed on computing device 2, etc.

[0097] Application provider 6 can execute at processor 40 and can be configured to send applications and patches to computing devices to install applications on computing devices and / or update applications installed on computing devices 2. Application provider 6 can receive requests for applications from computing devices 2 and, in response to receiving a request from computing devices 2, can send one or more application elements of the requested application to computing devices 2.

[0098] Instead of sending all application elements of the requested application, application provider 6 can determine whether one or more application elements of the application can be obtained from one or more applications currently installed on computing device 2. If so, application provider 6 can instruct computing device 2 to obtain such one or more application elements from one or more applications currently installed on computing device 2, and can suppress the sending of such one or more application elements to computing device 2.

[0099] Application provider data storage 52 can store indications of applications currently installed on various computing devices communicating with application provider server 4. For example, when application provider 6 receives a request for an application from computing device 2, application provider server 4 can update application provider data storage 52 to include an indication that the requested application is installed on computing device 2. Furthermore, when an application is removed from or otherwise uninstalled from computing device 2, application provider server 4 can receive an indication that the application has been removed or uninstalled from computing device 2 and can update application provider data storage 52 to include an indication that the application is no longer installed on computing device 2. In this way, application provider data storage 52 can store indications of applications currently installed on computing device 2 communicating with application provider server 4.

[0100] Application provider 6 can determine one or more application elements of the requested application that can be obtained from the application currently installed on the requesting computing device (e.g., computing device 2) based on information stored in application provider data storage 52 (or information provided in the request, wherein such information is not stored). The application elements of the requested application can be obtained from the application currently installed on the requesting computing device if 1) the application currently installed on the requesting computing device includes application elements identical to those of the requested application, or 2) the application currently installed on the requesting computing device includes application elements that can be patched to be identical to those of the requested application. For example, if the application element of the requested application is a library, the application element can be obtained from the application currently installed on computing device 2 if the application includes the same version of that library, or an earlier version of a library that can be patched to be the same version of that library.

[0101] When application provider 6 determines that one or more application elements of the requested application can be obtained from the application currently installed on the requesting computing device, application provider 6 may determine to suppress the sending of one or more application elements of the requested application to the requesting computing device, and instead instruct the requesting computing device to obtain one or more application elements of the requested application from the application currently installed on the requesting computing device. In other cases, even when one or more application elements of the requested application can be obtained from the application currently installed on the requesting computing device, application provider 6 may send one or more application elements of the requested application to the requesting computing device.

[0102] Application provider 6 can determine, based on various factors, whether to still send one or more application elements of the requested application to the requesting computing device, even if those elements can be obtained from an application currently installed on the requesting computing device. These factors may include the user's sensitivity to the amount of time required to install the requested application, the network connectivity characteristics of the requesting computing device, the available bandwidth of the requesting computing device's network connection, the network connection type of the requesting computing device, the location of the computing device, the processor and / or memory utilization for any patches to be applied by the requesting computing device to obtain one or more application elements, the remaining battery life of the computing device, etc. Application provider server 4 can receive indications of these factors from the requesting computing device and can store this information in application provider data storage 52. Application provider 6 can generate a profile of the requesting computing device based on these and other factors to determine whether to send one or more application elements of the requested application to the requesting computing device.

[0103] In some examples, if computing device 2 is connected to application provider 6 via cellular data connection instead of Wi-Fi, application provider 6 may suppress the sending of one or more application elements of the requested application to the requesting computing device, and if the requesting device is connected to application provider 6 via Wi-Fi, one or more application elements of the requested application may be sent to the requesting computing device.

[0104] In some examples, if the requesting computing device is connected to application provider 6 via a metered network connection, application provider 6 may suppress the sending of one or more application elements of the requested application to the requesting computing device. Conversely, if the requesting device is connected to application provider 6 via an unmetered network connection or a network connection with unlimited data, one or more application elements of the requested application may be sent to the requesting computing device. In another example, application provider 6 may determine the amount of network bandwidth available to the requesting computing device, and if the available network bandwidth of the requesting computing device exceeds a threshold, one or more application elements of the requested application may be sent to the requesting computing device.

[0105] In some examples, when obtaining one or more application elements of a requested application from an application currently installed on the requesting computing device includes applying patches to the application elements of the currently installed application, application provider 6 can determine the processor and / or memory utilization of the patches to be applied by the requesting computing device to the application elements of the currently installed application, as well as the current processor and / or memory utilization of the requesting computing device and the remaining battery life of the requesting computing device. Because applying patches to the application elements of the currently installed application may be potentially processor-intensive and memory-intensive, and may potentially deplete the battery of the requesting computing device, application provider 6 can determine whether the requesting computing device has available resources to apply the patches in a faster and / or more resource-efficient manner than downloading one or more application elements of the requested application from application provider server 4.

[0106] Application provider 6 can generate and send a stripped version of the requested application to the requesting device, along with instructions for one or more application elements of the requested application to be obtained from the application already installed on the requesting device. The stripped version of the requested application is a version of the requested application that does not include the one or more application elements to be obtained from the application already installed on the requesting device. If necessary, application provider 6 can also generate one or more patches and send them to the requesting computing device, which can be used to update one or more application elements of the application already installed on the requesting computing device. In various cases, separate download streams can be used to send the stripped version of the requested application and the patches to the requesting computing device in parallel. By sending the patches in a separate download stream from the stripped version of the requested application, the requesting computing device can begin to execute, and typically complete, the decompression, patching, and recompression techniques described herein before the stripped version of the requested application is fully downloaded to the requesting device.

[0107] According to various aspects of this disclosure, in order to further reduce the amount of data sent from application provider server 4 and computing device (e.g., computing device 2) to install or update applications on the computing device by sending one or more application elements to the computing device, application provider server 4 may compress the application elements sent from application provider server 4 to computing device. Specifically, compression module 56 may execute at processor 40 to apply different compression techniques to different types of application elements, and may adjust the parameters of the compression technique used for the same type of application element based on the content of the application element. In this way, compression module 56 may be able to compress different types of application elements better than applying a single compression technique to compress different types of application elements.

[0108] Compression module 56 can determine the compression technique to be applied to the application element based at least in part on the type of application element to be compressed. Therefore, when compression module 56 encounters multiple application elements, including at least a first application element of a first type and a second application element of a second type different from the first type, compression module 56 can apply a first compression technique to the first application element of the first type, and can apply a second compression technique different from the first compression technique to the second application element of the second type. In this way, compression module 56 can apply different compression techniques to each of the multiple application elements of different types to compress each of the multiple application elements of different types.

[0109] As previously described, an application may include multiple application elements of different application element types. For example, an application may include one or more application elements containing architecture-specific native code in binary content. To compress this type of application element, compression module 56 may use compression techniques optimized for compressing native code, such as compression techniques that align code at each CPU instruction level, compared to compression techniques that treat native code as arbitrary blocks of text.

[0110] The application may also include one or more application elements as resources, such as images, audio files, video files, etc. For this type of application element, the compression module 56 may rely on existing compression provided by local file formats such as images, audio files, and video files. In this case, the compression module 56 may not need to further compress these application elements.

[0111] An application may also include one or more application elements as managed code. Managed code can be executable code that executes under the management of a virtual machine, such as compiled Java code, compiled Dalvik executable code, etc. For this type of application element, compression module 56 can use compression techniques optimized for compressing managed code. For example, such compression techniques can adjust dictionary-based compression algorithms for common phrases in compiled Java code or compiled Dalvik executable code.

[0112] Application provider data storage 52 can store a compression dictionary for compression techniques that use dictionary-based compression algorithms, where data blocks, such as strings, can be replaced by referencing the positions of data blocks in the compression dictionary. The compression dictionary can include indexes of data blocks that can be indexed by the dictionary-based compression algorithm to compress and decompress data.

[0113] According to various aspects of this disclosure, in order to further reduce the amount of data sent from application provider server 4 and computing device (e.g., computing device 2) to send one or more application elements to the computing device, application provider server 4 may transform the application elements of the application to reduce the size of patches that can be applied to update previous or older versions of the application elements. For example, application provider 6 may reorganize the code of a new version of the library to reduce the size of patches used to update previous versions of the library to the new version of the library.

[0114] This reorganization can be very helpful for application elements that are managed code. For managed code, even small changes to the output code generated by the compiler can lead to significant differences in the parameters created by the offsets. Therefore, even incremental changes to managed code can result in relatively large patches for patching it, compared to the size of the managed code itself.

[0115] A patch used to update an application element from a previous version to a newer version is a small piece of code that represents the difference between the newer and previous versions of the application element. The larger the patch size, the longer it takes to download and apply. By reducing the patch size, application provider 6 can reduce the amount of time spent downloading patches from application provider server 4 and the network resources required to transmit patches, and also reduce the processing required to apply patches on computing devices.

[0116] Application provider 6 may include a reorganization module 58, which executes at processor 40 to reorganize the code of one or more application elements based on previous versions of one or more application elements, in order to reduce the size of patches used to update previous versions of one or more application elements to the new version of the application elements. For example, when application provider 6 receives an upload of a new version of an application element, application provider 6 may reorganize the code within the new version of the application element based on previous versions of the application element to reduce the patch size, which can be used to update the previous version of the application element to the new version of the application element. Application provider 6 may generate patches at least in part based on the differences between the new version of the application element containing the reorganized code and the previous version of the application element.

[0117] For application elements that include code files, such as managed or native code, the reorganization module 58 can reduce the patch size by maximizing the number of contiguous blocks in the new version of the application element's code that patch a previous version of the application element to the new version. These contiguous blocks are consecutive blocks that have matching contiguous blocks in the code of the previous version of the application element. In the new version of the application element, contiguous blocks that have matching contiguous blocks in the previous version of the application element can be referred to as shared contiguous blocks. The more shared contiguous blocks there are, the fewer replacements can be coded in the patch, thus reducing the patch size.

[0118] To reassemble a new version of an application element, reassembly module 58 can obtain a profile of a previous version of the application element to be patched. In some examples, application provider 6 can perform archiving of previous versions of the application element. In other examples, application provider 6 can receive a profile of a previous version of the application element from another computing device.

[0119] An application element's profile can include information derived from the application element that describes the code within the application element (e.g., managed code), such as methods, constants, classes, etc., and the order of the methods, constants, and classes. When an application element includes more than one code file, each code file can have a related profile describing the code within that file.

[0120] Reorganization module 58 can reorganize a new version of the application element using a profile of a previous version of the application element. Reorganization module 58 can locate all methods, constants, and classes included in one or more code files in the new version of the application element, corresponding to the methods, constants, and classes of the previous version of the application element, as shown in the profile. Reorganization module 58 can reorganize the code files by grouping these methods, constants, and classes together in the code files of the new version of the application element, or in newly created code files of the new version of the application element. Reorganization module 58 can also rearrange the order of the grouped methods, constants, and classes so that they match the order of methods, constants, and classes in the profile. Reorganization module 58 can adjust all internal references to methods, constants, and classes in the code files of the new version of the application element to take into account their new positions in the code files. If necessary, application provider 6 can re-sign the binaries that make up the new version of the application element.

[0121] In some examples, reorganizing the code files of a new version of an application element according to the techniques described above can increase the number of code files in the application element. For example, reorganization module 58 can split a single code file into multiple code files in a new version of the application element, where each code file is associated with a single profile.

[0122] Reorganizing the code file of a new version of an application element using the aforementioned techniques can increase the number and size of consecutive blocks in the new version that match consecutive regions in the previous version of the application element. By increasing the number and size of matching consecutive regions, this technique reduces the size of the patch used to update the previous version of the application element to the new version.

[0123] Figure 4 This is a conceptual diagram illustrating an exemplary computing device having an application container for dynamically loading installable subpackages according to the technology of this disclosure. Figure 4 Only one specific example of computing device 100 is illustrated. Many other examples of computing device 100 can be used in other instances and may include a subset of the components included in exemplary computing device 100 or may include... Figure 4 Additional components not shown in the exemplary computing device 100.

[0124] like Figure 4 As shown in the example, computing device 100 includes one or more processors 240, one or more input components 242, one or more communication units 244, one or more output components 246, one or more storage components 248, and presence-sensitive display 212. The storage component 248 of computing device 100 includes application container 102, runtime system 126, and operating system 136.

[0125] Processor 240 is similar to Figure 2 The processor 36 of the computing device 2. The communication unit 244 is similar to... Figure 2 The communication unit 38 of the computing device 2. The storage component 248 is similar to Figure 2 The storage component 28 of the computing device 2. The communication channel 250 is similar to... Figure 2 The computing device 2 has a communication channel 30, therefore, each of the interconnecting components 204, 240, 242, 244, 246, 248, and 258 is used for inter-component communication. In some examples, the communication channel 250 may include a system bus, a network connection, an inter-process communication data structure, or any other method for transmitting data.

[0126] One or more processors 240 may implement functions and / or execute instructions within computing device 100. For example, processor 240 on computing device 100 may receive and execute instructions stored in storage component 248, which provide functionality for operating system 136, application containers 102A-102C (collectively, "application container 102"), and runtime system 126. These instructions executed by processor 240 may cause computing device 100 to store and / or modify information in storage component 248 during program execution. Processor 240 may execute instructions of operating system 136, application container 102, and runtime system 126 to implement one or more operations. That is, operating system 136, application container 102, and runtime system 126 may be operated by processor 240 to perform the various functions described in this disclosure.

[0127] One or more input components 242 of computing device 100 can receive input. Examples of input are tactile, audio, kinetic, and optical inputs, to name just a few. In one example, the input component 242 of computing device 100 includes a mouse, keyboard, voice response system, camera, button, control panel, microphone, or any other type of device for detecting input from a person or machine. In some examples, the input component 242 may be a presence-sensitive input component, which may include a presence-sensitive screen, touch-sensitive screen, etc.

[0128] One or more output components 246 of computing device 100 can generate output. Examples of output are tactile, audio, and video outputs. In some examples, the output components 246 of computing device 100 include a presence-sensitive screen, sound card, video graphics adapter card, speaker, cathode ray tube (CRT) monitor, liquid crystal display (LCD), or any other type of device for generating output to a person or machine. Output components may include display components such as cathode ray tube (CRT) monitors, liquid crystal displays (LCDs), light-emitting diodes (LEDs), or any other type of device for generating tactile, audio, and / or visual outputs.

[0129] In some examples, the presence-sensitive display 204 of computing device 100 may include the functionality of input component 242 and / or output component 246. Figure 4 In some examples, the presence-sensitive display 204 may include a presence-sensitive input component 215, such as a presence-sensitive screen or a touch-sensitive screen. In some examples, the presence-sensitive input component 215 can detect objects at and / or near the presence-sensitive input component 215. As an exemplary scope, the presence-sensitive input component 215 can detect objects, such as a finger or stylus within two inches or less of the presence-sensitive input component 215. The presence-sensitive input component 215 can determine the location of the detected object (e.g., (x, y) coordinates). In another exemplary scope, the presence-sensitive input component 215 can detect objects two inches or less away from the presence-sensitive input component 215, and other ranges are also possible. The presence-sensitive input component 215 may use capacitive, inductive, and / or optical recognition technologies to determine the location of the presence-sensitive input component 215 selected by the user's finger.

[0130] In some examples, the presence-sensitive display 204 may also provide output to a user using tactile, audio, or video stimuli as described in the reference output component 246. For example, the presence-sensitive display 204 may include a display component 213 that presents a graphical user interface. The display component 213 may be any type of output component that provides visual output, such as that described in the reference output component 246. Although illustrated as an integrated component of computing device 100, in some examples, the presence-sensitive display 204 may be an external component that shares a data path with other components of computing device 100 to send and / or receive input and output. For example, the presence-sensitive display 204 may be a built-in component of computing device 100, located within and physically connected to the outer packaging of computing device 100 (e.g., a screen on a mobile phone). In another example, the presence-sensitive display 204 may be an external component of computing device 100, located outside and physically separate from the packaging of computing device 100 (e.g., a monitor, projector, etc., sharing a wired and / or wireless data path with a tablet computer). In some examples, when the presence-sensitive display 204 is located outside the package of the computing device 100 and is physically separated from it, it can be implemented by two separate components: a presence-sensitive input component 215 for receiving input and a display component 213 for providing output.

[0131] like Figure 4As shown, computing device 100 may include a power source 258. In some examples, power source 258 may be a battery. Power source 258 may supply power to one or more components of computing device 100. Examples of power source 258 may include, but are not limited to, batteries having zinc-carbon, lead-acid, nickel-cadmium (NiCd), nickel metal hydride (NiMH), lithium-ion (Li-ion), and / or lithium-ion polymer (Li-ion polymer) chemistry. In some examples, power source 258 may have a limited capacity (e.g., 1000-3000 mAh).

[0132] Computing device 100 includes applications that can be divided into various application subpackages (such as...) Figure 1 Applications 10, 12, and 18) may include sub-packages 20, 22, and 24, respectively. Sub-packages may include resources (e.g., images, text, video, or any other uncompiled data), security and / or signing information, version information and / or relevance information, or any other information about the application. Software developers may design applications to consist of multiple user-defined sub-packages. Each user-defined sub-package may include a set of executable components that collectively provide a set of discrete functionalities. For example, a software developer may design a navigation application with multiple different user interfaces. Each user interface may include a different set of user interface elements and corresponding behaviors; similarly, each user interface may be implemented using a different set of executable components. For example, a navigation application may include a turn-by-turn navigation user interface, a point-of-interest user interface (e.g., displaying details of points of interest on a map), and a settings user interface. A software developer may design an application with three different sub-packages, where each sub-package includes a set of executable components to implement the functionality of the corresponding user interface.

[0133] By allowing software developers to design applications with separate sub-packages for individual sets of functionality, application container 102 enables applications to execute at computing device 100 without all corresponding execution components for all its sub-packages residing locally on computing device 100. In this way, initial execution of the application may not require retrieving and / or installing all sub-packages, but only a subset of the sub-packages containing the executable components implementing the requested functionality. Furthermore, by packaging multiple executable components into a single sub-package, the retrieval and / or installation of executable components can occur on a sub-package basis, depending on the requested functionality (e.g., rendering a specific user interface), rather than retrieving and installing executable components on an individual basis, which can result in poorer performance and / or a poorer user experience. Because the entire set of application sub-packages does not need to be stored locally on computing device 100, initial installation and / or initial execution of the application at computing device 100 may take less time compared to needing to download, install, and execute the entire application from a remote computing system. Similarly, users can experience greater responsiveness and / or performance of the application's behavior. The network resources required for the initial installation may also be reduced compared to downloading the entire application.

[0134] To enable the execution of such an application, computing device 100 includes an application container 102 and a runtime system 126. Runtime system 126 implements an execution model for applications built according to a specific programming language used to write, build, or compile the application. Runtime system 126 may include one or more libraries and / or services accessible to application container 102 during execution. As further described in this disclosure, each application container 102 may correspond to a different application. Runtime system 126 may include thread management services, screen drawing and user interface rendering components, and inter-application and intra-application messaging services, to name just a few exemplary services. Application container 102 can access these services through an application programming interface (API) exposed by runtime system 126. In some examples, runtime system 126 may be executed as one or more processes and / or threads. One or more processes and / or threads may execute with or without operating system privileges.

[0135] When a user requests the execution of an application (such as...) Figure 1In the case of application 10), runtime system 126 receives a request to execute a specific function of the application or to install the entire application that is not currently installed. For example, a user may provide user input at presence-sensitive display 204 to install an application that is not currently installed on a computing device, where the application may be an application subpackage that provides a discrete set of functions. Presence-sensitive display 204 may cause runtime system 126 to generate an event corresponding to selecting an icon for the application. In response to determining that an application container for maintaining an installable application subpackage for the application is not allocated in the volatile memory of storage component 248, runtime system 126 retrieves an application container from a remote computing system (e.g., a remote computing system). Figure 1 The application provider 6) retrieves the application definition. For example, runtime system 126 causes one of communication units 244 to send a request for the application definition to a remote computing system. The application definition can define multiple mappings between installable subpackages of an application and user-specified identifiers.

[0136] In response to allocating application container 102A in the volatile memory of computing device 100, runtime system 126 can initiate a specific function of the application based at least in part on a requested user-specified identifier. In response to determining, at least in part based on the application definition and the user-specified identifier, that an installable subpackage for a specific function is not stored in computing device 100, application container 102A can retrieve an installable subpackage comprising multiple executable components from a remote computing system (e.g., application provider 6).

[0137] Instead of downloading each executable component individually, and not all executable components of the application, computing device 100 can retrieve only one or more sub-packages corresponding to the discrete set of functions required by the application. Furthermore, instead of having the application loader identify each individual executable component not stored locally during runtime and execution, and retrieving and installing such executable components individually on a component-by-component basis, application container 102A can download sub-packages for specific functions based on the identifier of the software developer of the sub-package with a user-specified identifier. Similarly, retrieving sub-packages can be a more granular but efficient retrieval mechanism compared to retrieving and installing such executable components individually on a component-by-component basis. Application container 102A can then use one or more executable components from the retrieved sub-packages to perform specific functions of the application.

[0138] When downloading and installing an application sub-package from application provider 6, application provider 6 can determine whether the application or application sub-package is already installed on computing device 100 (e.g., in...). Figure 1In the example, applications 10 and 12, and sub-packages 20 and 22, obtain the application elements of the application sub-packages and determine that the application elements need to be patched before being used by the application sub-packages. In response, application provider 6 can generate a stripped version of the application sub-package that does not include the application elements already installed on computing device 100. In some cases, even if the stripped version of the application sub-package has already been compressed using a standard compression algorithm, application provider 6 can apply a second, different compression algorithm to generate a further compressed, and therefore smaller, version of the stripped application sub-package, to further reduce the amount of data required to be sent to computing device 100.

[0139] Application provider 6 can also generate patches that will be applied by computing device 100 to application elements to change the application elements to the version required for the application subpackage. Application provider 6 compresses the patch and sends it to computing device 2 using one of the download streams established with computing device 100. Application provider 6 also sends a stripped version of the application subpackage to computing device 100 using another download stream established with computing device 100. Typically, the compressed patch is smaller than the stripped version of the application subpackage, thus requiring less time to transfer to computing device 100.

[0140] Since applying patches to compressed application elements (such as libraries) results in inefficient patched versions of the elements (i.e., larger in size compared to the uncompressed version when the patch is applied to the same application element), it is preferable to apply the patch to the uncompressed version of the application element. Therefore, according to the technology of this disclosure, while application provider 6 is creating and sending stripped versions of patches and application subpackages, runtime system 126 can create copies of one or more application elements that will be reused by the application subpackages. If any application element is stored in a compressed format at computing device 100, runtime system 126 can decompress the copies of the compressed application elements(s). In various cases, creating copies of application elements and decompressing copies of the compressed application elements(s) may take less time than downloading the patch.

[0141] Once each patch is downloaded to computing device 2, runtime system 126 decompresses each patch and applies the uncompressed patch to the corresponding uncompressed copy of the application element. If the application subpackage requires the application element to be stored in a compressed format, runtime system 126 recompresses the patched version of the application element after applying the patch. Typically, this download, decompression, patching, and recompression process takes less time compared to downloading a stripped version of the application subpackage. In this way, even if the compressed application element may require patching before being used by the application subpackage, the technology of this disclosure enables the use of compressed application elements already installed on computing device 100 when downloading and installing application subpackages, without generating suboptimal patched versions of the application elements.

[0142] In some examples, each corresponding application container 102 may correspond to a different application. For example, the operating system may include a user interface that allows users to select different applications based on individual icons corresponding to different applications (e.g., from a menu or icon grid). For example, a user may select an email client icon from the operating system user interface, which allows the email client application to be executed using its own separate application container. Unlike application containers, web browser extensions or other sub-applications (e.g., plugins, JavaScript, Java Virtual Machine, etc.) may not be represented as separate applications to be initiated within the operating system's user interface. For example, even if the web browser creates a separate process for each tab of a tabbed interface, each tab may not be represented as a separate application within the operating system's user interface that can be initiated independently.

[0143] As described in this disclosure, an application container may differ from a web browser because an application container may include a container runtime. As described in this disclosure, the container runtime of an application container may include libraries, but may also expose operating system APIs to executable components of sub-packages within the application container. Unlike application containers, web browsers may not expose such operating system APIs to extensions or other sub-applications within the web browser.

[0144] As described in this disclosure, an application container can differ from a web browser because it can receive user-specified identifiers (e.g., URIs) from a manager component outside the application container (e.g., within a runtime system or operating system), enabling the retrieval of sub-packages that alter the application's execution behavior or appearance without additional user intervention. The user-specified identifier can originate from other applications executing on the same or different computing devices and can automatically alter the application's execution behavior or appearance when received by the application container. In contrast, a web browser can receive user input (e.g., text entered for a URL) within the web browser itself, rather than from a source outside the application container (e.g., a manager component or another application outside the web browser). Furthermore, a web browser may not include routers and / or application definitions, as described within the application container of this disclosure, to perform lookups of user-specified identifiers and alter the execution of the application represented by the application container. Unlike application containers, web browsers may not include callback interfaces that receive and buffer lifecycle calls to modify the operations of sub-packages within the application container.

[0145] In some examples, a web browser may include core functionality (e.g., a rendering engine) and one or more third-party extensions, plugins, and / or sub-applications. Unlike application containers, a web browser may fail to function properly or not at all if all of its core functionality is not stored locally and available to the computing device for execution. Conversely, an application container can function properly if a subset of its core functionality is stored locally (e.g., a sub-package for only a subset of the user interface) and available to the computing device for execution.

[0146] Figure 5 This is a flowchart illustrating exemplary operations performed by a computing system according to one or more aspects of this disclosure, the computing system including one or more processors executing on a computing device and one or more processors executing at an application provider server. Figure 5 As shown below, in Figure 1 , 2 Operations 502, 516, 518, 520, 522, 524, and 526 are described in the context of computing device 2 shown in Figure 4, and in the following text, in Figure 1 and 3 Operations 504, 506, 508, 510, 512, and 514 are described in the context of the application provider server 4 shown.

[0147] Computing device 2 can receive user input to install applications not currently installed on the computing device, wherein multiple applications are currently installed on the computing device, and wherein each of the multiple applications includes corresponding multiple application elements. In response to receiving user input, in operation, the computing device can send a request to application provider server 4 to download an application (e.g., application 18) to be installed on computing device 2 (502). For example, the request may include an identifier for application 18 that enables computing device 2 to identify application 18 from applications stored on application provider server 4. While this example is described as the initial installation of application 18, these techniques can also be applied to the installation of sub-packages of applications already installed on computing device 2. For example, these techniques can be applied to the installation of sub-package 24B of application 18, wherein other application sub-packages of application 18 (e.g., sub-packages 24A and 24O) are already installed on computing device 2.

[0148] Application provider server 4 receives a request (504), and in response, it can determine whether one or more application elements of application 18 can be obtained from another application already installed on computing device 2, and whether any reusable application elements need to be patched (506). If application provider server 4 determines that one or more application elements of application 18 can be obtained from another application already installed on computing device 2, it can suppress sending one or more application elements of application 18 to computing device 2, and instead send a request to computing device 2 to obtain one or more elements of application 18 from another application installed on computing device 2 (508). This request may include an indication of application(s) of the application(s) currently installed on the computing device that will be reused during the installation of application 18.

[0149] For application elements of application 18 that are available from another application installed on computing device 2 and require patching, application provider server 4 generates the necessary patch (or, for example, retrieves a previously generated patch from a repository) and sends the patch to computing device 2 (510). In various cases, the patch is sent using one of multiple download streams established between computing device 2 and application provider server 4. The request may include an indication of the application element of the application currently installed on the computing device that will be patched before application 18 is installed.

[0150] Application provider server 4 generates a version of application 18 that does not include application elements already installed on computing device 2 (512). The generated version of application 18 may be referred to as a stripped application. After generating the stripped version of application 18, the application provider server sends the stripped version to computing device 2 for download (514). In various cases, a separate download stream from multiple download streams between computing device 2 and application provider server 4 may be used to send the stripped application. This separate download stream is typically different from the download stream used to send patches to computing device 2.

[0151] While application provider server 4 is generating patches and stripping the application, computing device 2 may at least begin creating copies of the application elements to be reused (516), and if the application elements need to be patched and are stored in a compressed format, at least begin decompressing the application elements (518). Since the patches sent by application provider server 4 are sent in a compressed format, computing device 2 decompresses the patches after receiving them (520). After the application elements are patched and the patches are decompressed, computing device 2 applies the patches to the application elements (522) and recompresses the application elements into a compressed version usable by application 18 (524). Typically, these decompression, patching, and recompression steps occur simultaneously with downloading the stripped application from application provider server 4.

[0152] Computing device 2 can install application 18 (526) using patched versions of application elements, any other copies of application elements already stored on computing device 2 that do not require patching, and stripped versions of application 18 downloaded from application provider server 4. Optionally, the download of stripped applications and patches can be performed on two or more separate streams. In some examples, the decompression of patches, the application patching, and the compression of patched application elements are performed simultaneously with the download of stripped versions of the application. In some examples, the first application element is decompressed simultaneously with the download of patches. These methods can reduce the use of network resources without increasing installation latency compared to downloading the entire application.

[0153] The following numbered examples illustrate one or more aspects of this disclosure.

[0154] Example 1: A method comprising: receiving user input from a computing device to install an application not currently installed on the computing device, wherein a plurality of applications are currently installed on the computing device, and wherein each of the plurality of applications includes a plurality of corresponding application elements; in response to receiving the user input, sending a request to the application provider to install the application; receiving from the application provider an indication from the application provider of one or more application elements from the plurality of corresponding application elements included in the plurality of applications currently installed on the computing device, wherein the one or more application elements will be reused during the installation of the application, wherein the one or more application elements include a first application element of a different version required to update the application from the current version, and wherein the first application element is stored on the computing device in a compressed format; and receiving from the computing device an indication from the application... The computing device downloads a patch to be applied to the first application element and a stripped version of the application, which is not included in one or more application elements to be reused during the installation of the application; decompresses the first application element to generate a decompressed version of the first application element; decompresses the patch to generate a decompressed version of the patch; applies the decompressed version of the patch to the decompressed version of the first application element to generate a patch application element; compresses the patch application element to generate a compressed patch application element, which is a different version of the first application element required by the application; and installs the application on the computing device using the compressed patch application element, the stripped version of the application, and one or more application elements other than the first application element.

[0155] Example 2. The method as described in Example 1, wherein: the application not currently installed on the computing device is an application subpackage of a specific application among the plurality of applications already installed on the computing device; the application subpackage is not currently installed on the computing device; the specific application includes a plurality of application subpackages; a subset of the plurality of application subpackages is currently installed on the computing device; each application subpackage of the plurality of application subpackages of the specific application can be installed individually and provides a discrete set of functions for the specific application; a stripped version of the application is a stripped version of the application subpackage; and installing the application includes installing the application subpackage on the computing device using the compressed patch application element, the stripped version of the application subpackage, and one or more application elements other than the first application element.

[0156] Example 3. The method as described in Example 2, wherein, while executing the specific application on the computing device, the following actions are performed: receiving instructions for one or more application elements, downloading the patch and a stripped version of the application subpackage, decompressing the first application element, decompressing the patch, applying the decompressed version of the patch, compressing the patch application element, and installing the application subpackage.

[0157] Example 4. The method as described in Example 2 or Example 3, wherein: the user input is received while the specific application is being executed on the computing device; and the user input for installing the application is user input requesting previously unused functionality of the specific application.

[0158] Example 5. The method as described in Example 4, wherein the execution of the particular application is managed by an application container running on the computing device, the method further comprising: in response to receiving the user input, determining by the application container whether an installable application subpackage providing the functionality of the particular application requested by the user input is not installed on the computing device; and in response to determining that the installable application subpackage is not installed on the computing device, generating a request to install the application subpackage.

[0159] Example 6. The method as described in any of Examples 1 to 5, wherein downloading the patch and a stripped version of the application comprises: initiating a download of a patch to be applied to the first application element by the computing device; and initiating a download of a stripped version of the application by the computing device, the stripped version not including one or more application elements to be reused during the installation of the application.

[0160] Example 7. The method of any one of Examples 1 to 6 further comprises: establishing at least two download streams between the computing device and the application provider, wherein initiating the download of the patch includes using a first download stream from the at least two download streams to initiate the download of the patch, and wherein initiating the download of a stripped version of the application includes using a second download stream from the at least two download streams to initiate the download of a stripped version of the application.

[0161] Example 8. The method as described in any of Examples 1 to 7, wherein, while downloading the stripped version of the application, the patch is decompressed, the patch is applied, and the patch application elements are compressed.

[0162] Example 9. The method as described in any of Examples 1 to 8, wherein the first application element is decompressed while the patch is being downloaded.

[0163] Example 10. The method of any one of Examples 1 to 9 further comprises: creating a corresponding copy of each application element, including a copy of the first application element, from one or more application elements currently stored on the computing device by the computing device.

[0164] Example 11. A computing device comprising: one or more processors; an presence-sensitive display that detects user input to install an application not currently installed on the computing device; a communication unit; and a computer-readable storage medium storing a plurality of applications, wherein each of the plurality of applications includes a corresponding plurality of application elements, and storing instructions that, when executed by the one or more processors, cause the one or more processors to: in response to receiving the user input, send a request to an application provider via the communication unit to install the application; and receive, via the communication unit, an instruction from the application provider from one or more application elements of the corresponding plurality of application elements included in the plurality of applications currently installed on the computing device, wherein the one or more application elements will be reused during the installation of the application, and wherein the one or more application elements include updates from the current version. The process involves: receiving different versions of a first application element required for the application; storing the first application element in a compressed format on the computing device; retrieving, via the communication unit, a patch to be applied to the first application element and a stripped version of the application, excluding one or more application elements to be reused during application installation; decompressing the first application element to generate a decompressed version of the first application element; decompressing the patch to generate a decompressed version of the patch; applying the decompressed version of the patch to the decompressed version of the first application element to generate a patched application element; compressing the patched application element to generate a compressed patched application element, the compressed patched application element being a different version of the first application element required by the application; and installing the application on the computing device using the compressed patched application element, the stripped version of the application, and one or more application elements other than the first application element.

[0165] Example 12. A computing device as described in Example 11, wherein: an application not currently installed on the computing device is an application subpackage of a specific application among a plurality of applications already installed on the computing device; the application subpackage is not currently installed on the computing device; the specific application includes a plurality of application subpackages; a subset of the plurality of application subpackages is currently installed on the computing device; each application subpackage of the plurality of application subpackages of the specific application can be installed individually and provides a discrete set of functions for the specific application; a stripped version of the application is a stripped version of the application subpackage; and instructions to cause one or more processors to install the application include causing one or more processors to install the application subpackage on the computing device using the compressed patch application element, the stripped version of the application subpackage, and one or more application elements other than the first application element.

[0166] Example 13. The computing device of Example 12, wherein, while executing the particular application on the computing device, instructions cause one or more processors to receive instructions for the one or more application elements, download the patch and a stripped version of the application subpackage, decompress the first application element, decompress the patch, apply the decompressed version of the patch, compress the patch application element, and install the application subpackage.

[0167] Example 14. A computing device as described in Example 12 or Example 13, wherein: the user input is received while the particular application is being executed on the computing device; and the user input for installing the application is a user input requesting previously unused functionality of the particular application.

[0168] Example 15. A computing device as described in Example 14, wherein the execution of a particular application is managed by an application container executing on the computing device, and wherein instructions for the application container executing on the computing device cause one or more processors to: determine, in response to receiving the user input, whether an installable application subpackage providing the functionality of the particular application requested by the user input is not installed on the computing device; and generate a request to install the application subpackage in response to determining that the installable application subpackage is not installed on the computing device.

[0169] Example 16. A computing device as described in any of Examples 11 to 15, wherein instructions for causing one or more processors to download the patch and a stripped version of the application include instructions for causing one or more processors to initiate the download of a patch to be applied to the first application element; and instructions for initiating the download of a stripped version of the application, the stripped version not including one or more application elements to be reused during the installation of the application.

[0170] Example 17. A computing device as described in any one of Examples 11 to 16, wherein the instructions further cause one or more processors to establish at least two download streams with the application provider, wherein the instructions causing one or more processors to initiate the download of the patch cause one or more processors to initiate the download of the patch using a first download stream from the at least two download streams, and wherein the instructions causing one or more processors to initiate the download of a stripped version of the application include instructions causing one or more processors to initiate the download of a stripped version of the application using a second download stream from the at least two download streams.

[0171] Example 18. A computing device as described in any of Examples 11 to 17, wherein, while downloading a stripped version of the application, instructions are executed that cause one or more processors to decompress the patch, apply the patch, and compress the patch application elements.

[0172] Example 19. A computing device as described in any of Examples 11 to 18, wherein, while downloading the patch, instructions are executed that cause one or more processors to decompress the first application element.

[0173] Example 20. A computing device as described in any of Examples 11 to 19, wherein the instructions further cause one or more processors to create a corresponding copy of each application element from one or more application elements currently stored on the computing device, including a copy of the first application element.

[0174] Example 21. A non-transitory computer-readable storage medium encoded with instructions that, when executed, cause one or more processors of a computing device to: receive an instruction from user input to install an application not currently installed on the computing device, wherein a plurality of applications are currently installed on the computing device, and wherein each of the plurality of applications includes a corresponding plurality of application elements; in response to receiving the instruction from the user input, send a request to the application provider to install the application; receive from the application provider an instruction from one or more application elements from the corresponding plurality of application elements included in the plurality of applications currently installed on the computing device, wherein the one or more application elements will be reused during the installation of the application, wherein the one or more application elements include a first application element requiring a different version to be updated from the current version to the application, and The process includes: storing the first application element in a compressed format on the computing device; downloading a patch to be applied to the first application element and a stripped version of the application, excluding one or more application elements to be reused during application installation, from the application provider; decompressing the first application element to generate a decompressed version of the first application element; decompressing the patch to generate a decompressed version of the patch; applying the decompressed version of the patch to the decompressed version of the first application element to generate a patch application element; compressing the patch application element to generate a compressed patch application element, the compressed patch application element being a different version of the first application element required by the application; and installing the application on the computing device using the compressed patch application element, the stripped version of the application, and one or more application elements other than the first application element.

[0175] In one or more examples, the described functionality may be implemented in hardware, software, firmware, or any combination thereof. If implemented in software, the functionality may be stored as one or more instructions or code on a computer-readable medium or transmitted through a computer-readable medium and executed by a hardware-based processing unit. A computer-readable medium may include a computer-readable storage medium, which corresponds to a tangible medium such as a data storage medium, or a communication medium, including, for example, any medium that facilitates the transfer of a computer program from one place to another according to a communication protocol. In this way, a computer-readable medium may generally correspond to (1) a tangible computer-readable storage medium that is non-transitory or (2) a communication medium such as a signal or carrier wave. A data storage medium may be any available medium accessible by one or more computers or one or more processors to retrieve instructions, code, and / or data structures for implementing the techniques described in this disclosure. Computer program products may include computer-readable media.

[0176] By way of example, and not limitation, such computer-readable storage media may include RAM, ROM, EEPROM, CD-ROM or other optical disc storage, disk storage or other magnetic storage devices, flash memory, or any other medium that can be used to store desired program code in the form of instructions or data structures and that can be accessed by a computer. Moreover, any connection is appropriately referred to as a computer-readable medium. For example, the definition of medium includes coaxial cable, fiber optic cable, twisted pair, DSL, or wireless technology (such as infrared, radio, and microwave) if instructions are sent from a website, server, or other remote source using coaxial cable, fiber optic cable, twisted pair, DSL, or wireless technology (such as infrared, radio, and microwave). However, it should be understood that computer-readable storage media and data storage media do not include connections, carrier waves, signals, or other transient media, but rather refer to non-transient tangible storage media. Disks and optical discs as used herein include optical discs (CDs), laser discs, optical discs, digital versatile discs (DVDs), floppy disks, and Blu-ray discs, where optical discs typically copy data magnetically, while optical discs copy data optically using lasers. Combinations of the above should also be included within the scope of computer-readable media.

[0177] Instructions can be executed by one or more processors, such as one or more digital signal processors (DSPs), general-purpose microprocessors, application-specific integrated circuits (ASICs), field-programmable arrays (FPGAs), or other equivalent integrated or discrete logic circuits. Therefore, as used herein, the term "processor" can refer to any of the foregoing structures or any other structure suitable for implementing the techniques described herein. Additionally, in some aspects, the functionality described herein can be provided within dedicated hardware and / or software modules. Similarly, the technique can be fully implemented in one or more circuit or logic elements.

[0178] The techniques disclosed herein can be implemented in a variety of devices or apparatuses, including wireless handheld devices, integrated circuits (ICs), or a set of ICs (e.g., chipsets). Various components, modules, or units are described in this disclosure to highlight functional aspects of apparatuses configured to perform the disclosed techniques, but they do not necessarily need to be implemented by different hardware units. Rather, as described above, various units can be combined in hardware units or provided by a collection including one or more processor interoperable hardware units as described above, combined with suitable software and / or firmware.

[0179] Various aspects of this disclosure have been described. These and other aspects are within the scope of the appended claims.

Claims

1. A method comprising: during an installation process of a particular application subpackage from a plurality of application subpackages of an application, wherein each application subpackage from the plurality of application subpackages is individually installable and provides a discrete set of functionality of the application, wherein a subset of application subpackages from the plurality of application subpackages of the application are currently installed on a computing device, and wherein the particular application subpackage from the plurality of application subpackages of the application is not currently installed on the computing device: receiving, by the computing device from an application provider, an indication of one or more application elements from a respective plurality of application elements included in a plurality of applications currently installed on the computing device, wherein the one or more application elements are to be reused during installation of the particular application subpackage, wherein the one or more application elements include a first application element that is a different version required to update from a current version to the particular application subpackage, and wherein the first application element is stored in a compressed format on the computing device; creating, by the computing device from the one or more application elements currently stored on the computing device, a respective copy of each application element including a copy of the first application element, wherein the copy of the first application element is in the compressed format; downloading, by the computing device from the application provider, a patch to be applied to the first application element and a stripped version of the particular application subpackage that does not include the one or more application elements to be reused during installation of the application; applying, by the computing device, the patch to the copy of the first application element to generate a patched application element copy; and installing, by the computing device, the particular application subpackage on the computing device using the patched application element copy, the stripped version of the particular application subpackage, and the respective copies of the one or more application elements other than the first application element.

2. The method of claim 1, further comprising: decompressing, by the computing device, the copy of the first application element to generate a decompressed version of the copy of the first application element; and decompressing, by the computing device, the patch to generate a decompressed version of the patch, wherein applying the patch comprises applying the decompressed version of the patch to the decompressed version of the copy of the first application element to generate the patched application element copy.

3. The method of claim 2, further comprising: compressing, by the computing device, the patched application element copy to generate a compressed patched application element, the compressed patched application element being the different version of the first application element required for the installation of the application, wherein the patched application element copy used in the installation of the application on the computing device is the compressed patched application element.

4. The method of claim 2, wherein, receiving the indication of the one or more application elements, downloading the patch and the stripped version of the application subpackage, decompressing the first application element, decompressing the patch, applying the decompressed version of the patch, compressing the patch application element copy, and installing the application subpackage are performed while the application is executing on the computing device.

5. The method of claim 1, further comprising: receiving, by the computing device, a user input to install the application subpackage while the application is executing on the computing device, wherein the user input requests a previously unused functionality of the application.

6. The method of claim 5, wherein, managing execution of the application by an application container executing on the computing device, the method further comprising: determining, by the application container, in response to receiving the user input, whether an installable application subpackage that provides the functionality of the application requested by the user input is not installed on the computing device; and generating, by the application container, the request to install the application subpackage in response to determining that the installable application subpackage is not installed on the computing device.

7. The method of claim 1, wherein, downloading the patch and the stripped version of the application comprises: initiating, by the computing device, download of the patch to be applied to the copy of the first application element; and initiating, by the computing device, download of the stripped version of the application that does not include the one or more application elements that are to be reused during installation of the application.

8. The method of claim 7, further comprising: establishing, by the computing device, at least two download streams with the application provider, wherein initiating download of the patch comprises initiating download of the patch using a first download stream from the at least two download streams, and wherein initiating download of the stripped version of the application comprises initiating download of the stripped version of the application using a second download stream from the at least two download streams.

9. A computing device, comprising: one or more processors; a communication unit; and a computer-readable storage medium storing a plurality of applications and storing instructions, wherein each application of the plurality of applications comprises a respective plurality of application elements, the instructions, when executed by the one or more processors, cause the one or more processors to, during an installation process of a particular application subpackage from a plurality of application subpackages of an application, wherein each application subpackage from the plurality of application subpackages is individually installable and provides a discrete set of functionalities of the application, wherein a subset of application subpackages from the plurality of application subpackages of the application is currently installed on a computing device, and wherein the particular application subpackage from the plurality of application subpackages of the application is not currently installed on the computing device: receive, via the communication unit, from an application provider, an indication of one or more application elements from a respective plurality of application elements included in a plurality of applications currently installed on the computing device, wherein the one or more application elements are to be reused during installation of the particular application subpackage, wherein the one or more application elements include a first application element of a different version that is needed to update from a current version to the particular application subpackage, and wherein the first application element is stored in a compressed format on the computing device; create, from the one or more application elements currently stored on the computing device, a respective copy of each application element including a copy of the first application element, wherein the copy of the first application element is in the compressed format; retrieve, via the communication unit, from the application provider, a patch to be applied to the first application element and a stripped version of the particular application subpackage that does not include the one or more application elements to be reused during installation of the application; apply the patch to the copy of the first application element to generate a patched application element copy; and install the particular application subpackage on the computing device using the patched application element copy, the stripped version of the particular application subpackage, and the respective copies of the one or more application elements other than the first application element.

10. The computing device of claim 9, wherein, the instructions further cause the one or more processors to: decompress the copy of the first application element to generate a decompressed version of the copy of the first application element; and decompress the patch to generate a decompressed version of the patch, wherein the instructions that cause the one or more processors to apply the patch cause the one or more processors to apply the decompressed version of the patch to the decompressed version of the copy of the first application element to generate the patched application element copy.

11. The computing device of claim 10, wherein, the instructions further cause the one or more processors to: compress the patched application element copy to generate a compressed patched application element, the compressed patched application element being the different version of the first application element needed by the application, wherein the patched application element copy used in installing the application on the computing device is the compressed patched application element.

12. The computing device of claim 9, further comprising: a presence-sensitive display that detects a user input to install the application subpackage when the application is executed on the computing device, wherein the user input requests a previously unused functionality of the application.

13. The computing device of claim 9, wherein, the instructions that cause the one or more processors to retrieve the patch and the stripped version of the application include instructions that cause the one or more processors to: initiate a download of the patch to be applied to the copy of the first application element; and initiate a download of the stripped version of the application that does not include the one or more application elements to be reused during installation of the application.

14. A non-transitory computer-readable storage medium encoded with instructions that, when executed, cause one or more processors of a computing device to, during an installation process of a particular application subpackage from a plurality of application subpackages of an application, each application subpackage from the plurality of application subpackages is individually installable and provides a discrete set of functionality of the application, wherein a subset of application subpackages from the plurality of application subpackages of the application are currently installed on a computing device, and wherein the particular application subpackage from the plurality of application subpackages of the application is not currently installed on the computing device: receive, from an application provider, an indication of one or more application elements from a respective plurality of application elements included in a plurality of applications currently installed on the computing device, wherein the one or more application elements are to be reused during installation of the particular application subpackage, wherein the one or more application elements include a first application element of a different version that is needed to update from a current version to the particular application subpackage, and wherein the first application element is stored in a compressed format on the computing device; create, from the one or more application elements currently stored on the computing device, a respective copy of each application element including a copy of the first application element, wherein the copy of the first application element is in the compressed format; download, from the application provider, a patch to be applied to the first application element and a stripped version of the particular application subpackage that does not include the one or more application elements to be reused during installation of the application; apply the patch to the copy of the first application element to generate a patched application element copy; and install the particular application subpackage on the computing device using the patched application element copy, the stripped version of the particular application subpackage, and the respective copies of the one or more application elements other than the first application element.

15. The non-transitory computer-readable storage medium of claim 14, wherein, the instructions further cause the one or more processors to: decompress the copy of the first application element to generate a decompressed version of the copy of the first application element; and decompress the patch to generate a decompressed version of the patch, wherein the instructions that cause the one or more processors to apply the patch cause the one or more processors to apply the decompressed version of the patch to the decompressed version of the copy of the first application element to generate the patched application element copy; and compress the patched application element copy to generate a compressed patched application element, the compressed patched application element being the different version of the first application element needed by the application, wherein the patched application element copy used in installation of the application on the computing device is the compressed patched application element.

16. The non-transitory computer-readable storage medium of claim 14, the instructions further causing the one or more processors to: receiving an indication of a user input to install the application sub-package while the application is executing on the computing device, wherein, the user input requests a previously unused functionality of the application.

Citation Information

Patent Citations

  • Determining and Downloading Portions of a Software Application in a Computer System

    US20100257520A1

  • Methods for updating applications

    US20140007074A1