CN110231941A - 适用于运行移动设备的原生应用程序的无需完全安装的应用程序级运行环境 - Google Patents

适用于运行移动设备的原生应用程序的无需完全安装的应用程序级运行环境 Download PDF

Info

Publication number
CN110231941A
CN110231941A CN201910167654.6A CN201910167654A CN110231941A CN 110231941 A CN110231941 A CN 110231941A CN 201910167654 A CN201910167654 A CN 201910167654A CN 110231941 A CN110231941 A CN 110231941A
Authority
CN
China
Prior art keywords
application program
section
mobile applications
application
program section
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201910167654.6A
Other languages
English (en)
Inventor
胡森
段进伟
周喆吾
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Exhibition Center Mdt Infotech Ltd
Original Assignee
Beijing Exhibition Center Mdt Infotech Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Exhibition Center Mdt Infotech Ltd filed Critical Beijing Exhibition Center Mdt Infotech Ltd
Publication of CN110231941A publication Critical patent/CN110231941A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/61Installation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45537Provision of facilities of other operating environments, e.g. WINE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/451Execution arrangements for user interfaces
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Human Computer Interaction (AREA)
  • Stored Programmes (AREA)

Abstract

本公开描述了用于处理应用程序,在应用程序和操作系统之间进行接口连接,在没有安装的情况下执行应用程序,以及提取应用程序的图形用户界面(GUI)内容以使内容被索引以及可搜索的系统和方法。本公开包括以渐进,无安装,和/或可搜索的方式来执行应用程序的计算机系统。

Description

