Accelerating application and sub-package installation
By decomposing the application into subpackages and utilizing the content of the installed application, the problem of waste of network resources and extended installation time during application installation and update in the prior art is solved, and more efficient resource usage and faster installation process are achieved.
Patent Information
- Application Number
- CN202411684722.3
- Authority / Receiving Office
- CN · China
- Patent Type
- Applications(China)
- Current Assignee / Owner
- Filing Date
- 2019-09-03
- Publication Date
- 2025-04-25
- Estimated Expiration
- 2039-09-03
AI Technical Summary
The prior art When installing and updating applications, all executable components of the entire application need to be downloaded and installed, resulting in waste of network resources and extended installation time, especially on limited storage devices.
Reduce the use of network resources by leveraging the content of the application already installed on the computing device, breaking down the application into subpackages with discrete function sets, and downloading and using only the necessary subpackages and patches during installation.
This enables more efficient use of network resources and storage space, reduces download and installation time, and avoids the problem of creating large-sized patch applications.
Smart Images

Figure CN119883296A_ABST
Abstract
Description
[0001] Description of the case
[0002] This application is a divisional application of Chinese invention patent application 201980088644.1, with a filing date of September 3, 2019. Technical Field
[0003] The present disclosure relates to accelerating application and sub-package installation. Background Art
[0004] A computing device can perform various functions, such as executing an application, receiving user input, and outputting information for display. For example, a computing device can execute applications, such as an email client, a travel assistant, a messaging client, etc. Software developers can write such applications with human-readable source code compiled into machine-readable code. In some cases, the 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 functions. In some distributed environments, a user computing device (e.g., a smart phone) can use a media store application to search for and install applications provided by a remote computing system. Typically, when a user selects an application in a media store application to be installed on a user computing device, the remote computing system sends a single file including all executable components to execute all functions of the application, regardless of whether the user actually uses all functions. As the size of the application grows, the amount of time required to download and install such applications may grow, requiring the user to wait for more time to install and execute the application. More network resources may also be used to transfer the application to the user computing device. Summary of the invention
[0005] In general, the technology of the present disclosure can enable computing devices to download applications more efficiently by utilizing the content of applications already installed on the computing device, including applications that are divided into various sub-packages with discrete function sets. When a computing device requests an application to be installed on a 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 to install the application or application sub-package. 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. Therefore, the use of network resources can be reduced. In some cases, it is necessary to update or "patch" these application elements so that the application being installed uses 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 "patch" those application elements to the version required by the application being installed. Current compression schemes tend to cascade small local changes to files within application elements into large global changes, resulting in patch versions of application elements that are larger than the size of the application. In devices with limited storage and memory (such as mobile computing devices), the larger the application size, the more disadvantageous it is. Therefore, to avoid creating large-sized patch applications, the application elements that can be reused from applications already installed on the device can be limited to uncompressed application elements. This restriction may limit the number of application elements that can be reused, since most application elements (such as libraries) are stored in a compressed format. This, in turn, limits the implementation of (more network-efficient) methods of downloading the above-mentioned applications.
[0006] The disclosed techniques may enable the reuse of compressed application elements that need to be patched, without the need to cascade small local changes into large global changes. As a result, the resulting patched compressed application element may be smaller (i.e., require fewer bytes of storage) than if the compressed application element were patched using conventional techniques. Storage and memory on the user's computing device may therefore be used more efficiently.
[0007] In response to determining that one or more application elements are available from at least one other application or application sub-package (already installed on the device), the application provider server can create a stripped version of the application or application sub-package being installed (i.e., a version of the application or application sub-package that does not include the application elements available on the computing device) and any patches that may be required to update the application elements. The computing device can establish two download streams with one or more servers of the application provider, and then use one download stream to start the download of the patch and use another download stream to start the download of the stripped application or application sub-package. While the stripped application or application sub-package and the patch are being downloaded, the computing device can decompress the application elements that are to be reused and need to be patched 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 patch application elements. Because the patch is much smaller than the stripped application or application sub-package, it takes less time to download, and the application elements can usually be decompressed, patched, and then recompressed before the stripped application or application sub-package completes downloading.
[0008] In this way, the techniques of the present disclosure can reduce the amount of data sent from the application provider server and received by the computing device to install the application or application sub-package on the computing device. Therefore, the use of network resources can be reduced. Instead of limiting the application elements that can be shared between applications to uncompressed application elements, the techniques of the present disclosure enable the application provider to exclude compressed component elements from the stripped application or stripped application sub-package sent to the computing device (because compressed component elements that are already stored on the device can now be used), which can further reduce the use of network resources because less data is transmitted. In addition, these techniques can reduce the data downloaded to the computing device while (if at all) minimizing the application installation time, or in various cases, reducing the application installation time.
[0009] Thus, the described techniques 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 subpackages already installed on a computing device to install or update unrelated applications, the described techniques reduce 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 by a computing device to install an application that is 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; 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 of 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 installation of the application, wherein the one or more application elements include a first application element that will be updated from a current version to a different version required for the application, and wherein the first application element is stored in a compressed format on the computing device. The method may also include 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 application that does not include one or more application elements to be reused during installation of the application; decompressing, by the computing device, the first application element to generate a decompressed version of the first application element; decompressing, by the computing device, the patch to generate a decompressed version of the patch; applying, by the computing device, the decompressed version of the patch to the decompressed version of the first application element to generate a patch application element; compressing, by the computing device, 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, by the computing device, 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.
[0011] In some examples, a computing device includes one or more processors; a presence-sensitive display that detects user input to install an application that is not currently installed on the computing device; a communication unit; and a computer-readable storage medium that stores instructions including a plurality of applications, wherein each of the plurality of applications includes a corresponding plurality of application elements. The instructions, when executed by the one or more processors, cause the one or more processors to perform the following operations: in response to receiving the user input, sending a request to an application provider via the communication unit to install the application; receiving from the application provider via the communication unit an indication of 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 are to be reused during installation of the application, wherein the one or more application elements include a first application element that is to be updated from a current version to a different version required for the application, and wherein the first application element is stored on the computing device in a compressed format. The instructions further cause the one or more processors to perform the following operations: 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 application that does not include one or more application elements to be reused during installation of the application; decompress the first application element to generate a decompressed version of the first application element; decompress the patch to generate the patch decompressed version; 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.
[0012] A non-transitory computer-readable storage medium (and / or computer program product) encoded with instructions that, when executed, cause one or more processors of a computing device to: receive an indication of user input to install an application that is 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 indication of user input, send a request to the application provider to install the application; and receive from the application provider an indication of 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 are to be reused during installation of the application, wherein the one or more application elements include a first application element that is to be updated from a current version to a different version required for the application, and wherein the first application element is stored in a compressed format on the computing device. The instructions further cause one or more processors to download from the application provider a patch to be applied to the first application element and a stripped version of the application that does not include one or more application elements to be reused during installation of the application; decompress the first application element to generate a decompressed version of the first application element; decompress the patch to generate the patch decompressed version; 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] The details of one or more examples are set forth in the accompanying drawings and the description below.Other features, objects, and advantages of the disclosure will be apparent from the description and drawings, and from the claims. BRIEF DESCRIPTION OF THE DRAWINGS
[0014] Figure 1 is a conceptual diagram illustrating an exemplary computing system according to one or more aspects of the present disclosure, in which a computing device can download an application from an application provider server and can install the downloaded application on the computing device.
[0015] Figure 2 is a block diagram illustrating an exemplary computing device configured to install one or more applications by leveraging application elements of applications already installed on the computing device in accordance with one or more aspects of the present disclosure.
[0016] Figure 3is a block diagram illustrating an exemplary application provider server according to one or more aspects of the present disclosure.
[0017] Figure 4 is a conceptual diagram illustrating an exemplary computing device with an application container for dynamically loading installable sub-packages in accordance with the techniques of this disclosure.
[0018] Figure 4 is a flow chart illustrating exemplary operations performed by a computing system including one or more processors executing on a computing device and one or more processors executing at an application provider server in accordance with one or more aspects of the present disclosure.
[0019] Figure 5 is a flow diagram illustrating exemplary operations performed by a computing system including one or more processors executing on a computing device and one or more processors executing on an application provider server. DETAILED DESCRIPTION
[0020] Figure 1 1 is a conceptual diagram illustrating an exemplary computing system according to one or more aspects of the present disclosure, in which a computing device can download an application from an application provider server and can install the downloaded application on the computing device. Figure 1 As shown, computing system 1 may include computing device 2 and application provider server 4. Computing device 2 may communicate with application provider server 4 via network 8 to download applications such as application 18, and may install downloaded applications such as application 18 on computing device 2. Network 8 represents any public or private communication network for transmitting data between computing systems, servers, and computing devices, such as cellular, Wi-Fi, and / or other types of networks. When computing device 2 is connected to network 8, application provider server 4 may exchange data with computing device 2 via network 8 to transmit applications to be installed on computing device 2.
[0021] The network 8 may include one or more network hubs, network switches, network routers, or any other network devices that are operably coupled to each other to provide for the exchange of information between the application provider server 4 and the computing device 2. The computing device 2 and the application provider server 4 may use any suitable communication technology to send and receive data across the network 8. The computing device 2 and the application provider server 4 may each be operably coupled to the network 8 using a respective network link. The link coupling the computing device 2 and the application provider server 4 to the network 8 may be an Ethernet or other type of network connection, and such connection may be a wireless and / or wired connection.
[0022] Application provider server 4 may represent any suitable remote computing system, such as one or more desktop computers, laptops, 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 may represent a cloud computing system that provides access to their respective services via the cloud.
[0023] The application provider server 4 hosts the application provider 6 (or at least provides access to the application provider 6). The application provider 6 can perform the operations described using hardware or a combination of hardware, software, and firmware that resides at the application provider server 4 and / or executes at the application provider server 4. The application provider server 4 can execute the application provider 6 using multiple processors or multiple devices. The application provider server 4 can also execute the application provider 6 as a virtual machine executing on the underlying hardware. In some examples, the application provider 6 can also be executed 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 may be executed at application provider server 4 to manage a repository of applications that may be downloaded to computing devices, and to install and update applications downloaded from application provider 6. Application provider 6 may receive a request for an application from a computing device, such as computing device 2, and transmit the requested application to the requesting computing device for installation. Application provider 6 may also generate a patch that is transmitted to the computing device to update the application installed on the computing device.
[0025] Computing device 2 may 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 interfaces or countertop home assistant devices, personal digital assistants (PDAs), gaming systems, media players, e-book readers, mobile television platforms, car navigation or infotainment systems, or any other type of mobile, non-mobile, wearable, and non-wearable computing devices.
[0026] exist Figure 1In the example of , computing device 2 may include user interface component (UIC) 14, UI module 16, 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 computing device 2 and / or are executed at 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 a virtual machine executing on underlying hardware. UI module 16 and / or application installer 26 may also be executed 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 the computing device 2 may be used as an input and / or output device for the computing device 2. The UIC 14 may be implemented using various technologies. For example, the UIC 14 may be used as an input device using a presence-sensitive input screen such as a resistive touch screen, a surface acoustic wave touch screen, a capacitive touch screen, a projected capacitive touch screen, a pressure-sensitive screen, an acoustic pulse recognition touch screen, or other presence-sensitive display technology.
[0028] UIC 14 may function as an input device using microphone or other transducer technology, infrared sensor technology, or other input device technology for receiving user input. For example, UIC 14 may detect voice input using built-in microphone technology. As another example, UIC 14 may include a presence-sensitive display that may receive tactile input from a user of computing device 2. UIC 14 may receive indications of tactile input by detecting one or more gestures from a user (e.g., a user touching or pointing to one or more locations of UIC 14 with a finger or stylus).
[0029] The UIC 14 may be used as an output (e.g., display) device and present the output to the user. The UIC 14 may be used as an output device using any one or more display devices (such as a liquid crystal display (LCD), a dot matrix display, a light emitting diode (LED) display, an organic light emitting diode (OLED) display, electronic ink, or a similar monochrome or color display capable of outputting visible information to a user of the computing device 2). The UIC 14 may be used as an output device using speaker technology, tactile feedback technology, or other output device technology used in outputting information to the user. The UIC 14 may present a user interface provided by the application installer 26, the application 10, or the application 12. The UIC 14 may present a user interface related to other features of a computing platform, an operating system, an application, and / or a service (e.g., email, chat, online service, phone, game, etc.) executed at the computing device 2 and / or accessible from the computing device 2.
[0030] UI module 16 may manage user interactions with UIC 14 and other components of computing device 2. UI module 16 and UIC 14 may receive one or more indications of input (e.g., voice input, gesture input, etc.) from a user as the 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 may interpret the input detected at UIC 14, and may relay information about the input detected at UIC 14 to application installer 26, application 10, application 12, and / or one or more other related platforms, operating systems, applications, and / or services executing at computing device 2 to, for example, cause 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 may cause UIC 14 to output, display, or otherwise present a user interface. Figure 1 As shown, UI module 16 may send an instruction to UIC 14 to cause UIC 14 to display a graphical user interface (GUI) on a display screen of UIC 14. In other examples, UI module 16 may also cause UIC 14 to output a user interface in a non-visual form (such as an audio output). For example, if computing device 2 is an audio player device, UI module 16 may send an instruction to UIC 14 to cause UIC 14 to output audio.
[0032] As the 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 may receive one or more indications of input (e.g., voice input, touch input, non-touch or presence-sensitive input, video input, audio input, etc.) from the user. UI module 16 and UIC 14 may interpret the input detected at UIC 14, and may relay information about the input detected at UIC 14 to application installer 26, application 10, application 12, and / or one or more other related platforms, operating systems, applications, and / or services executing at computing device 2 to, for example, cause computing device 2 to perform functions.
[0033] UI module 16 may also receive information and instructions from one or more related platforms, operating systems, applications, and / or services executing at computing device 2 and / or one or more remote computing systems, such as application provider servers 4. For example, UI module 16 may receive information (e.g., audio data, text data, image data, etc.) and instructions for presenting a user interface.
[0034] Applications 10 and 12 may be applications currently installed on computing device 2. Figure 1 Two applications are illustrated as currently installed on computing device 2 , but it should be understood that any number of applications may 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 include sub-packages 20A-20N (collectively referred to as "sub-packages 20") and sub-packages 22A-22M (collectively referred to as "sub-packages 22"), respectively. Each of sub-packages 20 and 22 is an installable application sub-package that provides a discrete set of functionality for applications 10 and 12. As an example, a software developer may design an application 10 (e.g., a navigation application) with a discrete set of functionality. Application 10 may include a turn-by-turn navigation user interface, a point of interest user interface (e.g., displaying detailed information of a point of interest on a map), and a settings user interface. A software developer may design an application 10 with three different sub-packages (e.g., sub-packages 20A, 20B, and 20N), wherein each sub-package 20 includes a set of executable components to implement functionality for a corresponding user interface.
[0036] Although all sub-packages 20 of the application 10 may be large in total, the computing device 2 may retrieve, install, and execute only those sub-packages 20 necessary to provide the functions requested by the user. In this way, when the application 10 is installed and / or executed, only a portion of the sub-packages 20 for the application 10 need to reside locally on the computing device for execution by the application 10. For example, when the application 10 is initially installed, only the 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., 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 the application 10. Therefore, when the user initially requests a function provided by one or more sub-packages 20B-20N, one or more of the sub-packages 20B-20N may be installed (i.e., installed on demand). In some examples, if the 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 may be uninstalled from the computing device 2. In such an example, the next time the user requests functionality provided by the uninstalled one or more sub-packages 20B-20N, the uninstalled one or more sub-packages 20B-20N may be reinstalled (i.e., reinstalled on demand).
[0037] When a user requests additional functionality for an application, the computing device 2 can automatically retrieve the required sub-package 20 (e.g., sub-package 20B, sub-package 20N, etc.) that provides the requested functionality. When the application 10 is currently being executed on the computing device 2, the computing device can automatically retrieve and install the required sub-package 20. In this way, the application can be installed and loaded faster because if only a subset of the application functionality is required, there is no need to retrieve and install the entire sub-package set for the application. Therefore, compared to retrieving the entire application, the network, computing, and storage resources used for installation may be reduced. The applicant notes that although in various cases, the techniques of the present disclosure are described with reference to the application, the same techniques can be applied to application sub-packages (e.g., in order to provide a certain functionality, a patch version of another application sub-package already installed on the device can be used to provide and install a stripped version of the application sub-package). Similarly, even if the reference application specifically describes a particular technique, the applicant does not limit the description of these techniques to only apply to certain applications unless otherwise specified.
[0038] The application and application sub-package installed at the computing device 2 may include one or more application elements respectively. The application element of the application may include code used when executing the application. For example, the application element may include executable code and libraries executed by the computing device 2 to execute the application, resources accessed during the execution of the application (e.g., images, textures, files, scripts, uncompiled code, etc.), etc. Usually, the application element is included in the application or application sub-package in a compressed form. That is, when the application or application sub-package is installed at the 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 element of the application without the explicit permission of the application containing the application element. Therefore, the application element of the application does not include shared libraries or other data accessed by multiple different applications. Similarly, application 10 may not be able to access the application element of application 12, and application 12 may not be able to access the application element of application 10. In some examples, the application in the computing device 2 can be executed in a sandbox environment, which isolates the application element 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 that is specific to the architecture of one or more processors of computing device 2. For example, applications 10 and 12 may include native code for various platforms including computing devices. Resources may include image content, audio content, video content, etc. For example, when application 10 or application 12 is executed at computing device 2, application 10 or 12 may output such image content, audio content, and / or video content at UIC 14.
[0040] Compiled resources can be compiled resources, such as strings or extensible markup language (XML) files compiled into compiled resources. Managed code can be non-architecture-specific compiled code and can be executed by a virtual machine, such as compiled Java code, compiled Dalvik executable code, etc. In some examples, an application can include both managed code and native code as application elements. For example, an application can include one or more libraries written in native code, and can also include one or more other libraries written in managed code.
[0041] The application installer 26 may be implemented by one or more processors such as Figure 2The processor 36 of the UIC 14 executes to install and update applications at the computing device 2. The application installer 26 can perform the functions of an application market application, which allows a user to interact with the application installer 26 via the UIC 14 to browse, download and install applications from an application provider server (such as the application provider server 4). The UIC 14 can receive input indicating a request to install the application 18 at the computing device 2, and the UI module 16 can forward the request to install the application 18 at the computing device 2 to the application installer 26.
[0042] According to aspects of the present disclosure, computing device 2 may download an application or application sub-package from application provider server 4 for installation at computing device 2 in a manner that utilizes application elements of the application or application sub-package currently installed on computing device 2. Figure 1 In the example of , to install application 18, application installer 26 may be executed at 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, the request being in response to user input to install an application (optionally providing specific application functionality) that is not currently installed on the computing device. When the user input is a request for functionality that has not been previously used by a specific application, i.e., corresponding to a request to install one or more sub-packages that provide a discrete set of functionality, the user input may be received while the specific application is being executed at the computing device. When application installer 26 has received and / or obtained at least one application sub-package 24A-24O (collectively referred to as "application sub-package 24") of application 18, application installer 26 may install application 18 at computing device 2. When the user input is a request for functionality that has not been previously used by a specific application, the download and installation may be performed while the specific application is being executed at the computing device. This just-in-time approach to sub-package installation may improve resource utilization of mobile computing devices without affecting 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 are available from one or more applications currently installed on computing device 2 (i.e., whether one or more sub-packages 20 and / or 22 may be used in place of one or more sub-packages 24). In response to determining that the one or more application elements of the application to be downloaded are available from one or more applications currently installed on computing device 2, application provider 6 may refrain from sending each application element of the application to computing device 2 when the one or more application elements of the application are available from the one or more applications currently installed on computing device 2. In this manner, application provider 6 may refrain from sending each application element of the application to computing device 2 if the one or more application elements of the application are available from one or more applications currently installed on computing device 2.
[0044] Application provider 6 may determine which applications and which application sub-packages are currently installed on computing device 2, and may also determine application elements of the applications currently installed on computing device 2. For example, application provider 6 may access information stored at application provider server 4 about applications currently installed at application 18, or may receive from computing device 2 an indication of applications currently installed at computing device 2. Application provider 6 may determine, based on such a determination, one or more application elements that may be obtained from the applications currently installed on computing device 2, and may determine whether transmission of those one or more application elements to computing device 2 should be suppressed. In the event that application provider 6 is to suppress transmission of application elements, application provider 6 may instead transmit an indication of the one or more application elements currently installed on the computing device that will be reused during installation of application 18.
[0045] In situations where the systems discussed herein collect personal information about users or may make use of personal information, users may be provided with the opportunity to control whether programs or features collect user information (e.g., information about the user's social network, behavior or activities, occupation, user preferences, or the user's current location), or to control whether and / or how content that may be more relevant to the user is received from content servers. In addition, certain data may be processed in one or more ways before being stored or used so that personally identifiable information is removed. For example, the user's identity may be processed so that the user's personally identifiable information cannot be determined, or the user's geographic location for which location information is obtained may be summarized (such as to a city, zip code, or state level) so that the user's specific location cannot be determined. Thus, users may control how information about the user is collected and used by content servers.
[0046] exist Figure 1In the example of FIG. 1 , a 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 to such information by application provider 6. 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 receive and / or access information associated with computing device 2 only after receiving explicit consent from the user of computing device 2.
[0047] exist Figure 1 In the example of , application provider 6 can determine whether one or more application elements of application 18 can be obtained from applications 10 and 12 that are currently installed on computing device 2. For example, application provider 6 can access information indicating one or more applications (e.g., applications 10 and 12) that are currently installed on computing device 2, and information indicating application elements of these applications that are currently installed on computing device 2. This information can be stored at application provider server 4 or another location (e.g., another remote server) accessible to application provider 6. Application provider 6 can read such information and can determine one or more application elements of application 18 that can be obtained from one or more applications that are already installed on computing device 2.
[0048] If an application already installed on computing device 2 has an application element that is identical to an application element of application 18, application provider 6 may determine that the application element of application 18 may be obtained from the application already installed on computing device 2. For example, if the application element of application 18 is a library, application provider 6 may determine that the library may be obtained from the application already installed at 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 an application already installed on computing device 2, application provider 6 may determine that the video file may be obtained from the application already installed on computing device 2.
[0049] Application provider 6 may also determine that the application element of application 18 may be obtained from the application already installed on computing device 2 when the application already installed on computing device 2 has an application element that may be modified, such as via a patch, to become identical to the application element of application 18. For example, if the application element of application 18 is the latest version of a library, and if the application element of the application already installed on computing device 2 contains an old 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 old version of the library to the latest version of the library. In this example, application provider 6 may generate a patch to update the old version of the library to the latest version of the library, and may send the patch to computing device 2 so that computing device 2 may apply the patch to the old version of the library to update it to the latest version of the library.
[0050] When application provider 6 determines that an application element in the application elements can be obtained (or, in other words, available) from an application already installed at computing device 2, application provider 6 can determine whether to request computing device 2 to obtain the 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 one of the application elements to computing device 2. Application provider 6 can make the determination based at least in part on a variety of factors (such as user sensitivity to download time, network bandwidth available to computing device 2, type of network connection computing device 2 has, 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 can generate a profile for computing device 2 based on these and other factors. Using the profile, application provider 6 can determine whether to instruct computing device 2 to obtain application elements from applications already installed on computing device 2 and install application 18 using the obtained application elements, or whether application provider 6 still sends the 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 may 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 may 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 may 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 may be sent to computing device 2. In another example, application provider 6 may determine the amount of network bandwidth available to computing device 2, and if the available network bandwidth of computing device 2 is above a threshold, the application elements may be sent to computing device 2.
[0053] In another example, if the amount of remaining battery life of computing device 2 is less than a threshold, 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 an application element from an application already installed on computing device 2, and if computing device 2 is connected to application provider 6 via Wi-Fi, the application element can be sent to computing device 2 because Wi-Fi may be more power efficient than a cellular data connection.
[0054] In some cases, the application 18 may already be installed on the computing device 2, but one or more sub-packages 24 are not installed on the computing device 2. Instead of an initial request to install the application 18, the user of the computing device 2 may be requesting to use additional functionality of the application 18 provided in a sub-package of the application 18, such as sub-package 24B, that is not currently installed on the computing device 2. In such a case, the application provider 6 may determine the application elements included in the application sub-package 24B and determine whether any of the application elements are included in other sub-packages 20, 22 or applications 10, 12 that are already installed on the computing device 2.
[0055] When the application provider 6 determines that the computing device 2 can obtain an application element from an application or application sub-package already installed on the computing device 2, the application provider 6 can send a request to the computing device 2 to obtain an application element of the application 18 from the application already installed on the computing device 2. The request can identify the application element of the application 18 that can be obtained from the application already installed on the computing device 2, identify the application element of the application already installed on the computing device 2, identify the location of the application element of the application already installed on the computing device 2, etc. In other words, the 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 the application 18. If necessary, the application provider 6 can also send a patch to the computing device 2, which can be used to update the application element of the application already installed on the computing device 2, so that when patched, the application element is the same as a certain application element in the application elements. For example, one or more application elements may include an application element that updates the current version to a different version required by the 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 to computing device 2 and computing device 2 can receive from application provider 6 an indication of one or more application elements of application 18 that can be obtained from an application already installed on computing device 2, and the one or more patches are one or more patches that computing device 2 can apply to one or more application elements of an application already installed on computing device 2 in order to obtain one or more application elements of application 18 from an application 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 may obtain the 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 the 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 in one or more applications already installed on computing device 2 that correspond to one or more application elements of application 18 to be obtained from one or more applications already installed on computing device 2. Application elements of applications already installed on computing device 2 may correspond to application elements of application 18 if computing device 2 can generate application elements of application 18, such as by making a copy of the corresponding application elements or by applying a patch to the corresponding application elements.
[0059] The request may include identification information for each of one or more application elements of one or more applications already installed on computing device 2, such as a name or other identification information associated with one or more applications and / or one or more application elements, a storage location (e.g., a directory path) of one or more application elements in a storage device included in or operably coupled to computing device 2, and the like.
[0060] The request may also specify how to obtain one or more application elements of application 18 from 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 may be obtained by making a copy of the corresponding application element and by using the copy of the corresponding application element as the application element 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, computing device 2 may receive one or more patches from application provider 6, and computing device 2 may apply the patches to the corresponding application element to obtain the application element of application 18. Computing device 2 may apply the patches to the corresponding application element and may use the patched copy of the corresponding application element (i.e., the 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 sub-packages 24A and 24B. When sending a request to install application 18, 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 a different portion of application 18 from application provider 6. For example, one download stream may be used to download a stripped version of sub-package 24A and another download stream may be used to download a patch that needs to be applied to an application element already installed on computing device 2 in order for application sub-package 24A to use the application element.
[0063] In this example, application sub-package 24A provides core functionality of application 18 and is required for execution of application 18. Application provider 6 may determine that application elements of application sub-package 24A may be obtained from applications or application sub-packages already installed on computing device 2, and that the application elements require patching before being used by application sub-package 24A. In response, application provider 6 may generate a stripped version of application sub-package 24A that does not include the application elements already installed on computing device 2. In some cases, even if the stripped version of application sub-package 24A has been compressed using a standard compression algorithm, application provider 6 may apply a second, different compression algorithm to generate a stripped version of the application sub-package that is further compressed and therefore smaller in size, to further reduce the amount of data that needs to be sent to computing device 2, and to more efficiently utilize network resources and computing resources, such as memory, storage, and processing power.
[0064] Application provider 6 may also generate a patch to be applied by computing device 2 to the already installed application element in order to change the application element to the version of the application element required by application sub-package 24A. Application provider 6 compresses the patch and sends the patch 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 sub-package 24A to computing device 2 using another of the download streams established with computing device 2. Typically, the size of the compressed patch will be smaller than the stripped version of application sub-package 24A and therefore will take less time to transmit to computing device 2.
[0065] Because applying a patch to a compressed application element (such as a library) can produce an inefficient patch version of the element (i.e., larger in size than if the patch were applied to an uncompressed version of the same application element), it is preferred to apply the patch to an uncompressed version of the application element. Therefore, in accordance with the techniques of the present disclosure, while application provider 6 is creating and sending a stripped version of the patch and application sub-package 24A, computing device 2 can create a copy of one or more application elements to be reused by application sub-package 24A. If any application elements are stored at computing device 2 in a compressed format, computing device 2 can decompress the copy of the compressed application element. In various cases, creating a copy of the application element and decompressing the copy of the compressed application element may take less time than the time required to download 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 patch application element. In the case where the application sub-package 24A requires the application element to be stored in a compressed format, after the patch is applied, computing device 2 recompresses the patch version of the application element (to form a compressed patch application element). Typically, the time required for the download, decompression, patching and recompression process is less than the time required to download the stripped version of the application sub-package 24A. In this way, the technology of the present disclosure allows the use of compressed application elements that have been installed on computing device 2, even if the compressed application element may need to be patched before being used by the application sub-package 24A, and there is no need to generate a suboptimal patch version of the application element. Then, computing device 2 can use the compressed patch application element and any other application elements required and the stripped version of the application or application sub-package to install the application. Furthermore, by downloading, decompressing, patching, and recompressing the application elements as described above, the download and installation time required to install the application sub-package 24A is lower than the time required if the entire application sub-package 24A were sent to the computing device 2 or if only the uncompressed application elements that are already installed on the computing device 2 were stripped out of the application sub-package 24A. Network resources and computing resources, such as memory, storage, and processing power, may also be reduced.
[0067] The techniques described herein may also improve the functionality of the computing device 2 itself by minimizing the impact of installing the application 18 on the battery life and / or processing power of the computing device 2. By determining whether to send one or more application elements from the application provider server 4 to the computing device 2 or whether to obtain one or more application elements from an application already installed on the computing device 2 based at least in part on the type of network connection established by the computing device 2, the available bandwidth of the network connection established by the computing device 2, the current processor and / or memory load of the computing device 2, and / or the remaining battery life of the computing device 2, the techniques described herein may adaptively install the application 18 on the computing device 2 in a manner that minimizes the impact of installing the application 18 on the battery life and / or processing power of the computing device 2.
[0068] Figure 2 is a block diagram illustrating an exemplary computing device configured to install one or more applications by leveraging application elements of applications already installed on the computing device in accordance with one or more aspects of the present disclosure. Figure 2 Only one specific example of computing device 2 is illustrated, and many other examples of computing device 2 may 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 of FIG. 1 , 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. Storage component 28 of computing device 2 includes UI module 16, 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 can 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 may 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 over 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 that can send and / or receive 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 components 34 of computing device 2 include presence-sensitive input devices (e.g., touch-sensitive screens, presence-sensitive displays), mice, keyboards, voice response systems, cameras, microphones, or any other type of device for detecting input from people or machines. In some examples, input components 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, to name a few other non-limiting examples.
[0073] One or more output components 32 of computing device 2 may generate output. Examples of output are tactile, audio, and video output. In one example, output components 32 of computing device 2 include a PSD, a sound card, a video graphics adapter card, a speaker, a cathode ray tube (CRT) monitor, a 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. Output component 32 may be a display component, such as a screen on which UIC 14 displays information, and input component 34 may be a presence-sensitive input component that detects objects at and / or near output component 32. Output component 32 and 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 of FIG. 1 , UIC 14 may present a user interface.
[0075] Although illustrated as an internal component of computing device 2, UIC 14 may 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 and physically separated from the packaging or housing of computing device 2 (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 storage, 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 removed. 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 can be configured to store a larger amount of information than the amount of information usually stored by volatile memory. Storage component 28 can be further configured as a non-volatile memory space for long-term storage of information and retain information after a power on / off cycle. Examples of non-volatile memory include magnetic hard disks, optical disks, floppy disks, flash memory, or electrically programmable memory (EPROM) or electrically erasable programmable (EEPROM) memory. Storage component 28 can 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 a 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 may implement functions associated with computing device 2 and / or execute instructions associated with computing device 2. Examples of processor 36 include an application processor, a display controller, an auxiliary processor, 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 may be operated by processor 36 to implement various actions, operations, or functions of computing device 2. For example, processor 36 of computing device 2 may retrieve and execute instructions stored by storage component 28, causing processor 36 to perform operations of UI module 16, application installer 26, and applications 10, 12, and 18. The instructions, when executed by processor 36, may cause computing device 2 to store information within storage component 28.
[0079] UI module 16 may manage user interaction with UIC 14 and other components of computing device 2. When a user of computing device 2 views output and / or provides input at UIC 14, UI module 16 may cause 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 implement various functions.
[0081] The application installer 26 may be executed by the processor 36 to install and update applications at the computing device 2. The application installer 26 may perform the functions of an application market application that allows a user to interact with the application installer 26 via the UIC 14 to browse, download, and install applications from an application provider server (such as the application provider server 4). The UIC 14 may receive input indicating a request to install the application 18 at the computing device 2, and the UI module 16 may forward the request to install the application 18 at the computing device 2 to the application installer 26.
[0082] In response to receiving a request to install application 18 at computing device 2, the application installer may send a request for application 18 to application provider 6 at application provider server 4 via communication unit 38. The request may include information that may be used by application provider 6 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 processor and / or memory load of processor 36, the remaining battery life of computing device 2, user preferences regarding downloading of application 18, applications currently installed on computing device 2, application elements of applications currently installed on computing device 2, and the like.
[0083] In response to sending a request for application 18 to application provider 6, application installer 26 may receive first 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 a compressed form so as to reduce the amount of time required to download the first one or more application elements and reduce network resources used in the download.
[0084] Each of the first one or more application elements may have been compressed (e.g., by application provider server 4) using a compression algorithm specific to an application element type of the application element to reduce the size of the first one or more application elements transmitted to computing device 2 via the network. Thus, if the first one or more application elements of application 18 include two or more application elements of two or more application element types, each of two or more of the two or more application elements may have been compressed using a different compression algorithm. To assist in decompressing application elements received from application provider 6, the computing device 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 references to locations of data blocks in the compression dictionary. The compression dictionary may include indices of data blocks that the dictionary-based compression algorithm may index in order to compress and decompress data. To decompress application elements that have been compressed using a dictionary-based compression algorithm, application installer 26 may replace references in compressed graphical elements with data blocks at corresponding reference locations 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 26 may receive a request to obtain a second one or more application elements of application 18 from one or more applications already installed on computing device 2. The request may identify one or more corresponding application elements of the application already installed on computing device 2 that correspond to the second one or more application elements of application 18, so that application installer 26 may obtain the second one 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 the one or more corresponding application elements in storage component 28, an indication of a unique identifier of the one or more corresponding application elements, etc., which may enable computing device 2 to identify the one or more corresponding application elements from the application elements of the application 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 may be used to download a different portion 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 application elements already installed on computing device 2), while another download stream may be used to download patches that need to be applied to application elements already installed on computing device 2 in order for application 18 to use the application elements.
[0087] While application provider 6 is creating and sending the patch and stripped version of application 18, computing device 2 may create a copy of one or more application elements to be reused by application 18, including the application elements that need to be patched. If any application elements are stored in a compressed format at computing device 2, application installer 26 may decompress the copy of the compressed application element(s). In various cases, creating the copy of the application elements and decompressing the copy of the compressed application element(s) may take less time than the time required to download the patch.
[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. In the case where application 18 requires the application element to be stored in a compressed format, after applying the patch, application installer 26 recompresses the patch version of the application element.
[0089] Once 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 to be patched, application installer 26 can use the application elements of application 18 to install application 18. Installing application 18 can include creating a package for application 18, wherein the application elements of application 18 are stored within the package in a manner that the package represents an application that computing device 2 can execute to implement one or more functions.
[0090] Figure 3 is a block diagram illustrating an exemplary application provider server according to one or more aspects of the present disclosure. Figure 3 Only one specific example of an application provider server 4 is illustrated, and many other examples of application provider servers 4 may 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 For example, the application provider server 4 may include a server cluster, and each server constituting the server cluster of the application provider server 4 may include Figure 3 All or some of the components described herein may be used to implement the technology disclosed herein.
[0091] like Figure 3 As shown in the example of FIG. 4 , application provider server 4 includes one or more processors 40 , one or more communication units 42 , and one or more storage devices 48 . Storage device 48 includes application provider 6 and application provider data storage 52 .
[0092] Processor 40 is similar to Figure 2 The communication unit 42 is similar to the processor 36 of the computing device 2. 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 communication channel 30 of the computing device 2 can thus interconnect each of the components 40, 42, and 48 for inter-component communication. In some examples, the communication channel 50 can include a system bus, a network connection, an inter-process communication data structure, or any other method for transferring data.
[0093] In some examples, storage device 48 is a temporary memory, meaning that the primary purpose of storage device 48 is not long-term storage. In this example, storage device 48 may be configured as volatile memory for short-term storage of information, and thus does not retain the stored contents if power is removed. 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 the amount of information typically stored by volatile memory. Storage device 48 can be further configured as a non-volatile memory space for long-term storage of information and retain information after a power on / off cycle. Examples of non-volatile memory include a magnetic hard disk, an optical disk, a floppy disk, a flash memory, or an electrically programmable memory (EPROM) or an electrically erasable programmable (EEPROM) memory. 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 a memory configured to store data or other relevant information associated with application provider 6 and application provider data storage 52.
[0095] Application provider data store 52 may be configured to store information received by, created by, and / or otherwise associated with application provider 6. For example, application provider data store 52 may store applications that may be downloaded from application provider server 4 for installation on computing devices, such as computing device 2. Such applications may be uploaded to application provider server 4 by an application developer so that the applications are available for download to a computing device by application provider 6.
[0096] The application provider data store 52 may 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 store 52 may store indications of 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, and the like.
[0097] Application provider 6 may be executed at processor 40 and may be configured to send applications and patches to computing devices to install applications on computing devices and / or update applications installed at computing device 2. Application provider 6 may receive a request for an application from computing device 2, and may, in response to receiving the request from computing device 2, send one or more application elements of the requested application to computing device 2.
[0098] Instead of sending all application elements of the requested application, application provider 6 may determine whether one or more application elements of the application are available from one or more applications currently installed on computing device 2. If so, application provider 6 may instruct computing device 2 to obtain such one or more application elements from one or more applications currently installed on computing device 2, and may refrain from sending such one or more application elements to computing device 2.
[0099] Application provider data store 52 may store indications of applications currently installed on various computing devices in communication 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 may update application provider data store 52 to include an indication that the requested application is installed on computing device 2. Additionally, when an application is deleted or otherwise uninstalled from computing device 2, application provider server 4 may receive an indication that the application was deleted or uninstalled from computing device 2 and may update application provider data store 52 to include an indication that the application is no longer installed on computing device 2. In this manner, application provider data store 52 may store indications of applications currently installed on computing devices 2 in communication with application provider server 4.
[0100] Application provider 6 may determine, based on information stored in application provider data store 52 (or information provided in the request, where such information is not stored), that one or more application elements of the requested application may be obtained from an application currently installed on a requesting computing device (e.g., computing device 2). The application element of the requested application may be obtained from the application currently installed on the requesting computing device if 1) the application currently installed on the requesting computing device includes an application element that is the same as the application element of the requested application, or 2) the application currently installed on the requesting computing device includes an application element that can be patched to be the same as the application element of the requested application. For example, if the application element of the requested application is a library, the application element may be obtained from the application currently installed on computing device 2 if the application includes the same version of the library, or an earlier version of the library that can be updated to the same version of the library via a patch.
[0101] When application provider 6 determines that one or more application elements of the requested application can be obtained from an application currently installed on the requesting computing device, application provider 6 can determine to suppress sending the one or more application elements of the requested application to the requesting computing device, and instead instruct the requesting computing device to obtain the one or more application elements of the requested application from the application currently installed on the requesting computing device. In other cases, application provider 6 can send the one or more application elements of the requested application to the requesting computing device even when the one or more application elements of the requested application can be obtained from an application currently installed on the requesting computing device.
[0102] The application provider 6 may determine, based on various factors, whether to send the one or more application elements of the requested application to the requesting computing device even when the one or more application elements of the requested application are available from applications currently installed on the requesting computing device. These factors may include user sensitivity to the amount of time to install the requested application, network connection characteristics of the requesting computing device, available bandwidth of the network connection of the requesting computing device, type of network connection of the requesting computing device, location of the computing device, processor and / or memory utilization of any patches to be applied by the requesting computing device to obtain the one or more application elements, remaining battery life of the computing device, etc. The application provider server 4 may receive indications of these factors from the requesting computing device and may store this information in the application provider data store 52. The application provider 6 may generate a profile for the requesting computing device based on these and other factors to determine whether to send the 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 a cellular data connection rather than Wi-Fi, application provider 6 may refrain from sending 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, application provider 6 may refrain from sending one or more application elements of the requested application to the requesting computing device if the requesting computing device is connected to application provider 6 via a metered network connection, and may send one or more application elements of the requested application to the requesting computing device if the requesting device is connected to application provider 6 via an unmetered network connection or a network connection with unlimited data. In another example, application provider 6 may determine an amount of network bandwidth available to the requesting computing device, and may send one or more application elements of the requested application to the requesting computing device if the available network bandwidth of the requesting computing device is above a threshold.
[0105] In some examples, when obtaining one or more application elements of the requested application from an application currently installed on the requesting computing device includes applying a patch to the application elements of the currently installed application, application provider 6 may determine a processor and / or memory utilization of the patch to be applied by the requesting computing device to the application elements of the currently installed application, as well as a current processor and / or memory utilization of the requesting computing device and a remaining battery life of the requesting computing device. Because applying a patch to the application elements of the currently installed application may be potentially processor-intensive and memory-intensive, and may potentially drain the battery of the requesting computing device, application provider 6 may determine whether the requesting computing device has available resources to apply the patch in a faster and / or more resource-efficient manner than downloading the one or more application elements of the requested application from application provider server 4.
[0106] The application provider 6 can generate and send to the requesting device a stripped version of the requested application, and an indication of one or more application elements of the requested application to be obtained from the application already installed at the requesting device. The stripped version of the requested application is a version of the requested application that does not include one or more application elements to be obtained from the application already installed at the requesting device. If necessary, the 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, different download streams can be used to send the stripped version and patch of the requested application to the requesting computing device in parallel. By sending the patch in a download stream separate from the stripped version of the requested application, the requesting computing device can begin to execute and usually will complete the decompression, patching and recompression techniques described herein before the stripped version of the requested application is completely downloaded to the requesting device.
[0107] According to aspects of the present disclosure, in order to further reduce the amount of data sent from application provider server 4 and a computing device (e.g., computing device 2) to send one or more application elements to the computing device to install or update the application on the computing device, application provider server 4 may compress the application elements sent from application provider server 4 to the computing device. Specifically, compression module 56 may be executed at processor 40 to apply different compression techniques to different types of application elements, and may adjust parameters of the compression techniques for the same type of application elements based on the content of the application elements. In this way, compression module 56 may be able to better compress different types of different application elements than applying a single compression technique to compress different types of different application elements.
[0108] Compression module 56 may determine a compression technique to apply to an application element based at least in part on the type of application element to be compressed by compression module 56. Thus, when compression module 56 encounters a plurality of 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 may apply a first compression technique to the first application element of the first type, and may apply a second compression technique different from the first compression technique to the second application element of the second type. In this manner, compression module 56 may apply a different compression technique to compress each of a plurality of different types of application elements for each of a plurality of different types of application elements.
[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 that are binary content containing architecture-specific native code. In order to compress this type of application element, the compression module 56 may use a compression technique optimized for compressing native code, such as a compression technique that aligns code at each CPU instruction level, compared to a compression technique that treats native code as an arbitrary block 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 elements, compression module 56 may rely on the existing compression provided by the native file formats of the images, audio files, video files, etc. In this case, compression module 56 may not have to further compress these application elements.
[0111] The application may also include one or more application elements that are managed code. Managed code may be executable code that is executed under the management of a virtual machine, such as compiled Java code, compiled Dalvik executable code, etc. For this type of application element, the compression module 56 may use a compression technique optimized for compressing managed code. For example, such a compression technique may adjust a dictionary-based compression algorithm for common phrases in compiled Java code or compiled Dalvik executable code.
[0112] The application provider data store 52 may store a compression dictionary for a compression technique that uses a dictionary-based compression algorithm in which a block of data, such as a string, may be replaced by referencing the location of the block of data in the compression dictionary. The compression dictionary may include an index of blocks of data that the dictionary-based compression algorithm may index to compress and decompress data.
[0113] According to aspects of the present disclosure, to further reduce the amount of data sent from application provider server 4 and a computing device (e.g., computing device 2) to send one or more application elements to the computing device, application provider server 4 can transform the application elements of the application to reduce the size of a patch that can be applied to update a previous or old version of the application element. For example, application provider 6 can reorganize the code of a new version of a library to reduce the size of a patch that is used to update a previous version of the library to a new version of the library.
[0114] This reorganization can be helpful for elements of an app that are managed code. For managed code, a small change in the output code generated by the compiler can result in large differences in the parameters created by the offsets. Therefore, the size of a patch to patch managed code can be relatively large compared to the size of the managed code, even for incremental changes to the managed code.
[0115] A patch for updating a previous version of an application element to an updated version of the application element is a small encoding of the differences between the updated version of the application element and the previous version of the application element. The larger the size of the patch, the longer it takes to download and apply the patch. By reducing the size of the patch, the application provider 6 can reduce the amount of time it takes to download the patch from the application provider server 4 and the network resources required to transmit the patch, and can also reduce the processing required to apply the patch on the computing device.
[0116] Application provider 6 may include a reorganization module 58 that is executed at processor 40 to reorganize the code of one or more application elements based on previous versions of the one or more application elements so as to reduce the size of a patch used to patch the previous versions of the one or more application elements to update them to the one or more 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 the previous version of the application element to reduce the size of a patch that may be used to update the previous version of the application element to the new version of the application element. Application provider 6 may generate a patch based at least in part 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 in the case of managed code or native code, the reorganization module 58 can reduce the size of the patch that patches the previous version of the application element to the new version of the application element by maximizing the number of contiguous blocks in the code of the new version of the application element that have matching contiguous blocks in the code of the previous version of the application element. The contiguous blocks in the new version of the application element that have matching contiguous blocks in the previous version of the application element can be referred to as shared contiguous blocks. The greater the number of shared contiguous blocks, the fewer replacements that can be encoded in the patch, thereby reducing the size of the patch.
[0118] In order to reassemble the new version of the application element, the reassembly module 58 can obtain the profile of the previous version of the application element to be patched. In some examples, the application provider 6 can perform archiving of the previous version of the application element. In other examples, the application provider 6 can receive the profile of the previous version of the application element from another computing device.
[0119] The profile of an application element may include information derived from the application element that describes the code (e.g., managed code) in the application element, such as methods, constants, classes, etc. in the code, and describes the order of the methods, constants, and classes in the code. When an application element includes more than one code file, each code file may have an associated profile that describes the code within the code file.
[0120] The reorganization module 58 can use the profile of the previous version of the application element to reorganize the new version of the application element. The reorganization module 58 can find all methods, constants and classes in one or more code files included 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 by the profile. The reorganization module 58 can reorganize the code file by grouping these methods, constants and classes together in the code file of the new version of the application element, or in the newly created code file of the new version of the application element. The reorganization module 58 can also rearrange the order of the methods, constants and classes grouped together so that they match the order of the methods, constants and classes in the profile. The reorganization module 58 can adjust all internal references to methods, constants and classes in the code file of the new version of the application element to take into account their new positions in the code file. If necessary, the application provider 6 can re-sign the binary file that constitutes the new version of the application element.
[0121] In some examples, reorganizing the code files of the new version of the application element according to the above techniques can increase the number of code files in the application element. For example, the reorganization module 58 can divide a single code file into multiple code files in the new version of the application element, wherein each code file is associated with a single profile.
[0122] Reorganizing the code files of the new version of the application element according to the above techniques can increase the number and size of continuous blocks in the new version of the application element that match continuous regions in the previous version of the application element. By increasing the number and size of matching continuous regions, the above techniques reduce the size of the patch used to update the previous version of the application element to the new version of the application element.
[0123] Figure 4 is a conceptual diagram illustrating an exemplary computing device with an application container for dynamically loading installable sub-packages in accordance with the techniques of this disclosure. Figure 4 Only one specific example of computing device 100 is illustrated. Many other examples of computing device 100 may be used in other instances and may include a subset of the components included in the 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 of , 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. 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 communication unit 244 is similar to the processor 36 of the computing device 2. 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 communication channel 30 of the computing device 2 thus interconnects each of the components 204, 240, 242, 244, 246, 248, and 258 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 transferring data.
[0126] One or more processors 240 may implement functions and / or execute instructions within the computing device 100. For example, a processor 240 on the computing device 100 may receive and execute instructions stored by a storage component 248 that provide functionality of the operating system 136, application containers 102A-102C (collectively, “application containers 102”), and the runtime system 126. These instructions executed by the processor 240 may cause the computing device 100 to store and / or modify information in the storage component 248 during program execution. The processor 240 may execute the instructions of the operating system 136, application container 102, and runtime system 126 to implement one or more operations. That is, the operating system 136, application container 102, and runtime system 126 may be operated by the processor 240 to perform various functions described in the present disclosure.
[0127] One or more input components 242 of computing device 100 can receive input. Examples of input are tactile, audio, kinetic, and optical input, to name a few. In one example, input component 242 of computing device 100 includes a mouse, keyboard, voice response system, camera, button, control pad, microphone, or any other type of device for detecting input from a person or machine. In some examples, input component 242 can be a presence-sensitive input component, which can include a presence-sensitive screen, a 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 output. In some examples, output components 246 of computing device 100 include a presence-sensitive screen, a sound card, a video graphics adapter card, a speaker, a cathode ray tube (CRT) monitor, a liquid crystal display (LCD), or any other type of device for generating output to a person or machine. The output component may include a display component, such as a cathode ray tube (CRT) monitor, a liquid crystal display (LCD), a light emitting diode (LED), or any other type of device for generating tactile, audio, and / or visual output.
[0129] In some examples, presence-sensitive display 204 of computing device 100 may include functionality of input component 242 and / or output component 246. Figure 4 In an example of , presence-sensitive display 204 may include presence-sensitive input component 215, such as a presence-sensitive screen or a touch-sensitive screen. In some examples, presence-sensitive input component 215 may detect objects at and / or near presence-sensitive input component 215. As one exemplary range, presence-sensitive input component 215 may detect objects, such as a finger or stylus, within two inches or less of presence-sensitive input component 215. Presence-sensitive input component 215 may determine the location (e.g., (x, y) coordinates) of the presence-sensitive input component where the object was detected. In another exemplary range, presence-sensitive input component 215 may detect objects two inches or less from presence-sensitive input component 215, and other ranges are possible. Presence-sensitive input component 215 may use capacitive, inductive, and / or optical recognition techniques to determine the location of presence-sensitive input component 215 selected by a user's finger.
[0130] In some examples, presence-sensitive display 204 may also provide output to the user using tactile, audio, or video stimulation as described with reference to output component 246. For example, presence-sensitive display 204 may include display component 213 that presents a graphical user interface. Display component 213 may be any type of output component that provides visual output, such as described with reference to output component 246. Although illustrated as an integrated component of computing device 100, in some examples, 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, presence-sensitive display 204 may be a built-in component of computing device 100 that is located within and physically connected to the outer packaging of computing device 100 (e.g., a screen on a mobile phone). In another example, presence-sensitive display 204 may be an external component of computing device 100 that is located outside and physically separated from the packaging of computing device 100 (e.g., a monitor, projector, etc. that shares a wired and / or wireless data path with a tablet). In some examples, presence-sensitive display 204 , when located outside of and physically separated from the packaging of computing device 100 , can be implemented by two separate components: presence-sensitive input component 215 for receiving input and display component 213 for providing output.
[0131] like Figure 4As shown, computing device 100 may include power supply 258. In some examples, power supply 258 may be a battery. Power supply 258 may provide power to one or more components of computing device 100. Examples of power supply 258 may include, but are not necessarily 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) chemistries. In some examples, power supply 258 may have a limited capacity (e.g., 1000-3000 mAh).
[0132] The computing device 100 includes support for applications that are divided into various application sub-packages (such as Figure 1 The software developer may design an application to be composed of multiple user-defined sub-packages. Each user-defined sub-package may include a set of executable components that together provide a set of discrete functions. For example, a software developer may design a navigation application with multiple different user interfaces. Each user interface may include a set of different user interface elements and corresponding behaviors, and 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 detailed information of a point of interest on a map), and a settings user interface. A software developer may design an application with three different sub-packages, wherein 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 separate sets of functions, the application container 102 can enable applications to be executed at the computing device 100 without all corresponding executable components for all of its sub-packages being locally resident on the computing device 100. In this way, the initial execution of the application may not require the retrieval and / or installation of all sub-packages, but only a subset of the sub-packages that include executable components that implement the requested functions. In addition, by packaging multiple executable components in a single sub-package, the retrieval and / or installation of the executable components can occur on a sub-package basis according to the requested function (e.g., rendering a specific user interface), rather than retrieving and installing the executable components on an executable component-by-executable component basis, which may have poor performance and / or result in a poor user experience. Because the entire set of sub-packages of the application does not need to be stored locally on the computing device 100, the initial installation and / or initial execution of the application at the computing device 100 may require less time than the entire application needs to be downloaded, installed, and executed by the computing device 100 from a remote computing system. Similarly, the user can experience more of the responsiveness of the application and / or the performance of the application behavior. The initial installation may also require fewer network resources than downloading the entire app.
[0134] To be able to execute such applications, the computing device 100 includes an application container 102 and a runtime system 126. The runtime system 126 implements an execution model for applications built according to a specific programming language in which the application is written and built or compiled. The runtime system 126 may include one or more libraries and / or services accessible to the application container 102 during execution. As further described in the present disclosure, each application container 102 may correspond to a different application. The 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. The application container 102 may access services through an application programming interface (API) disclosed by the runtime system 126. In some examples, the runtime system 126 may be executed as one or more processes and / or threads. One or more processes and / or threads may be executed with or without operating system privileges.
[0135] When a user requests the execution of an application (such as Figure 1In the case of an application 10 that is not currently installed on the computing device, the runtime system 126 receives a request to perform a specific function of the application or to install an entire application that is not currently installed. For example, a user may provide user input at the presence-sensitive display 204 to install an application that is not currently installed on the computing device, where the application may be an application sub-package that provides a discrete set of functions. The presence-sensitive display 204 may cause the 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 sub-package of the application is not allocated in the volatile memory of the storage component 248, the runtime system 126 receives an application container from a remote computing system (e.g., Figure 1 6) retrieves the application definition. For example, the runtime system 126 causes one of the communication units 244 to send a request for the application definition to the remote computing system. The application definition may define multiple mappings between installable sub-packages of the application and user-specified identifiers.
[0136] In response to allocating application container 102A in volatile memory of computing device 100, runtime system 126 may initiate a specific function of the application based at least in part on the requested user-specified identifier. In response to determining, by application container 102A executed on the computing device, based at least in part on the application definition and the user-specified identifier, that an installable sub-package for the specific function is not stored in computing device 100, application container 102A may retrieve an installable sub-package including a plurality of executable components from a remote computing system (e.g., application provider 6).
[0137] Rather than downloading each executable component on a component-by-component basis and rather than downloading all executable components of an application, computing device 100 may retrieve only one or more sub-packages corresponding to a discrete set of functionality required by the application. Furthermore, rather than having an application loader identify each individual executable component that is not stored locally and individually retrieve and install such executable components on a component-by-component basis at runtime and during execution, application container 102A may download sub-packages for specific functionality based on identification by a software developer of the sub-package with a user-specified identifier. Likewise, retrieving sub-packages may be a less granular but more efficient retrieval mechanism than individually retrieving and installing such executable components on a component-by-component basis. Application container 102A may perform specific functionality of the application using one or more executable components of the retrieved sub-packages.
[0138] When downloading and installing an application sub-package from application provider 6, application provider 6 may determine whether it can download and install an application sub-package from an application or application sub-package that is already installed on computing device 100 (e.g., Figure 1In the example of FIG. 1 , application provider 6 obtains application elements of the application sub-package and determines that the application elements need to be patched before being used by the application sub-package. In response, application provider 6 may generate a stripped version of the application sub-package that does not include the application elements that are already installed at computing device 100. In some cases, even if the stripped version of the application sub-package has been compressed using a standard compression algorithm, application provider 6 may 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 may also generate a patch to be applied to the application element by computing device 100 to change the application element to the version of the application element required by the application sub-package. Application provider 6 compresses the patch and sends the patch 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 sub-package to computing device 100 using another download stream established with computing device 100. Typically, the size of the compressed patch is smaller than the stripped version of the application sub-package and therefore will take less time to transfer to computing device 100.
[0140] Because applying a patch to a compressed application element (such as a library) can result in an inefficient patch 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 preferred to apply the patch to an uncompressed version of the application element. Therefore, in accordance with the techniques of the present disclosure, while the application provider 6 is creating and sending stripped versions of patches and application sub-packages, the runtime system 126 can create copies of one or more application elements to be reused by the application sub-packages. If any application elements are stored at the computing device 100 in a compressed format, the runtime system 126 can decompress the copies of the compressed application element(s). In various cases, creating copies of application elements and decompressing copies of the compressed application element(s) may take less time than the time required to download the patch.
[0141] Once each patch is downloaded to the computing device 2, the runtime system 126 decompresses each patch and applies the uncompressed patch to the corresponding uncompressed copy of the application element. In the case where the application sub-package requires the application element to be stored in a compressed format, after the patch is applied, the runtime system 126 recompresses the patched version of the application element. Typically, this downloading, decompression, patching, and recompression process requires less time than downloading a stripped version of the application sub-package. In this way, even though the compressed application elements may need to be patched before being used by the application sub-package, the techniques of the present disclosure enable the use of compressed application elements that are already installed on the computing device 100 when the application sub-package is downloaded and installed, without the need to generate a suboptimal patched version of the application element.
[0142] In some examples, each respective application container 102 may correspond to a different application. For example, an operating system may include a user interface that allows a user to select different applications (e.g., from a menu or icon grid) based on respective icons corresponding to the different applications. For example, a user may select an email client icon from an operating system user interface, which causes the email client application to be executed using its own separate application container. Unlike application containers, extensions or other sub-applications (e.g., plug-ins, JavaScript, Java virtual machines, etc.) of a web browser may not be represented as separate applications to be launched in the user interface of the operating system. For example, even if a 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 user interface of the operating system as an independently launchable application.
[0143] As described in this disclosure, an application container may be different 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 an application container, a web browser may not expose such operating system APIs to extensions or other sub-applications within the web browser.
[0144] As described in the present disclosure, an application container may be different from a web browser because the application container may receive a user-specified identifier (e.g., a URI) from a manager component external to the application container (e.g., in a runtime system or operating system) so that a sub-package that changes the execution behavior or appearance of the application is retrieved without additional user intervention. The user-specified identifier may originate from other applications executing on the same computing device or a different computing device, and when received by the application container, the execution behavior or appearance of the application may be automatically changed. In contrast, a web browser may receive user input (e.g., entering text for a URL) within the web browser itself, rather than receiving user input from a source external to the application container (e.g., a manager component or another application external to the web browser). In addition, a web browser may not include a router and / or application definition, as described within the application container of the present disclosure, to perform a lookup of a user-specified identifier and change the execution of an application represented by the application container. Unlike an application container, a web browser may not include a callback interface that receives and buffers lifecycle calls to change the operation of a sub-package within an 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, plug-ins, and / or sub-applications. Unlike an application container, a web browser may not function properly or at all if all of the web browser's core functionality is not stored locally and available to a computing device for execution. In contrast, an application container may function properly if a subset of its core functionality (e.g., a sub-package for only a subset of a user interface) is stored locally and available to a computing device for execution.
[0146] Figure 5 is a flowchart illustrating exemplary operations performed by a computing system including one or more processors executing on a computing device and one or more processors executing at an application provider server according to one or more aspects of the present disclosure. 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 FIG. 4, and hereinafter, in Figure 1 and 3 Operations 504 , 506 , 508 , 510 , 512 , and 514 are described in the context of application provider server 4 as shown.
[0147] Computing device 2 may receive user input to install an application that is 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 user input, in operation, the computing device may send a request to an 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 of application 18 that enables computing device 2 to identify application 18 from applications stored at application provider server 4. Although this example is described as an initial installation of application 18, these techniques may also be applied to the installation of a sub-package of an application that is already installed on computing device 2. For example, these techniques may be applied to the installation of sub-package 24B of application 18, wherein other application sub-packages (e.g., sub-packages 24A and 24O) of application 18 are already installed on computing device 2.
[0148] Application provider server 4 receives the request (504), and in response, application provider server 4 may determine whether one or more application elements of application 18 are available 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 are available from another application already installed on computing device 2, application provider server 4 may refrain from sending the one or more application elements of application 18 to computing device 2, and instead send a request to computing device 2 to obtain the one or more elements of application 18 from another application installed on computing device 2 (508). The request may include an indication of the application element(s) of the application currently installed on the computing device that will be reused during installation of application 18.
[0149] For application elements of application 18 that are available from another application installed on computing device 2 and that need to be patched, application provider server 4 generates the necessary patches (or retrieves previously generated patches, e.g., from a repository) and sends the patches to computing device 2 (510). In various cases, the patches are sent using one of a plurality of download streams established between computing device 2 and application provider server 4. The request may include an indication of application elements of the application currently installed on the computing device that are to be patched prior to installing application 18.
[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, application provider server sends the stripped version to computing device 2 for download (514). In various cases, the stripped application may be sent using another download stream from a plurality of download streams between computing device 2 and application provider server 4. The other download stream is typically different from the download stream used to send the patch to computing device 2.
[0151] While the application provider server 4 is generating the patch and stripping application, the computing device 2 may at least begin to create a copy of the application element to be reused (516), and if the application element needs to be patched and is stored in a compressed format, at least begin to decompress the application element (518). Since the patch sent by the application provider server 4 is sent in a compressed format, after the computing device 2 receives the patch, the computing device 2 decompresses the patch (520). After the application element is patched and the patch is decompressed, the computing device 2 applies the patch to the application element (522) and recompresses the application element into a compressed version usable by the application 18 (524). Typically, these decompression, patching, and recompression steps occur while the stripping application is downloaded from the application provider server 4.
[0152] Computing device 2 may install application 18 using the patched version of the application element, any other copies of the application element already stored on computing device 2 but not requiring patching, and the stripped version of application 18 downloaded from application provider server 4 (526). Optionally, downloading of the stripped application and patch is performed on two or more separate streams. In some examples, decompressing the patch, applying the patch, and compressing the patched application element are performed while downloading the stripped version of the application. In some examples, the first application element is decompressed while downloading the patch. These methods may reduce the use of network resources without increasing installation delays compared to downloading the entire application.
[0153] The following numbered examples may illustrate one or more aspects of the present disclosure.
[0154] Example 1: A method, comprising: receiving, by a computing device, user input to install an application that is 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 user input, sending a request to the application provider to install the application; receiving from the application provider an indication of 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 are to be reused during installation of the application, wherein the one or more application elements include a first application element that is to be updated from a current version to a different version required for the application, and wherein the first application element is stored on the computing device in a compressed format; receiving, by the computing device, an indication of 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 are to be reused during installation of the application, wherein the one or more application elements include a first application element that is to be updated from a current version to a different version required for the application, and wherein the first application element is stored on the computing device in a compressed format; downloading, by a provider, 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 installation of the application; decompressing, by the computing device, the first application element to generate a decompressed version of the first application element; decompressing, by the computing device, the patch to generate a decompressed version of the patch; applying, by the computing device, the decompressed version of the patch to the decompressed version of the first application element to generate a patch application element; compressing, by the computing device, 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, by the computing device, 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. A method as described in Example 1, wherein: the application currently not installed on the computing device is an application sub-package for a specific application among the multiple applications already installed on the computing device; the application sub-package is not currently installed on the computing device; the specific application includes multiple application sub-packages; a subset of the multiple application sub-packages is currently installed on the computing device; each application sub-package of the multiple application sub-packages of the specific application can be installed separately and provides a set of discrete functions for the specific application; the stripped version of the application is a stripped version of the application sub-package; and installing the application includes installing the application sub-package on the computing device using the compressed patch application element, the stripped version of the application sub-package, and one or more application elements other than the first application element.
[0156] Example 3. The method of Example 2, wherein receiving an indication of the one or more application elements, downloading the patch and the stripped version of the application sub-package, decompressing the first application element, decompressing the patch, applying the decompressed version of the patch, compressing the patch application element, and installing the application sub-package are performed while executing the specific application on the computing device.
[0157] Example 4. The method of Example 2 or Example 3, wherein: the user input is received while the specific application is executed on the computing device; and the user input to install the application is a user input requesting a previously unused function of the specific application.
[0158] Example 5. The method of Example 4, wherein the execution of the specific application is managed by an application container executed on the computing device, the method further comprising: in response to receiving the user input, determining by the application container whether an installable application sub-package that provides the functionality of the specific application requested by the user input is not installed on the computing device; and in response to determining that the installable application sub-package is not installed on the computing device, generating by the application container a request to install the application sub-package.
[0159] Example 6. The method of any one of Examples 1 to 5, wherein downloading the patch and the stripped version of the application comprises: initiating, by the computing device, downloading the patch to be applied to the first application element; and initiating, by the computing device, downloading the stripped version of the application, the stripped version not including one or more application elements to be reused during installation of the application.
[0160] Example 7. The method as described in any one of Examples 1 to 6 further includes: establishing at least two download streams by the computing device and the application provider, wherein initiating downloading the patch includes using a first download stream from the at least two download streams to initiate downloading the patch, and wherein initiating downloading the stripped version of the application includes using a second download stream from the at least two download streams to initiate downloading the stripped version of the application.
[0161] Example 8. The method of any one of Examples 1 to 7, wherein decompressing the patch, applying the patch, and compressing the patch application element are performed while downloading a stripped version of the application.
[0162] Example 9. The method of any one of Examples 1 to 8, wherein decompressing the first application element is performed while downloading the patch.
[0163] Example 10. The method of any one of Examples 1 to 9, further comprising: creating, by the computing device, a respective copy of each application element from one or more application elements currently stored on the computing device, including the copy of the first application element.
[0164] Example 11. A computing device comprising: one or more processors; a presence-sensitive display that detects user input to install an application that is not currently installed on the computing device; a communication unit; and a computer-readable storage medium that stores a plurality of applications, wherein each of the plurality of applications includes a corresponding plurality of application elements, and stores 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; receive from the application provider via the communication unit an indication of 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 are to be reused during the installation of the application, wherein the one or more application elements include an application element that will be updated from a current version A first application element of a different version newly arrived and required by the application, and wherein the first application element is stored in a compressed format on the computing device; retrieving, via the communication unit, from the application provider a patch to be applied to the first application element and a stripped version of the application that does not include one or more application elements to be reused during 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.
[0165] Example 12. A computing device as described in Example 11, wherein: the application currently not installed on the computing device is an application sub-package for a specific application among the multiple applications already installed on the computing device; the application sub-package is not currently installed on the computing device; the specific application includes multiple application sub-packages; a subset of the multiple application sub-packages is currently installed on the computing device; each of the multiple application sub-packages of the specific application can be installed separately and provides a set of discrete functions for the specific application; the stripped version of the application is a stripped version of the application sub-package; and the instruction to cause one or more processors to install the application includes causing one or more processors to install the application sub-package on the computing device using the compressed patch application element, the stripped version of the application sub-package, 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, the instructions cause one or more processors to receive an indication of the one or more application elements, download the patch and the stripped version of the application sub-package, decompress the first application element, decompress the patch, apply the decompressed version of the patch, compress the patch application element, and install the application sub-package.
[0167] Example 14. The computing device of Example 12 or Example 13, wherein: the user input is received while the specific application is executed on the computing device; and the user input to install the application is a user input requesting a previously unused function of the specific application.
[0168] Example 15. A computing device as described in Example 14, wherein execution of the specific 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: in response to receiving the user input, determine whether an installable application sub-package that provides the functionality of the specific application requested by the user input is not installed on the computing device; and in response to determining that the installable application sub-package is not installed on the computing device, generate a request to install the application sub-package.
[0169] Example 16. A computing device as described in any of Examples 11 to 15, wherein the instructions causing one or more processors to download the patch and the stripped version of the application include instructions causing the one or more processors to initiate downloading of the patch to be applied to the first application element; and instructions to initiate downloading of the stripped version of the application, the stripped version not including one or more application elements to be reused during 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 the one or more processors to establish at least two download streams with the application provider, wherein the instructions causing the one or more processors to initiate downloading of the patch cause the one or more processors to initiate downloading of the patch using a first download stream from the at least two download streams, and wherein the instructions causing the one or more processors to initiate downloading of the stripped version of the application include instructions causing the one or more processors to initiate downloading of the stripped version of the application using a second download stream from the at least two download streams.
[0171] Example 18. The computing device of any of Examples 11 to 17, wherein instructions are executed to cause one or more processors to decompress the patch, apply the patch, and compress the patch application elements while downloading the stripped version of the application.
[0172] Example 19. The computing device of any of Examples 11 to 18, wherein while downloading the patch, instructions are executed to cause one or more processors to decompress the first application element.
[0173] Example 20. The computing device of any of Examples 11 to 19, wherein the instructions further cause the one or more processors to create a respective copy of each application element from one or more application elements currently stored on the computing device, including the 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 indication input by a user to install an application that is 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 indication input by the user, send a request to the application provider to install the application; receive from the application provider an indication of 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 are to be reused during installation of the application, wherein the one or more application elements include a first application element that is to be updated from a current version to a different version required by the application, and wherein the first application element is stored 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 installation of the application 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 functions described may be implemented in hardware, software, firmware, or any combination thereof. If implemented in software, the functions may be stored as one or more instructions or codes on or transmitted through a computer-readable medium and executed by a hardware-based processing unit. Computer-readable media may include computer-readable storage media, which corresponds to tangible media such as data storage media, or communication media, including, for example, any media that facilitates the transfer of a computer program from one place to another according to a communication protocol. In this manner, computer-readable media may generally correspond to (1) tangible computer-readable storage media that is non-transitory or (2) communication media such as signals or carrier waves. Data storage media may be any available media that can be accessed by one or more computers or one or more processors to retrieve instructions, codes, and / or data structures for implementing the techniques described in the present disclosure. A computer program product may include computer-readable media.
[0176] By way of example and not limitation, such computer-readable storage medium may include RAM, ROM, EEPROM, CD-ROM or other optical disk storage, disk storage or other magnetic storage device, flash memory or any other medium that can be used to store the required program code in the form of instructions or data structures and can be accessed by a computer. Moreover, any connection is appropriately referred to as a computer-readable medium. For example, if a coaxial cable, fiber optic cable, twisted pair, digital subscriber line (DSL) or wireless technology (such as infrared, radio and microwave) is used to send instructions from a website, server or other remote source, the definition of the medium includes 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 are directed to non-transient tangible storage media. The disks and optical disks used herein include optical disks (CDs), laser optical disks, optical disks, digital versatile disks (DVDs), floppy disks and blue-ray disks, wherein optical disks usually copy data magnetically, while optical disks copy data by laser optical methods. The above combination should also be included in the scope of computer-readable media.
[0177] Instructions may 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 logic arrays (FPGAs), or other equivalent integrated or discrete logic circuits. Thus, as used herein, the term "processor" may 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 may be provided within dedicated hardware and / or software modules. Likewise, the techniques may be fully implemented in one or more circuits or logic elements.
[0178] The techniques of the present disclosure may be implemented in a variety of devices or apparatuses including a wireless handset, an integrated circuit (IC), or a set of ICs (e.g., a chipset). Various components, modules, or units are described in this disclosure to emphasize functional aspects of an apparatus configured to perform the disclosed techniques, but do not necessarily need to be implemented by different hardware units. Instead, as described above, the various units may be combined in a hardware unit or provided by a collection of one or more processor interoperable hardware units as described above in conjunction with appropriate software and / or firmware.
[0179] Various aspects of the disclosure have been described. These and other aspects are within the scope of the following claims.
Claims
1. A method comprising: receiving, by a computing device from an application provider, an indication of one or more application elements from a corresponding 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 applications, wherein the one or more application elements include a first application element to be updated from a current version to a different version required by the application, and wherein the first application element is stored on the computing device in a 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 application excluding the one or more application elements to be reused during installation of the application; applying, by the computing device, the patch to the first application element to generate a patch application element; and The application is installed on the computing device by the computing device using the patch application element, the stripped version of the application, and the one or more application elements other than the first application element.
2. The method according to claim 1, further comprising: decompressing, by the computing device, the first application element to generate a decompressed version of the first application element; as well as decompressing the patch by the computing device 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 first application element to generate the patch application element.
3. The method according to claim 2, further comprising: compressing, by the computing device, the patch application element to generate a compressed patch application element, the compressed patch application element being the different version of the first application element required by the application, The patch application element used when installing the application on the computing device is the compressed patch application element.
4. The method according to any one of claims 1 to 3, wherein: The application that is not currently installed on the computing device is an application sub-package for a specific application among the plurality of applications that have been installed on the computing device; The application sub-package is not currently installed on the computing device; The specific application includes multiple application sub-packages; a subset of the plurality of application sub-packages is currently installed on the computing device; Each of the plurality of application sub-packages of the specific application is separately installable and provides a discrete set of functions for the specific application; as well as Installing the application includes installing the application sub-package on the computing device using the compressed patch application element, the stripped version of the application sub-package, and the one or more application elements other than the first application element.
5. The method according to claim 4, wherein: Receiving the indication of the one or more application elements, downloading the patch and the stripped versions of the application sub-package, decompressing the first application element, decompressing the patch, applying the decompressed version of the patch, compressing the patch application element, and installing the application sub-package are performed when the particular application is executed on the computing device.
6. The method according to claim 4, further comprising: While executing the particular application on the computing device, user input is received by the computing device to install the application sub-package, wherein the user input requests a previously unused function of the particular application.
7. The method according to claim 6, wherein: Managing execution of the specific application by an application container executed on the computing device, the method further comprising: In response to receiving the user input, determining, by the application container, whether an installable application sub-package that provides the functionality of the specific application requested by the user input is not installed on the computing device; and In response to determining that the installable application sub-package is not installed on the computing device, the request to install the application sub-package is generated by the application container.
8. The method according to any one of claims 1 to 3, wherein: Downloading the patch and the stripped version of the application includes: initiating, by the computing device, downloading the patch to be applied to the first application element; and Downloading of the stripped version of the application is initiated by the computing device, the stripped version excluding the one or more application elements to be reused during installation of the application.
9. The method according to claim 8, further comprising: The computing device establishes at least two download flows with the application provider, wherein initiating downloading of the patch comprises using a first download stream from the at least two download streams to initiate downloading of the patch, and Initiating downloading of the stripped version of the application includes initiating downloading of the stripped version of the application using a second download stream from the at least two download streams.
10. The method according to any one of claims 1 to 3, further comprising: A respective copy of each application element is created, by the computing device, from the one or more application elements currently stored on the computing device, including the copy of the first application element.
11. A computing device comprising means for performing the method according to any one of claims 1 to 10.
12. A computer program product encoded with instructions which, when executed, cause one or more processors of a computing device to perform the method according to any one of claims 1 to 10.
Citation Information
Patent Citations
Intelligent patch pushing method and system applied to complex ERP system
CN105260214A
Application containers with dynamic sub-package loading
CN107015823A
Application updating method and system
CN107179924A
Patch file processing method and device
CN109766114A
Shared software libraries for computing devices
CN109791483A