适用于运行移动设备的原生应用程序的无需完全安装的应用 程序级运行环境
相关申请交叉引用
本申请要求于2018年3月5日提交的Hu等的名为“Application-Level Technologyfor Running Native Mobile Apps in an Indexed and Searchable Manner”的第62/638,379号美国临时申请的优先权;和于2018年3月5日提交的Hu等的名为“Application-Level Technology for Running Native Mobile Apps in an Installation-FreeManner”的第62/638,391号美国临时申请的优先权;以及于2018年3月5日提交的Hu等的名为“Application-Level Technology for Running Native Mobile Apps in aProgressive,Partly Loaded Manner”的第62/638,407号美国临时申请的优先权。上述申请的内容通过引用全部并入本文中。
技术领域
本公开涉及计算机操作系统和软件应用程序,更具体地,涉及用于在没有完全安装的情况下执行移动设备的原生应用程序的技术。
背景技术
万维网用户的生态系统是众所周知的多数用户访问少数热门网站的“长尾化”用户分布。除了少数热门网站之外,访问网站的用户数量大幅减少。相比之下,移动应用程序的生态系统(例如,所开发的在GoogleTM Android和AppleTM iOS上运行的软件)显示出了一个更加极端的“赢家通吃”用户分布。换句话说,多数用户使用几个流行的应用程序,而且很少有用户使用市场上不太流行的应用程序。
绝大多数移动应用程序缺乏用户可能部分归因于下载和安装时间长。要使移动应用程序运行,通常需要完全安装到主机操作系统。完整安装可能涉及验证软件与操作系统的兼容性并将代码,文件和资源复制到移动设备的本地存储。原生软件应用程序通常具有更好的性能,因为它与操作系统完全兼容,并且具有本地存储的代码,文件和资源。
另外,用户可能难以识别所需的应用程序,因为与网页不同,不能使用应用程序内的内容来索引和搜索到应用程序。通常,用户需要依赖应用程序标题名称,屏幕截图和描述应用程序的摘要来识别所需的应用程序。
总而言之,与安装,验证和其他程序相关联的延迟以及寻找合适的移动应用程序的有限的搜索能力导致不良的用户体验,这减少了愿意花时间查找他们需要的应用程序并完成安装过程的用户数量。
附图说明
本发明的一个或多个实施方案以示例的方式示出而不受附图的限制。
图1是一个系统示意图,说明了实现元应用系统的网络系统示例。
图2是一个活动图,说明了执行元应用程序系统的几种功能的示例过程。
图3是一个流程图,说明了识别和获取应用程序的示例过程。
图4是流程图,说明了处理应用程序的示例过程,以允许在启动前不完全安装应用程序即可启动应用程序。
图5是描述应用程序包的几个组件的框图。
图6是一个流程图,说明了生成非循环图的示例过程。
图7是一个系统示意图,说明了用于操作沙箱运行接口应用程序和操作系统的示例系统。
图8是一个流程图,说明了启动和执行应用程序的示例过程。
图9是一个图表,说明了执行应用程序的示例过程。
图10是一个图表,说明了执行应用程序的另一个示例过程。
图11是一个图表,说明了监控应用程序执行情况以记录所访问的应用程序段的示例过程。
图12是一个图表,说明了监控应用程序执行以记录所访问的应用程序段的执行的另一个示例过程。
图13是一个树形图,说明了应用程序的示例和图形用户界面的示例资源。
图14是一个框图,说明了至少可以实现本文所述的某些操作的示例处理系统。
具体实施方案
如上所述,移动应用程序的下载和安装过程消耗时间,数据带宽和数据存储能力。另外,由于缺乏基于应用程序内的内容的基于文本的搜索能力,用户难以识别期望的应用程序。
解决下载和安装问题的一种尝试(attempt)是利用新的软件框架。这些新软件框架的示例包括Google PlayTM Instant,它允许用户在将应用程序完全安装到其设备上之前尝试(try)应用程序。Google PlayTM即时应用程序(或“即时应用程序(InstantApplications)”)尝试(attempt)通过要求开发者遵守一组协议来减少应用程序下载和安装开销,该协议允许即时应用程序在用户设备上运行,而无需下载和安装包含整个即时应用程序的程序包。尽管如此,即时应用程序面临三个缺点:第一,开发者需要在特征级和源代码级别重新组织现有应用程序,这在时间和精力方面可能代价非常高。第二,由于软件结构不兼容,大量遗留应用程序和设备(例如,开发在Android操作系统6.0或更早版本上运行的应用程序)无法利用Google PlayTM Instant。第三,对于没有访问和执行官方GoogleTM服务或GoogleTM框架的应用程序的设备,例如中国超过6亿台基于Android的设备,不支持即时应用程序(Instant Applications)。
开发者可以从头开始构建新应用程序以支持作为Android应用程序组合的一部分的Google PlayTM Instant。但是,应用程序开发者必须从传统的开发框架和流程修改其应用程序的开发。具体而言,开发者需要将其应用程序拆分为各种模块,包括基本特征模块,各种功能模块(various feature modules),可安装模块,和即时模块。通过将应用程序分解为各种模块,可以根据需要安装即时应用程序模块而不是一次安装。例如,可以仅使用基本特征模块启动即时应用程序。当用户访问应用程序内的功能(features)时,将安装相应的功能模块(feature modules)。
解决可访问性和可搜索性问题的一种尝试是移动深度链接。移动深度链接允许网页链接或编程请求调用统一资源标识符(URI)意图(intent)。URI意图使用字符串来标识特定资源,例如移动应用程序中的内容。例如,一旦在操作系统内调用网页URI意图,操作系统就会尝试启动用户指定的或可用的应用程序以处理URI。在一些实施方案中,字符串类似于用于引用特定网站的超链接。除了引用移动应用程序内容之外,字符串还为搜索引擎提供索引的关键字。因此,移动应用程序内容更有可能显示为搜索结果。这是用于搜索引擎优化(SEO)的策略。但是,移动深度链接要求预先完全安装目标应用程序,这导致与下载和安装传统软件应用程序相关联的前述基本问题。
因此,本文公开了一种解决这些挑战的元应用程序系统和方法。特别地,元应用程序系统和方法提供了用于执行没有完全安装的移动应用程序的应用程序级运行环境。另外,元应用程序系统和方法可以被配置为基于应用程序的内容以索引应用程序。在一些实施方案中,使用最小可启动子集(minimum bootable subset)(MBS)启动应用程序。出于在此讨论的目的,MBS是二进制级的应用程序的部分的映射。MBS允许在不下载应用程序的整个二进制代码的情况下启动应用程序。因为MBS使用应用程序的现有二进制代码库,所以元应用程序系统和方法不需要重写,重新编译和/或重新打包现有应用程序。
在使用MBS启动应用程序之后,逐步加载附加模块,因为需要它们执行应用程序的多种功能。一些实施方案提供可选功能以基于每个应用程序的图形用户接口(GUI)内容来索引应用程序。索引内容允许用户通过将用户基于文本的查询与应用程序的实际内容进行匹配来执行对应用程序的搜索并接收相关搜索结果。
使用在此公开的系统和方法,识别和启动新应用程序所需的时间和努力大大减少。通过减少搜索和安装应用程序的矛盾,所公开的实施方案减少了用户测试和运行新应用程序的初始障碍,并增加了用户访问应用程序的可能性。
系统概述
图1是示出了用于实施元应用程序系统的示例网络系统100的系统示意图。网络系统100包括服务器120-122和移动设备130和131。服务器120-122和移动设备130和131中的每一个可以经由通信网络110彼此通信。
通信网络110可以包含任何类型的一个或多个网络,包括分组交换通信网络和/或各种其他类型的电信网络,诸如局域网(LAN),无线局域网(WLAN),蜂窝网络(例如,4G或5G网络),普通老式电话系统(POTS)网络,广域网(WAN)等。在一些实施方案中,通信网络110可以提供对其他网络连接的设备和服务的访问。另外地,或替代地,服务器120-122和移动设备130和131可以经由其他网络或直接连接进行通信。
服务器120-122可以提供元应用程序系统的多种功能。例如,服务器可以被配置为执行以下中的一个或多个:识别所请求的移动应用程序,确定所请求的应用程序是否已经由元应用程序系统处理,将应用程序解耦为应用程序段,模拟应用程序的执行,生成与应用程序相关联的非循环图,存储与应用程序相关联的数据(例如,MBS,应用程序段和非循环图),并传输与应用程序相关联的数据。在一些实施方案中,服务器120-122中的一个或多个可以被配置为虚拟机以执行某些任务,例如模拟移动设备130和/或131的执行。在其他实施方案中,服务器120-122中的一个或多个也可以被配置为解耦器以将应用程序解耦成应用程序段。
移动设备130和131可以提供元应用程序系统的各种功能。特别地,元应用程序系统可以被配置为在移动设备处执行以下中的一个或多个:声明占位符类别(placeholderclasses),启动应用程序,接口应用程序与移动设备的操作系统,加载应用程序段,和/或存储与应用程序相关联的数据(例如,MBS,应用程序段和非循环图)。在一些实施方案中,移动设备130和/或131可以被配置为操作图7中描述的沙盒运行700。在其他实施方案中,移动设备130和/或131可以另外被配置为操作可动态地检测并索引移动应用程序的GUI组件的GUI扫描器。在一些实施方案中,移动设备130和131可以是便携式设备,例如智能电话(例如电话或电话),平板设备(例如平板电脑或平板电脑),笔记本电脑(例如Air)等。
适动图概述
图2是示出了用于执行元应用程序系统的多种功能的方法的示例活动图200。活动图200涉及移动设备201,服务器202,应用程序存储库203和服务器204之间的过程和通信。在一些实施方案中,活动图200是后续附图中描述的几种系统和方法的概述。这样,在活动图200中执行的步骤的一些示例的细节可以在后续附图中找到。
在一些实施方案中,服务器202和204可以提供类似的能力。替代地,服务器202和204可各自提供满足元应用程序系统需求的独特功能。例如,服务器202可以执行准备用于由例如移动设备210之类的其他设备执行的应用程序的操作。这些操作包括识别所请求的应用程序,确定是否处理所识别的应用程序,在必要时获取所识别的应用程序,处理所识别的应用程序,并存储与所处理的应用程序相关的数据。在一些实施方案中,这些操作的细节在图3-6中提供。相比之下,服务器204可以处理应用程序,以便可以基于应用程序的GUI元件的内容来索引和搜索应用程序。在一些实施方案中,这些操作的细节在图11-13中提供。
在步骤210中,服务器202识别并获取用于处理的应用程序。服务器202可以识别用于处理的应用程序。例如,可以基于其流行度,包含在形成的应用程序列表中,用户请求等来识别应用程序。在一些实施方案中,可以根据图3中描述的步骤301来执行步骤210。在步骤211中,服务器202确定在步骤210中识别的应用程序是否先前已由元应用程序系统处理。在一些实施方案中,可以根据图3中描述的步骤302来执行步骤211。如果之前没有处理过应用程序,则服务器202可以获取所识别的应用程序以在步骤212中进行处理。例如,在步骤212a中,服务器202可以向应用程序存储库203发送对所识别的应用程序的请求。在步骤212b中,服务器202可以从应用程序存储库203接收所识别的应用程序。在一些实施方案中,可以根据图3中描述的步骤303来执行步骤212。
在步骤213中,在已经获取所识别的应用程序之后,服务器202可以处理该应用程序以供元应用程序系统执行。在一些实施方案中,处理应用程序可以包括以下中的一个或多个:模拟应用程序的执行,解耦应用程序的二进制代码库,生成应用程序的非循环图,以及存储与应用程序相关联的数据(例如,MBS,应用程序段,非循环图等)。在一些实施方案中,步骤213可以由元应用程序系统的解耦器和/或虚拟机执行。另外地,步骤213可以与图4-6中描述的细节一致的方式执行。
在步骤214中,服务器202可以将与所处理的应用程序相关联的应用程序数据传输到移动设备201。如上所提及的,应用程序数据可以包括MBS,应用程序段,非循环图等。在一些实施方案中,应用程序一旦被处理就可以传输与应用程序相关联的数据。替代地,当移动设备201请求访问应用程序时,可以存储数据(例如,在服务器202和/或204)并将其传输到移动设备201。在一些实施方案中,应用程序数据可以在一次传输中从服务器202传输到移动设备201。替代地,可以使用多个传输在部分中传输应用程序数据。
在一个示例中,可以最初传输MBS使得即使其他应用程序段尚未传输,也可以立即启动应用程序。然后,在一个或多个传输中逐步传输多个应用程序段。当应用程序在移动设备201上被执行时,传输可以实时地发生。替代地,或另外地,当基于将访问哪些应用程序段的预测来预取应用程序段时,传输可以发生。另外地,可以将非循环图传输到移动设备201。非循环图可以用于跟踪应用程序的状态(例如,正被访问的当前应用程序段)以预测将被访问的下一个应用程序。
在步骤215中,移动设备201启动并执行该应用程序。该步骤可以包括以下中的一个或多个:声明占位符类别,启动应用程序,应用程序和操作系统之间的接口,加载应用程序段以及存储应用程序数据。在一些实施方案中,步骤215可以由元应用程序系统的运行引擎(例如,图7的沙盒运行700)执行。另外地,步骤215可以与图7-9中描述的细节一致的方式执行。
可选地,在步骤216中,移动设备201扫描其执行的应用程序以索引GUI组件。在一些示例中,步骤216可以由本文描述的移动设备201上的GUI扫描器执行。替代地,或另外地,步骤216可以由服务器202和/或204执行。在一些实施方案中,步骤216可以与图11-13中描述的细节一致的方式执行。
在步骤217中,移动设备201可以将与所索引的GUI组件相关联的数据传输到服务器202和/或204以在步骤218中进一步处理。例如,在步骤218中,可以解析,索引和权衡GUI组件。这些步骤有助于用户搜索应用程序的更好的方法。可以与图11-13中描述的细节一致的方式执行步骤217。
识别和获取应用程序
图3是示出了用于识别和获取由元应用程序系统处理和执行的应用程序的过程300的流程图。在一些实施方案中,图3中的步骤可以由元应用程序系统中的服务器(例如,服务器120-122,202和/或204)执行。
在步骤301中,元应用程序系统识别元应用程序系统将处理的应用程序。可以基于其流行度,包含在形成的应用程序列表中,用户请求等来识别应用程序。例如,元应用程序系统可以识别在GoogleTM Play商店或AppleTM App商店上前100个下载最多的列表中列出的应用程序。替代地,元应用程序系统可以响应于来自移动设备的对应用程序的请求来识别应用程序。例如,用户可以请求从移动设备(例如移动设备130,131和/或201)上的沙盒运行访问应用程序。作为响应,沙盒运行可以向元应用程序系统,例如服务器120,121,122,202和/或204发送请求以访问所请求的应用程序。服务器可以立即处理应用程序或将应用程序添加到其将处理的应用程序列表中。
在步骤302中,元应用程序系统确定是否已经处理了所识别的应用程序。在一些实施方案中,元应用程序系统可以将与所处理的应用程序(例如,MBS,应用程序段,非循环图等)相关联的信息存储在存储库中。例如,存储库可以在服务器120,121,122,202和/或204上实施。元应用程序系统然后可以确定所识别的应用是否存储在存储库中。如果应用程序存储在存储库中,那么所识别的应用程序已经进行处理,并且元应用程序系统不需要获取应用程序进行处理。相反,元应用程序系统可以提供与所请求的应用程序相对应的已经可用的应用程序数据。如果应用程序未存储在存储库中,那么应用程序尚未被处理,并且元应用程序系统进行到步骤303。在其他实施方案中,元应用程序系统维护表示哪些应用程序已被处理的列表,索引等。元应用程序系统可以检查列表或索引以确定所识别的应用程序是否已被处理。
在步骤303中,元应用程序系统从应用程序存储库获取所识别的应用程序。在一些实施方案中,应用程序存储库可以是例如Google PlayTM应用程序商店或AppleTM应用程序商店之类的应用程序的公开市场。但是,应用程序存储库可以是任何应用程序的集合,例如公众或私人可访问的数据库。元应用程序系统可以向应用程序存储库发送查询。替代地,元应用程序服务器可以在因特网,其他公众可访问的网络或私人可访问的网络上执行搜索以获取所识别的应用。
处理应用程序
图4是示出了用于处理应用程序以允许在没有完全安装应用程序的情况下启动应用程序的示例过程400的流程图。在一些实施方案中,步骤401-404可以由在服务器120,121,122,202和/或204处操作的解耦器和/或虚拟机执行。另外地,可以将在步骤401-404中处理或生成的数据传输至步骤405中的移动设备(例如,移动设备130,131,201等)。
解耦应用程序
最初,应用程序是经编译的编程代码和用于执行应用程序的数据的集合。数据集合被聚集到应用程序数据包中以进行分布。例如,GoogleTM Android的应用程序分布在Android数据包文件(APK)中。在一些实施方案中,应用程序包由例如以下资源组织:源代码,文档,配置,可执行文件和包含在分布数据包中的二进制库。
在步骤401中,元应用程序系统将应用程序数据包解耦为二进制级的多个应用程序段。换句话说,每个应用程序段对应于应用程序数据包的二进制代码库的一部分或段。在一个示例中,每个应用程序段对应于与应用程序相关联的应用程序数据包的一部分,例如:经编译的代码,要链接的二进制文件,数据源,清单文件,图形资源等。在一些实施方案中,可以收集应用程序段的部分集合以形成MBS。如上所述,MBS是允许在不下载应用程序的整个二进制代码的情况下启动应用程序的应用程序的一部分。在一些示例中,步骤401可以由元应用程序系统解耦器执行。在一些实施方案中,可以为每个经解耦的应用程序段分配值以标识该段。在一些示例中,可以通过执行图6中描述的步骤601来生成被分配的值。
模拟应用程序
在步骤402中,元应用程序系统可以被配置为模拟应用程序的执行。在一个实施方案中,在对应用程序的二进制代码库进行解耦后,虚拟机模拟应用程序的执行。虚拟机可以利用实际用户在移动设备上使用的相同应用程序二进制接口(ABI)和操作系统以确保准确的模拟。在一些实施方案中,虚拟机在模拟期间监控连接外部数据存储和内部存储器的内部数据总线,以记录在模拟期间被访问的应用程序段。可以使用各种工具(例如QEMU虚拟机、网络嗅探器工具或仪表化文件系统驱动器)执行模拟。在一个示例中,网络磁盘被安装到QEMU虚拟机上,网络嗅探器工具(例如WireShark)被配置为监控在虚拟机和网络磁盘之间传送的原始数据。在另一个实施方案中,挂接的glibc库(hooked glibc library)可以与QEMU虚拟机相关联。
生成非循环图
在步骤403中,元应用程序系统生成表示在模拟期间被访问的应用程序段的顺序的非循环图。在一些实施方案中,当应用程序由元应用程序系统上的虚拟机执行时,可以执行非循环图的生成。例如,非循环图可以由远离移动设备的服务器120-122,202和/或204生成。与移动设备相比,服务器可以提供更大的处理能力(processing power)和数据存储能力,以执行模拟并生成非循环图。替代地,非循环图可以由移动设备处的沙盒运行生成。例如,当用户在沙盒运行上执行移动应用程序时可以实时地生成非循环图,或者可以使用来自实时执行的数据以更新非循环图。在该实施方案中,不需要模拟应用程序(例如,步骤402)。
可以通过执行以下行动中的一个或多个来完成非循环图的生成:映射应用程序访问的多种应用程序段,监视移动应用程序的执行以确定访问哪些应用程序段被访问,确定访问应用程序段的顺序,当一个应用程序段被访问时在非循环图中生成条目,并将匹配的应用程序段记录为非循环图中的下一个条目。在一些实施方案中,可以根据图6中描述的步骤来执行步骤403。
存储应用程序数据
在步骤404中,元应用程序系统可以存储应用程序数据,该应用程序数据包括MBS,应用程序段,非循环图,关于哪些应用程序段将被访问的预测,以及与该应用程序相关联的其他数据。在一些实施方案中,MBS和应用程序段可供移动设备130,131和/或201使用,以便它们可以易于传输到希望启动和执行应用程序的移动设备。在一些实施方案中,存储所预测的数据以确定哪些应用程序段应由服务器提供为可用或预先传输(preemptivelytransmitted)或由移动设备预取。当进行下一个应用程序段的预测时,可以将应用程序段预先传输到移动设备。
传输MBS和应用程序段
在步骤405中,元应用程序系统可以传输步骤401-404中处理或生成的各种应用数据。例如,服务器120,121,122,202和/或204可以将各种应用程序数据传输到移动设备130,131,201等。在一些实施方案中,各种应用数据包括MBS,应用程序段,非循环图,应用程序资产和资源(assets and resources)。应用程序资产和资源是便于使用应用程序的数据。例如,资产和资源可以是图形,音频文件,图形用户元素,数据集等。服务器可以基于将被访问的应用程序段的预测或者响应于来自资产或资源的应用程序的请求而预先地传输资产和资源。
在一个示例中,元应用程序系统可以首先将MBS传输到移动设备。可以在用户请求启动应用程序之前或者响应于用户启动应用程序的请求而预先传输MBS。然后元应用程序系统可以可选地传输各种应用程序段。另外地,元应用程序系统可以与MBS和/或应用程序段一起传输其他应用程序数据。本领域普通技术人员将认识到,可以使用不同的顺序传输各种应用数据或者同时传输各种应用数据。
应用程序数据包的示例
图5是描绘用于在元应用程序系统中分布应用程序的示例APK的方框图。在一些实施方案中,段可以表示为数据包文件中的文件夹。
APK可以包括应用程序的中央应用程序段501。中央应用程序段501可以包括资产,库文件502,资源(res),META-Inf 503,清单(manifest.xml)504,classes.dex和resources.arsc。库文件502也可以包含对应于不同处理器结构的数据,例如ARM EABI,ARMEABI-v7a,x86,MIPS等。类似地,META-inf 503文件夹可以包含各种签名503。清单(Manifest.xml)文件504可以提供清单数据,包括与应用程序相关联的名称,版本,访问权限和引用库。Classes.dex可以包含dalvik/ART字节码505,其包含依赖于系统的类别(system-dependent classes)506和与独立于系统的类别(system-independent classes)507。
在一些实施方案中,APK可以解耦为多个应用程序段。应用程序段可以对应于中央应用程序段501的多个部分。例如,一个特定应用程序段可以对应于清单(manifest.xml)文件。清单包括应用程序的名称,权限,版本,访问权限和引用库。此信息对于启动应用程序是重要的,因此与清单文件对应的应用程序段可能是应用程序的MBS的一部分。
在另一示例中,一个特定应用程序段可以对应于中央应用程序段501的资产部分。通常异步加载资产(即,在不同时间加载几种资产)。由于在启动时可能不需要资产,因此与资产相对应的应用程序段可能不是应用程序的MBS的一部分。在又一示例中,一个特定应用程序段可以对应于中央应用程序段501的资源(“res”)部分。资源部分包括用于前端的结构(即,与用户交互的应用程序的部分)。通常同步加载资源(即,同时加载几种资源)。由于在启动时可能需要资产,因此与资源部分相对应的应用程序段可能不是应用程序的MBS的一部分。
在一些实施方案中,应用程序二进制代码库的解耦包括将classes.dex提取到依赖于系统的类别和与独立于系统的类别中。依赖于系统的类别包括继承的Android框架类别,例如图10所述的活动(Activity),服务(Service)或广播接收器(BroadcastReceiver)。独立于系统的类别包括用户定义的类别和第三方库类别。
生成非循环图的示例
图6是示出了用于生成非循环图的示例过程600的流程图。在一些实施方案中,非循环图可以代表应用程序段的依赖性的顺序列表。具体而言,顺序列表代表在执行应用程序期间被访问的应用程序段的顺序。顺序列表可以记录被访问的应用程序段的实际顺序,或者它可以代表可能被访问的应用程序段的顺序的预测。在一些实施方案中,非循环图中的初始条目包含最初启动应用程序必不可少的一个或多个应用程序段,可以将其标识为MBS。
在一些实施方案中,非循环图中的每个节点可以代表应用程序段,并且每个边缘是有向边(directed edge),其代表在执行应用程序期间从一个应用程序段的访问到下一个应用程序段的访问的转换。通过具有非循环图,没有图形圈(graph circles),因此存在明显的开始和结束节点路径(即,被访问的第一应用程序段和被访问的最后一个应用程序段是显而易见的)。
通过生成非循环图,元应用程序系统可以预测在执行应用程序期间可能被访问的应用程序段。例如,元应用程序系统可以查看正被访问的当前应用程序段并找到非循环图中的下一个节点以确定将被访问的下一个应用程序段。基于预测,元应用程序系统可以从远程位置预取被预测的应用程序段。当被执行的应用程序需要被预取的应用程序段时,该段已经被下载并可供使用。通过立即可用,可以消除或减轻由于没有在本地下载整个二进制代码库(例如,通过执行完全安装)而导致的任何延迟。性能可能与在启动应用程序之前下载整个二进制代码库的实施相同或至少类似。
在一个说明性示例中,在应用程序的执行期间被访问的应用程序段的顺序可以表示应用程序段A-D在执行期间被访问。记录显示在执行期间首先访问段A。在一些实施方案中,段A可以是MBS。该记录还显示,在段A被访问之后,80%的情况段B被访问,10%的情况段C被访问,10%的情况段D被访问。因此,元应用程序系统可以预测应用程序很可能在段A之后访问段B。因此,元应用程序系统可以在段A被访问之后预取段B。通过使段B被预取并可用,元应用程序系统可以避免在请求之后必须检索段时可能导致的任何延迟。当段被远程存储时尤其如此。在段B被下载之后,元应用系统可以通过预取段C和段D来继续。在一些实施方案中,因为预测段C和段D具有接下来被访问的相等概率,所以可以同时获取它们。替代地,可以按任何顺序依次获取它们。
返回过程600,元应用程序系统在步骤601中通过在监视步骤期间映射由应用程序访问的多种应用程序段来生成应用程序段表。在一些实施方案中,元应用程序系统可以索引,列出或以其他方式识别应用程序的所有应用程序段。
例如,元应用程序系统然后可以接着在每个应用程序段上执行散列函数(例如,MD5散列)以生成标识应用程序段的散列值。替代地,元应用程序系统可以使用坐标对数据(coordinate pair data)来映射应用程序段。例如,该值可以是用于标识应用程序包的二进制代码库内的应用程序段的位置的X-Y坐标对。X值可以代表从二进制代码库开始的偏移量。例如,X值为零代表二进制代码库的开头。X值为128表示应用程序段从二进制代码库的开头算128个字节为起始。Y值代表二进制段的长度。例如,Y值248表示长度为248字节的应用程序段。因此,(128,248)的X-Y值代表从二进制代码库的开头算128字节为起始并且从二进制代码库的开头算以376字节为结束的应用程序段。
在步骤602中,元应用程序系统监视应用程序的执行以确定哪些应用程序段被访问以及被访问的应用程序段的顺序。在一些实施方案中,元应用程序系统的虚拟机可以在模拟期间在用户访问应用程序之前监视应用程序的执行。替代地,或另外地,元应用程序系统可以在用户使用沙盒运行访问应用程序时实时地监视应用程序的执行。在一些实施方案中,监视元应用程序系统的数据总线以确定二进制代码库的哪个部分被访问。在一些实施方案中,虚拟机检查将原始数据从数据存储(例如,由执行移动应用程序的处理器访问的本地存储器)加载到处理器的内部寄存器的指令。
在步骤603中,元应用程序系统将被访问的应用程序段与应用程序段表上的应用程序段进行匹配。在一些实施方案中,在监视步骤602期间被访问的应用程序段被映射到在步骤601中生成的应用程序段表中的条目。例如,元应用程序系统可以对正被访问的应用程序段进行散列并将得到的散列值映射到存储在应用程序段表中的条目。替代地,元应用程序系统可以确定正被访问的应用程序段的X-Y值,并将该值映射到存储在应用程序段表上的条目。通过映射正在被访问的应用程序段,虚拟机可以记录哪些应用程序段。
在步骤604中,当在步骤603中检测到匹配时,元应用程序系统在非循环图中生成节点。例如,元应用程序系统可以将匹配到的应用程序段标记或标志为在应用程序段上“被访问”。另外地,可以分配或生成数据以表示应用程序段与被访问的其他应用程序段的时间顺序关系。例如,表示序列性的顺序的时间戳或值可以与应用程序段表的应用程序段条目一起存储。
在一些实施方案中,所有应用程序段的二进制代码库已被标记为加载了至少一次,元应用程序系统停止记录被访问的应用程序段。替代地,元应用程序系统可以连续地记录通过执行多个模拟而被访问的应用程序段。通过连续地记录在模拟期间被访问的组件的顺序,元应用程序系统可以更新和改进对何时访问应用程序段的预测。另外地,或替代地,元应用程序系统还可以记录当用户实时地执行和使用应用程序时,被访问的应用程序段的顺序。具体而言,当沙盒运行为用户执行应用程序时,访问应用程序段的顺序是基于用户访问的应用程序的特点或部分。通过记录实际用户访问应用程序段的顺序,可以更新和改进顺序列表。
沙盒运行
图7是示出了用于操作沙盒运行以启动应用程序以及接口主机操作系统与移动应用程序的示例系统700的系统图。示例系统700包含沙盒运行701,应用程序702和操作系统703。在应用程序702中,应用程序704和705通过直接与操作系统703接口而不用沙盒运行701来执行。相反,应用程序706-709通过与用作操作系统703的接口的沙盒运行701进行接口来执行。
操作系统703包括应用程序框架710和库和内核730。应用程序框架710包括被定义为向应用程序提供高级服务的Java类。应用程序框架710可以包括Android管理器服务(AMS)711,PMS 712,WindowManager 713和714,内容提供商715,查看系统716,资源管理器717和各种框架组件718。在一个示例中,AMS 711是Java类,与如图9所述的活动和服务进行交互。
库和内核730包括用于提供对多种服务和数据资源的访问的库。库和内核730可以包括媒体框架731,SQLite 732,OpenGL|ES 733,系统内核(OS Kernel)734和Android运行(Android Runtime 750)。在一个示例中,SQLite 732包括便于数据库管理的java类。在另一个例子中,OpenGL|ES 733提供了便于图形渲染的java类。更详细地,系统内核734包括硬件驱动器735,Binder驱动器736和各种内核组件737。系统运行(OS runtime)750包括CoreLib 751和Dalvik/ART VM 752。
通过用作应用程序706-709的接口,沙盒运行701可以促进对操作系统703提供的资源的访问特权。在一些实施方案中,操作系统703不知道应用程序706-709已被执行。因此,应用程序706-709可能不具有对操作系统703提供的资源的直接访问特权。但是,沙盒运行701可以为应用程序706-709提供访问特权。例如,沙盒运行701可以向应用程序706-709提供对由操作系统703的Linux内核控制的硬件资源(例如,移动设备的摄像头系统和网络接口)的访问特权。另外地,沙盒运行701可以经由操作系统703内容提供商715类比提供对用户数据(例如,用户联系人,登录凭证等)的特权访问。
另外地,沙盒运行701可以通过将对用户的访问特权请求合并到用户敏感资源来改善元应用程序系统的用户体验。例如,在没有沙盒运行701的情况下,每个应用程序704和705可以单独地请求用户对例如用户的联系人列表,用户的位置信息等的用户敏感资源的访问特权。相反,沙盒运行701可以最初从用户请求对用户敏感资源的访问特权。通过从用户获取访问特权,沙盒运行701可以向应用程序706-709提供对那些资源的访问特权。例如,沙盒运行701可以请求对用户的联系人列表的访问特权。一旦用户授予对联系人列表的访问特权,沙盒运行701就可以控制哪些应用程序706-709可以访问该资源。例如,沙盒运行701可以具体地为例如应用程序706和707之类的特定应用程序提供访问特权。本领域普通技术人员将认识到可以利用其他访问特权方案。例如,某些类型的应用程序(例如,通信和社交应用程序)可以接收对用户的联系人列表的访问特权。还可以基于应用程序的发布者(例如,GoogleTM发布的应用程序),在沙盒运行701上启动应用程序的日期,应用程序是否在白名单上,应用程序是否不在黑名单上等来确定访问特权。另外地,某些应用程序可能具有某些资源的访问特权,但对其他资源没有访问特权。
图8是示出使用元应用程序系统来执行应用程序的示例过程800的流程图。在一些实施方案中,该过程可由沙盒运行701执行。如上所述,沙盒运行701用作应用程序706-709和操作系统703之间的接口。在一些实施方案中,沙盒运行701本身是安装在操作系统703上以便进行操作的应用程序。一旦沙盒运行701已被安装在操作系统703上,则在沙盒运行上执行的应用程序(例如,应用程序706-709)不需要完整安装。
从概念上讲,操作系统703不知晓在沙盒运行701上运行的应用程序706-709。相似地,在沙盒运行701上运行的应用程序706-709也不知晓在沙盒运行701而不是底层操作系统703上运行。应用程序706-709和操作系统703之间的所有交互都通过沙盒运行701进行代理(proxied)。例如,沙盒运行701管理应用程序706-709和操作系统703之间的编程调用(programmatic calls)。
在步骤801中,沙盒运行701声明占位符类,该占位符类稍后被用于对操作系统703进行调用以请求应用程序706-709所需的实际类。在一些实施方案中,操作系统703要求预先注册应用程序所需的所有系统-定义(system-defined)的类。当应用程序被安装在操作系统上时,可通过清单(manifest)文件进行声明。因此,为了满足操作系统的注册要求,沙盒运行701最初可向操作系统703提供动态清单文件,该动态清单文件记录占位符系统-定义的程序类。具体来说,沙盒运行的清单文件声明占位符系统-定义的类(例如,活动,服务,内容提供器,广播接收器,以及意图类),这些类稍后将被由执行的应用程序请求的实际系统-定义类所替代。占位符系统-定义的类包括从如下所述的意图调用中获取信息的功能。
在步骤802中,沙盒运行701在没有完全安装的情况下启动应用程序706-709中的一个或多个。为实现此目的,沙盒运行701通过加载MBS而不是应用程序包的整个二进制代码库来执行应用程序706-709中的一个或多个。在一些实施方案中,在如上所述并且尤其是在图4中的解耦过程期间确定MBS。
在步骤803中,沙盒运行701通过从远离执行操作系统703的移动设备的位置获取应用程序段来用作应用程序706-709和操作系统703之间的接口。通过获取用于应用程序706-709的应用程序段,沙盒运行701允许应用程序访问作为本地资源的远程存储的应用程序段。
在不利用沙盒运行701的一个示例中,未修改的意图调用从应用程序704被传输(transmitted)至操作系统703。当应用程序想要提供特定功能时,它生成指向主机操作系统的意图调用,并将其进行传输。意图调用包含表示应用程序704所需的类的参数。操作系统703解析所接收的意图调用,分析意图调用的多种参数,并启动意图调用所表示的活动。
在利用沙盒运行701的对比示例中,应用程序706生成旨在用于操作系统703的意图调用,并将其进行传输。该意图调用被沙盒运行701拦截,而不是到达操作系统703。然后,沙盒运行701解析该意图调用以确定由该意图调用的目标字段所表示的活动或类。然后,沙盒运行701发起先前声明(例如,由沙盒运行701的清单文件声明)的空闲(即,未占用)占位符活动。发起的占位符活动又被传输到操作系统703以启动由该意图调用所表示的活动。
例如,应用程序706可能想要发起“视频回放活动(VideoPlaybackActivity)”活动类。应用程序706通过生成具有指定“视频回放活动”目标字段的意图调用,并将该意图调用传输到操作系统701来请求“视频回放活动”类。沙盒运行701的代理系统处理器(handler)拦截该意图调用,并从目标字段中提取信息。由于应用程序706未被完全安装在主机操作系统上(即,它没有向操作系统703提供声明所请求的类的清单文件),因此由应用程序706请求的“视频回放活动”类未被注册也不可用。然而,如上所述,沙盒运行701先前使用由操作系统703解析的其自己的清单文件来声明占位符类。沙盒运行701用占位符活动来替代意图调用的目标字段,并将活动名称以及相关信息保存在占位符活动的自定义字段中。然后,将修改的占位符活动传递给操作系统703。在接收到修改的占位符活动之后,操作系统703调用与所请求的类相对应的生命周期(lifecycle)函数。以这种方式,启动“视频回放活动”活动以促进使用沙盒运行占位符类的应用程序706的操作。GoogleTM Android应用程序中的其他类以及活动也可由它们在沙盒运行701中的占位符对应方(counterpart)代理并相应地启动。
在步骤804中,沙盒运行701获得并加载一个或多个应用程序段以支持应用程序706-709的操作。在一些实施方案中,应用程序段对应于所请求的本地资源,并且可以从远程服务器(例如,服务器120,121,122,202,和/或204)下载。例如,沙盒运行701基于用户与所执行的应用程序的交互来加载应用程序段。在另一个示例中,沙盒运行基于来自应用程序的用于本地资源(例如,编译的代码,要链接的二进制文件(binaries),数据源,清单文件,图形资源等)的请求来加载应用程序段。在又一示例中,基于将要根据与所执行的应用程序相关联的非循环图进行访问的应用程序段的预测来预取资源。换句话说,应用程序段在应用程序请求它们之前被沙盒运行701获得。如上所述,该预测可基于表示应用程序段的顺序列表的非循环图。
在步骤805中,沙盒运行701可存储包括MBS,应用程序段,非循环图,以及与应用程序相关联的其他数据的应用程序数据。在一些实施方案中,每次启动应用程序时,执行该应用程序的事件(instance)直到该事件终止。沙盒运行701可为应用程序的每个事件维持一组应用程序数据。用于每个应用程序事件的应用程序数据可包括状态机(state machine),该状态机表示应用程序的事件已经访问了哪些应用程序段。状态机可基于应用程序的非循环图。由于非循环图会记住哪个应用程序段正在被访问,因此它可以预测随后将要访问哪个应用程序段。
在一些实施方案中,每个状态机沿着与应用程序对应的非循环图跟踪事件的进度。当应用程序事件首次启动时,应用程序的非循环图的副本在初始状态(例如,与访问MBS以启动的应用程序事件相对应的初始状态)进行初始化。当事件在操作期间访问后续应用程序段时,沙盒运行701更新状态机,使得当前状态表示应用程序事件已访问了后一个应用程序段。
在另一示例中,当启动应用程序的第二事件(在相同设备或不同设备处)时,发起基于应用程序的非循环图的第二状态机。也就是说,第二应用程序事件的当前状态是应用程序段A的初始状态。以与第一状态机相似的方式,第二状态机基于第二应用程序事件访问哪个应用程序段而向前行进。
沙盒运行功能
图9是示出通过使用本文所述的一系列函数调用以在应用程序和操作系统之间进行交互的过程900的示意图。例如,过程900可由图7的沙盒运行701来执行。另外,AMS 920可以是被托管(hosted)在如图7中所描述的操作系统703上的AMS 711的示例。
在过程900的开始,通过从应用程序接收对类或活动的请求,在应用程序和操作系统之间接口。具体地,使用调用处理器(InvocationHandler)和Java代理类来代理两个安卓(Android)框架函数调用(即,起始活动函数(startActivity())902和处理启动活动函数(handleLaunchActivity())914)。起始活动函数(StartActivity())902由需要特定类或活动的应用程序进行调用。它包含指定所请求的类或活动的意图,并作为参数而被传递给与操作系统相关联的AMS 920。处理启动活动函数(HandleLaunchActivity())914提取所请求的意图并重建所请求的类或活动。
响应于起始活动函数(startActivity())902调用,AMS 920回应被传递给活动线程(ActivityThread)910的安排启动活动函数(scheduleLaunchActivity())913的新活动923。另外,活动线程(ActivityThread)910利用AMS 920的IApplicationThread代理对象922来启用附接函数(attach())912。AMS 920又创建了一个新过程921,该过程被传递给接合子(zygote)930的forkAndSpecialize函数(forkAndSpecialize())931。接合子(zygote)930然后调用叉路函数(fork())以启用过程状态连接器(ProcessState Binder)916。
通过这组函数调用,过程900便于用于应用程序的接口从操作系统请求类或活动。过程900允许应用程序访问类或活动,即使它们之前未通过安装过程进行声明。
图10是示出类或活动开始过程1000的示例的另一示意图。例如,沙盒运行1011可以是沙盒运行701的示例,并且AMS 1020可以是如图7中所描述的被托管在操作系统703上的AMS 711的示例。
这里,活动线程(ActivityThread)1010使用起始活动函数(startActivity())调用来请求类或活动。在一些实施方案中,起始活动函数(startActivity())将所请求的活动表示为由请求应用程序提供的参数(例如,自定义成员变量)。沙盒运行1011检查起始活动函数(startActivity())调用并确定所请求的类或活动是意图空白活动(BlankActivity)1001。然后,沙盒运行1011在其自己的占位符活动存储库中查找并选择未使用的占位符活动(即,意图空白存根活动(blankStubActivity)1002),以包含(wrap)空白活动1001。在一些实施方案中,意图空白存根活动1002之前已被注册,以符合多种AMS 1020检验,这些检验要求在操作系统中注册活动和类。然后将包含在意图空白存根活动1002中的空白活动1001被发送到AMS 1020。
如上所述,使用占位符意图(即,新的意图空白存根活动(IntentBlankStubActivity)1002)将所请求的意图(即,意图空白活动(intent BlankActivity)1001)传递到AMS 1020。处理启动活动(handleLaunchActivity())函数接收占位符意图(使用新的意图空白存根活动(Intent BlankStubActivity)1002),提取所请求的意图,并重建所请求的活动(即,(intent BlankActivity)意图空白活动1001)。此时,未在沙盒运行清单中预先注册的应用程序的活动,以其原生格式(native form)成功启动。所请求的活动又被提供给应用程序1012,该应用程序1012可使用所请求的活动以在沙盒运行1011内继续操作。虽然应用程序1012可在相同的沙盒运行1011内操作,但在一些实施方案中,应用程序1012可在不同于活动线程(ActivityThread)1010的不同线程或过程上使用所请求的活动。
使用过程1000,可以启动多种系统-定义的类以便于应用程序的操作。这些类包括活动类,服务类,内容提供器类,以及广播接收器类。活动类被用于运行便于用户交互功能(例如,点击按钮或播放视频)的用户-交互式代码。为了防止用户交互功能暂停,如果代码缓慢或无响应,则活动类不会等待。相反,系统将终止无响应的活动。这可能表现为应用程序无响应(ANR)错误。服务类被用于执行不直接显示给用户的代码(例如,后台过程)。例如,服务类可以执行用于在后台播放音乐的代码。内容提供器类促进应用程序之间信息的共享。例如,电话应用程序可与电子邮件应用程序共享用户的联系人列表。广播接收器类被用于监控系统事件,例如全球定位系统(GPS)位置数据的接收。在该示例中,应用程序可使用广播接收器类来监控何时接收到GPS位置。
监测应用程序的执行
图11是示出用于监控应用程序的执行以便记录被访问的应用程序段的示例过程1100的示意图。具体地,过程1100描绘了从屏幕1101转换到1104的GUI。在一些实施方案中,当GUI从一个屏幕转换到另一屏幕时,元应用程序系统可以记录访问GUI组件(例如,按钮,内容项,视频剪辑等)的顺序。
应用程序的执行可在包含图标,搜索文本输入以及按钮1的初始应用程序屏幕1101处开始。在按下按钮1之后,执行搜索查询,并且图形用户界面转换到屏幕1102。屏幕1102填有若干内容项,视频剪辑,按钮2以及一些广告。按下内容项将打开如屏幕1103所示的网络视图(webview)。相似地,按下视频剪辑将打开浮动在布局上的回放窗口,如屏幕1104所示。这里,元应用程序系统可在应用程序的执行期间注意到,按以下顺序访问多个GUI组件:图标,搜索文本框,按钮1,内容项1-2,视频剪辑,按钮2,广告,网络视图,回放活动/视图等。
图12示出了描绘在应用程序的执行期间进行访问的应用程序段以及资源的顺序的示例图1200。在一个示例中,过程1200可表示在如图11中所述的应用程序的执行期间被访问的组件以及资源。首先,初始屏幕(例如,图11的屏幕1101)可包含一些应用程序段或资源,例如:元素1-图标资源,元素2-图标,元素3-应用程序,元素4-搜索输入样式(styles),元素5-按钮资源,元素6-按钮,元素7-基础活动/视图等。这些应用程序段和资源按它们被访问的顺序进行记录,并表示所访问的第一段以及组件。随着应用程序继续执行(例如,继续执行图11的屏幕1102,1103等),记录后续应用程序段以及资源。
虽然记录了所访问的应用程序段的顺序,但是可对多个段进行分类以用于解析,索引,和加权。例如,GUI和视图组件(例如,元素2-图标,元素6-按钮等)由白色框来表示。资源和资产(元素1-图标资源,元素4-搜索输入样式,元素5-按钮资源等)由深灰色框来表示。另外,其他应用程序数据,例如应用程序代码和库(例如,元素3-应用程序,元素8-网络库等)由浅灰色框来表示。
在一些实施方案中,可以给予某些类别更大的权重以促进准确的搜索功能。例如,GUI和视图组件可被赋予更大的权重,因为用户可基于和用户界面组件相关的关键字来搜索应用程序。相反,应用程序代码和库可被赋予较小的权重,因为应用程序代码可能采用用户不熟悉并因此与搜索术语无关的复杂术语以及编程语言术语。本领域普通技术人员将认识到,可以分配其他权重方案以优化搜索功能。
扫描应用程序和索引GUI组件
当在沙盒运行上执行应用程序时,GUI扫描器可被用于在执行应用程序时动态地检测应用程序的GUI组件。
对于GoogleTM Android应用程序,GUI元素类依赖于Android框架中的视图(View)类。此外,Android WindowManager被用于查看并提取每个新视图事件的扩大布局(inflated layout)。因此,可以监控Android WindowManager以确定何时创建新的视图类事件(即,对应于GUI元素的新事件)。创建新的GUI元素时,可对其进行索引并为其分配权重,以便于搜索每个元素。
图13示出了被包含在应用程序屏幕(例如,图11的屏幕1101)中的应用程序段以及资源的示例树视图1300。该树视图可被用于索引应用程序屏幕的GUI元素。在一些实施方案中,布局描述文件(例如,描述GUI布局的XML文件)被用于向Android WindowManager表示每个视图元素相对于屏幕边界的绝对和/或相对坐标。可以解析布局描述文件以识别GUI组件。在一些实施方案中,来自布局描述文件的解析数据可被组织成树。
例如,树1300在表示整个应用程序的根1301处开始。该根导向基本视图1302,该基本视图1302对应于应用程序的初始屏幕或视图。基本视图1302又导向屏幕的多,个元素(即,图标,搜索文本,按钮1,以及布局)。相似地,布局节点1303导向布局的多个元素(即,内容项1,内容项2,内容项3,广告,视频剪辑,以及按钮2)。所得的树视图1300便于更容易地索引和搜索多个GUI元素。
在一些实施方案中,GUI扫描器可以确定多个GUI元素的重要性。例如,GUI扫描器可以确定使用粗体字体和/或位于屏幕的顶部中心的短语的重要性较高。因此,GUI扫描器可将较高的权重分配给这些元素。相反,GUI扫描器可以确定驻留在屏幕的角落和/或小的灰色字体中的其他短语的重要性较低。因此,GUI扫描器可将较低的权重分配给这些元素。
另外,在一些实施方案中,GUI扫描由沙盒运行来执行,而解析,索引以及加权则在远程服务器上执行。例如,GUI扫描可由图7的沙盒运行700来执行,而解析,索引以及加权则在服务器120,121,122,202,和/或204上执行。可以存储索引和加权的GUI组件,并且可以访问它们以执行搜索。例如,用户搜索查询可与多个加权的GUI元素相匹配,以找到最相关的应用程序。
处理系统
图14是示出处理系统1400的示例的框图,在该处理系统1400中可以实现本文所述的至少一些操作。例如,处理系统1400的一些组件可在控制器设备中实现。
处理系统1400可包括一个或多个中央处理单元(“处理器”)1402,主存储器1406,非易失性存储器1410,网络适配器1412(例如,网络接口),视频显示器1418,输入/输出设备1420,控制设备1422(例如,键盘和指点设备),包含有存储介质1426的驱动单元1424,以及通信地连接到总线1416的信号发生设备1430。总线1416被示为一个抽象概念,其表示通过适当的桥接器,适配器,或控制器进行连接的一个或多个物理总线和/或点对点(point-to-point)连接。因此,总线1416可包括系统总线,外围组件互连(PCI)总线或PCI-Express总线,HyperTransport或工业标准架构(ISA)总线,小型计算机系统接口(SCSI)总线,通用串行总线(USB),IIC(I2C)总线,或电气和电子工程师协会(IEEE)标准1394总线(也被称为“火线”)。
处理系统1400可以共享与台式计算机,平板计算机,个人数字助理(PDA),移动电话,游戏控制台,音乐播放器,可穿戴电子设备(例如,手表或健身追踪器),网络连接的(“智能”)设备(例如,电视或家庭辅助设备),虚拟/增强的现实系统(例如,头戴式显示器),或能够执行(顺序地或其他方式)指定由处理系统1400要采取的动作的一组指令的其他电子设备相类似的计算机处理器架构。
虽然主存储器1406,非易失性存储器1410,以及存储介质1426(也被称为“机器可读介质”)被示出为单个介质,但术语“机器可读介质”和“存储介质”应当被理解为包括存储有一组或多组指令1428的单个介质或多个介质(例如,集中式/分布式数据库和/或相关联的高速缓存以及服务器)。术语“机器可读介质”和“存储介质”还应当被理解为包括能够存储,编码,或承载一组供处理系统1400执行的指令的任何介质。
通常,为实现本公开的实施方案而执行的例程可被实现为操作系统或特定应用程序,组件,程序,对象,模块,或指令序列的一部分(被统称为“计算机程序”)。该计算机程序通常包括在计算设备中的多个存储器以及存储设备中多次设置的一个或多个指令(例如,指令1404,1408,1428)。当由一个或多个处理器1402读取并执行时,该指令使得处理系统1400执行操作以执行涉及本公开的多个方面的元素。
此外,虽然已在完全运行的计算设备的情境中描述了实施方案,但是本领域技术人员将理解,多种实施方案能够以多种形式被分布为程序产品。无论被用于实际影响该分布的特定类型的机器或计算机可读介质如何,本公开都适用。
机器可读存储介质,机器可读介质,或计算机可读介质的其他示例包括可记录类型的介质,例如易失性和非易失性存储器设备1410,软盘和其他可移动磁盘,硬盘驱动器,光盘(例如,光盘只读存储器(CD-ROM),数字多功能磁盘(DVD)),以及诸如数字和模拟通信链路的传输类型介质。
网络适配器1412使处理系统1400可通过由处理系统1400和外部实体所支持的任何通信协议来调解具有实体的网络1414中的数据,该实体在处理系统1400的外部。网络适配器1412可包括网络适配卡,无线网络接口卡,路由器,接入点,无线路由器,交换机,多层交换机,协议转换器,网关,桥接器,桥接器路由器,集线器,数字媒体接收器,和/或转发器。
网络适配器1412可包括防火墙,该防火墙管控和/或管理对计算机网络中的访问/代理数据的许可,并跟踪不同机器和/或应用程序之间的不同信任级别。防火墙可以是任何数量的模块,该模块具有硬件和/或软件组件的任意组合,其能够在特定的一组机器和应用程序,机器和机器,和/或应用程序和应用程序之间强制执行一组预定的访问权限(例如,以规范这些实体之间的流量和资源共享)。防火墙还可以对访问控制列表进行管理和/或访问,该访问控制列表详述了包括以下内容的权限:由个人,机器,和/或应用程序对对象进行访问和操作的权利,以及权限权利所处的环境。
出于说明和描述的目的已提供了所要求保护的主题的多种实施方案的前述描述。其并非旨在穷举或将所要求保护的主题限制为所公开的精确形式。许多修改和变化对于本领域技术人员来说是显而易见的。选择和描述实施方案是为了最好地描述特定特征及其实际应用,从而使相关领域的技术人员能够理解所要求保护的主题,多种实施方案,以及适于所预期的特定用途的多种修改。
尽管具体实施例描述了某些实施方案以及所预期的最佳模式,但无论具体实施例有多么详细,该技术都能以多种方式来实施。实施方案的实现细节可能有很大不同,但仍被包含在本说明书中。在描述多种实施方案的某些特征或方面时所使用的特定术语不应当被理解为暗示在本文中重新定义该术语,以被限制于和该术语相关联的技术的任何特定特性,特征,或方面。通常,以下权利要求中所使用的术语不应当被解释为将本技术限制于本说明书中所公开的特定实施方案,除非这些术语在本文中进行了明确定义。因此,本技术的实际范围不仅包括所公开的实施方案,还包括实践或实施这些实施方案的所有等同的方式。
本说明书中所用语言的选择主要是出于可读性和指导目的。而不是被选来限定或限制主题。因此,其旨在使本技术的范围不受该具体实施例的限制,而是受基于本文的申请所获准的任意权利要求的限制。因此,多种实施方案的公开旨在是说明而非限制如所附权利要求中所阐述的技术的范围。

Claims (24)

1.一种系统,包括:
段解耦器,被配置为通过将移动应用程序的二进制代码库划分为应用程序段来解耦移动应用,其中应用程序段的部分集合形成用于启动移动应用程序的最小可启动子集(MBS):
虚拟机,被配置为模拟移动应用程序的操作并生成表示在模拟期间被访问的应用程序段的顺序的非循环图;以及
移动应用程序库,被配置为存储MBS,应用程序段和非循环图,其中移动应用程序库提供对MBS和应用程序段的访问以执行移动应用程序。
2.如权利要求1所述的系统,其中每个应用程序段对应于用于促进所述移动应用程序的执行的一个或多个应用程序资源,并且被组合在用于分发所述移动应用程序的包中,其中所述一个或多个移动应用程序资源包括以下一个或多个:源代码,文档,配置文件,可执行文件和二进制库。
3.如权利要求2所述的系统,其中所述应用程序段是所述移动应用程序的二进制代码库的二进制级映射,并且每个应用程序段对应于一个或多个应用程序资源。
4.如权利要求1所述的系统,其中所述应用程序段的非循环图是依赖于应用程序段的顺序列表,所述顺序列表用于预测和预取系统期望用户访问的应用程序段。
5.如权利要求4所述的系统,其中所述虚拟机在所有应用程序段被加载至少一次之后停止记录所需的应用程序段的顺序。
6.一种用于提供随需应变的移动应用程序的方法,该方法包括:
通过将移动应用程序的二进制代码库划分为应用程序段,将移动应用程序解耦为应用程序段,其中应用程序段的部分集合形成最小可启动子集(MBS),其允许沙盒运行启动移动应用程序而不需要完整安装过程;
模拟移动应用程序的操作;
生成表示在模拟期间访问的应用程序段顺序的非循环图;以及
存储MBS,应用程序段和非循环图,其中MBS和应用程序段可被用于执行移动应用程序。
7.如权利要求6所述的方法,还包括:在解耦移动应用之前:
基于对移动应用程序的用户请求或由移动应用程序库提供的列表来识别移动应用程序;
确定所识别的移动应用程序是否已被处理;以及
如果尚未处理移动应用程序,则从应用程序库获取所识别的移动应用程序。
8.如权利要求6所述的方法,其中生成非循环图包括:
通过在监视步骤期间映射移动应用程序访问的多个应用程序段来创建应用程序段表;
监视移动应用程序的执行以确定哪些应用程序段被访问以及访问应用程序段的顺序;
当访问的应用程序段与应用程序段表中映射的应用程序段匹配时,在非循环图中生成条目;以及
将匹配的应用程序段记录为非循环图中的下一个条目。
9.一种具有一个或多个处理器的系统,用于执行移动应用程序,该系统包括:
沙盒运行配置为:
通过加载最小可启动子集(MBS)来执行移动应用程序,MBS是应用程序段的部分集合,并且通过分段移动应用程序的二进制代码库形成应用程序段;
接口移动应用程序和主机操作系统,以便移动应用程序访问远程存储的应用程序段作为本地资源;以及
基于来自移动应用程序的资源请求从远程服务器获得应用程序段;和
配置为从应用程序段索引图形用户界面(GUI)段的图形用户界面扫描器。
10.如权利要求9所述的系统,其中所述沙盒运行下载与由所述资源请求表示的所请求资源相对应的一个或多个应用程序段。
11.如权利要求10所述的系统,其中所述资源请求是来自所述移动应用程序对本地资源的请求,并且通过从远程服务器下载所述应用程序段来将与所请求的本地资源相对应的应用程序段提供给所述沙盒运行。
12.如权利要求11所述的系统,其中基于根据所述非循环图将要访问的所述应用程序段的预测来预取所接收的资源。
13.如权利要求9所述的系统,其中所述沙盒运行生成声明占位符系统定义的程序类的动态清单。
14.如权利要求13所述的系统,其中所述沙盒运行拦截来自移动应用程序的意图调用,并将所声明的占位符类替换为所述意图调用所表示并且所述移动应用程序所需的实际类。
15.如权利要求14所述的系统,其中所述实际类可以是以下中的一个或多个:活动类,服务类,内容提供者类,和广播接收器类。
16.如权利要求9所述的系统,其中所述沙盒运行是安装在移动设备的主机操作系统上的本机移动应用程序的一部分。
17.如权利要求9所述的系统,其中GUI扫描器被配置为通过以下方式索引GUI段:
监视沙盒运行加载的每个应用程序段;
确定加载的应用程序段是否为GUI段;以及
提取被确定为GUI段的应用程序段的内容;以及
索引GUI段的内容以使系统能够使用索引的GUI段来将移动应用程序与用户搜索查询相匹配。
18.一种使用应用程序段的部分集合执行随需应变移动应用程序的方法,该方法包括:
通过加载最小可启动子集(MBS)来执行移动应用程序,MBS是通过解耦移动应用程序而获得应用程序段的部分集合,其中通过分段移动应用程序的二进制代码库来生成应用程序段;
接口移动应用程序和主机操作系统,以便移动应用程序访问远程存储的应用程序段作为本地资源;以及
基于用户与执行的移动应用程序的交互来加载应用程序段。
19.如权利要求18所述的方法,还包括:
索引应用程序段的图形用户界面(GUI)段,方法是:
监视沙盒运行加载的应用程序段;
确定加载的应用程序段是否为GUI段;
提取GUI段的内容;以及
索引GUI段的内容。
20.如权利要求18所述的方法,还包括:
记录在移动应用程序执行期间访问的应用程序段的顺序;以及
基于记录的段的顺序生成段的非循环图。
21.如权利要求20所述的方法,其中生成非循环图包括:
通过在监视步骤期间映射移动应用程序访问的多个应用程序段来创建应用程序段表;
监视移动应用程序的执行以确定哪些应用程序段被访问以及访问应用程序段的顺序;
当访问的应用程序段与应用程序段表中映射的应用程序段匹配时,在非循环图中生成条目;以及
将匹配的应用程序段记录为非循环图中的下一个条目。
22.如权利要求21所述的方法,其中,在所有段被沙盒运行加载至少一次之后,记录段的顺序才完成。
23.一种用于提供随需应变移动应用程序的系统,该系统包括:
段解耦器,被配置为将移动应用程序解耦为应用程序段,其中应用程序段的部分集合形成最小可启动子集(MBS);
虚拟机,被配置为通过模拟移动应用程序的操作并记录在模拟期间访问的应用程序段的顺序来生成应用程序段的非循环图;
沙盒运行配置为通过加载MBS启动移动应用程序而不进行安装,并通过基于应用程序段依赖性的顺序列表加载应用程序段来继续执行移动应用程序;以及
GUI扫描器,配置为监视沙盒运行加载的应用程序段,确定加载的应用程序段是否为GUI段,提取GUI段的内容,并索引GUI段的内容。
24.如权利要求23所述的系统,其中所述沙盒运行初始加载所述MBS,并基于用户与所述移动应用程序的交互来加载其他应用程序段。
CN201910167654.6A 2018-03-05 2019-03-05 适用于运行移动设备的原生应用程序的无需完全安装的应用程序级运行环境 Pending CN110231941A (zh)

Applications Claiming Priority (6)

Application Number Priority Date Filing Date Title
US201862638407P 2018-03-05 2018-03-05
US201862638379P 2018-03-05 2018-03-05
US201862638391P 2018-03-05 2018-03-05
US62/638,391 2018-03-05
US62/638,407 2018-03-05
US62/638,379 2018-03-05

Publications (1)

Publication Number Publication Date
CN110231941A true CN110231941A (zh) 2019-09-13

Family

ID=67768631

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910167654.6A Pending CN110231941A (zh) 2018-03-05 2019-03-05 适用于运行移动设备的原生应用程序的无需完全安装的应用程序级运行环境

Country Status (2)

Country Link
US (2) US11237843B2 (zh)
CN (1) CN110231941A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114721747A (zh) * 2022-06-09 2022-07-08 北京搜狐新动力信息技术有限公司 一种应用程序启动方法及装置、存储介质及电子设备

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113316158B (zh) * 2020-02-27 2023-03-24 华为技术有限公司 一种部署应用实例的方法、装置及可读存储介质
US20220075877A1 (en) 2020-09-09 2022-03-10 Self Financial, Inc. Interface and system for updating isolated repositories
US11641665B2 (en) 2020-09-09 2023-05-02 Self Financial, Inc. Resource utilization retrieval and modification
US11470037B2 (en) * 2020-09-09 2022-10-11 Self Financial, Inc. Navigation pathway generation
CN113885870B (zh) * 2021-08-27 2022-09-20 荣耀终端有限公司 应用程序更新方法、电子设备、终端设备及系统

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20010034736A1 (en) * 1998-07-22 2001-10-25 Dan Eylon Method and system for executing network streamed application
US20040006637A1 (en) * 2002-04-25 2004-01-08 Pramote Kuacharoen Methods and systems for transmitting application software
US20040237082A1 (en) * 2003-05-22 2004-11-25 Alcazar Mark A. System, method, and API for progressively installing software application
US20050177635A1 (en) * 2003-12-18 2005-08-11 Roland Schmidt System and method for allocating server resources
US20080300851A1 (en) * 2007-06-04 2008-12-04 Infosys Technologies Ltd. System and method for application migration in a grid computing environment
US20100306270A1 (en) * 2009-05-26 2010-12-02 Microsoft Corporation Generating a local copy of a virtualized application package from a local installation
US20110107243A1 (en) * 2009-11-05 2011-05-05 International Business Machines Corporation Searching Existing User Interfaces to Enable Design, Development and Provisioning of User Interfaces
US20170262263A1 (en) * 2016-03-11 2017-09-14 Schneider Electric Industries Sas Process and system for the generation of an operating program in the form of a mobile application that is capable of operating on a mobile device

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9043782B2 (en) * 2010-12-28 2015-05-26 Microsoft Technology Licensing, Llc Predictive software streaming
US9806933B2 (en) * 2013-03-13 2017-10-31 Microsoft Technology Licensing, Llc Component loading based on user interactions
US9880925B1 (en) * 2015-09-28 2018-01-30 The Mathworks, Inc. Collecting structured program code output
US10169853B2 (en) * 2016-12-20 2019-01-01 Entit Software Llc Score weights for user interface (UI) elements
US10268458B1 (en) * 2017-10-23 2019-04-23 International Business Mahcines Corporation Prospective voice user interface modality identification

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20010034736A1 (en) * 1998-07-22 2001-10-25 Dan Eylon Method and system for executing network streamed application
US20040006637A1 (en) * 2002-04-25 2004-01-08 Pramote Kuacharoen Methods and systems for transmitting application software
US20040237082A1 (en) * 2003-05-22 2004-11-25 Alcazar Mark A. System, method, and API for progressively installing software application
US20050177635A1 (en) * 2003-12-18 2005-08-11 Roland Schmidt System and method for allocating server resources
US20080300851A1 (en) * 2007-06-04 2008-12-04 Infosys Technologies Ltd. System and method for application migration in a grid computing environment
US20100306270A1 (en) * 2009-05-26 2010-12-02 Microsoft Corporation Generating a local copy of a virtualized application package from a local installation
US20110107243A1 (en) * 2009-11-05 2011-05-05 International Business Machines Corporation Searching Existing User Interfaces to Enable Design, Development and Provisioning of User Interfaces
US20170262263A1 (en) * 2016-03-11 2017-09-14 Schneider Electric Industries Sas Process and system for the generation of an operating program in the form of a mobile application that is capable of operating on a mobile device

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114721747A (zh) * 2022-06-09 2022-07-08 北京搜狐新动力信息技术有限公司 一种应用程序启动方法及装置、存储介质及电子设备

Also Published As

Publication number Publication date
US20220129279A1 (en) 2022-04-28
US20190272178A1 (en) 2019-09-05
US11625253B2 (en) 2023-04-11
US11237843B2 (en) 2022-02-01

Similar Documents

Publication Publication Date Title
CN110231941A (zh) 适用于运行移动设备的原生应用程序的无需完全安装的应用程序级运行环境
US11915016B2 (en) System and method for identifying, indexing, and navigating to deep states of mobile applications
US10248401B1 (en) Multiplatform and multichannel distribution of web applications across devices
US11138518B1 (en) Right for me deployment and customization of applications with customized widgets
US8584114B2 (en) Method of generating and distributing a computer application
US9811327B2 (en) Dependency-aware transformation of multi-function applications for on-demand execution
US9363310B2 (en) Standard commands for native commands
US20140358887A1 (en) Application content search management
US9952848B2 (en) Dependency-aware transformation of multi-function applications for on-demand execution
US20120124062A1 (en) Application Transfer Protocol
CN111901294A (zh) 一种构建在线机器学习项目的方法及机器学习系统
US10901804B2 (en) Apparatus and method to select services for executing a user program based on a code pattern included therein
US11422785B2 (en) Container orchestration framework
EP3005099A1 (en) Context-based actions from a source application
US11314497B2 (en) Deployment and customization of applications at the widget level
CN110365724B (zh) 任务处理方法、装置及电子设备
US20140358909A1 (en) Search result contexts for application launch
WO2022127743A1 (zh) 内容显示方法及终端设备
US20230027902A1 (en) Creating Product Orchestration Engines
CN111813816B (zh) 数据处理方法、装置、计算机可读存储介质和计算机设备
US10853470B2 (en) Configuration of applications to desired application states
US20220300574A1 (en) Caching for Single Page Web Applications
US10755321B1 (en) Techniques for dynamic utilization of advertising capabilities by applications on user devices
US8898125B2 (en) Method and apparatus for awarding trophies
KR20220124889A (ko) 스타트업을 위한 투자단계별 투자기관 매칭 방법 및 장치

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination