CN108008941A - 一种安卓应用的深链接口自动生成方法及深链执行方法 - Google Patents
一种安卓应用的深链接口自动生成方法及深链执行方法 Download PDFInfo
- Publication number
- CN108008941A CN108008941A CN201711134577.1A CN201711134577A CN108008941A CN 108008941 A CN108008941 A CN 108008941A CN 201711134577 A CN201711134577 A CN 201711134577A CN 108008941 A CN108008941 A CN 108008941A
- Authority
- CN
- China
- Prior art keywords
- activity
- fragment
- target
- deep
- chain
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/958—Organisation or management of web site content, e.g. publishing, maintaining pages or automatic linking
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种安卓应用的深链接口自动生成方法及深链执行方法。本发明的深链接口生成方法为:对于目标安卓应用程序的代码中每一设定Activity,获取到达该Activity的Intent序列;针对该目标安卓应用程序的代码中每一选定的目标Activity,生成从该选定的Activity的入口到达其内部设定Fragment的操作序列;根据所述Intent序列和所述操作序列构成该目标安卓应用程序中各设定位置的深链模板,即得到各设定位置对应的深链接口。本发明能自动地为安卓应用生成深链,节省开发者的工作量,可以极大提高现有安卓应用的深链数量,促进深链的应用。
Description
技术领域
本发明涉及一种为安卓应用自动生成深链接口的方法及深链执行方法,属于软件技术领域。
背景技术
安卓应用是用Java语言开发的、运行在安卓操作***上的应用软件。一个安卓应用通常由多个Activity构成,每个Activity提供一个用户与应用进行交互的页面,用户在Activity中使用该安卓应用的各个功能,如打电话、看电影、读新闻、查地图等。一个Activity可以包含多个Fragment,每个Fragment显示一部分用户界面。如果将一个安卓应用比作一个Web网站,那么一个Activity的实例页面就可以类比为一个Web网页,而Fragment则可以类别为Web网页中的Frame。
安卓应用与Web网站的一个显著区别在于:在Web网站中,每个Web网页都有一个全局唯一的URL,通过URL可以在浏览器中直接打开其对应的Web网页。与之相比,安卓应用中的每个Activity实例页面只有一个内部地址,要进入安卓应用中的一个页面,用户必须首先打开该应用,然后经过一系列页面跳转才能够到达目标页面。以“大众点评”应用为例,假设用户在其中浏览过一家餐厅的页面,当该用户下一次想要访问该餐厅页面时,他必须打开大众点评,搜索之前浏览过的餐厅,然后才能最终进入餐厅页面。这一系列繁琐操作的根本原因在于安卓应用的内部页面缺少像网页URL一样的全局唯一地址,以及缺少通过这个地址直接打开对应页面的机制。
深链(Deep Link)提供了一种基于URI(统一资源标识符)从应用外部直接访问应用内部一个特定页面的机制。Google、Facebook、微软、百度等国内外互联网公司都在大力推广深链,希望应用开发者能够在应用中提供更多的深链,以满足搜索和分享的需要。然而,深链目前在安卓应用中并没有被广泛支持。通过分析2万个来自豌豆荚应用商店的热门安卓应用,发现其中73%的应用并没有提供任何深链,18%的应用只提供了一种深链(即只能跳转到应用中的一类页面)。
深链没有被广泛支持的原因在于为安卓应用开发深链需要大量的手工工作。在原理上,深链可以通过安卓的应用间通信机制Intent来实现。Intent分为两类:(1)显示Intent,给出目标Activity的名字,当Intent被执行时,目标Activity被调起打开;(2)隐式Intent,给出一些筛选条件,包括action、category、data等,当Intent被执行时,符合筛选条件的Activity被调起打开。在构造Intent时,参数和其他需要传递的信息可以放在Intent的extra域中。当Activity P发送一个Intent I的时候,安卓***将会找到能够处理这个Intent的目标Activity Q,随后加载Q,以此来实现从P到Q的切换。深链一般采用隐式Intent来实现,开发者需要对每一个要支持深链的Activity重构其代码实现处理对应隐式Intent的逻辑,这项工作往往耗时且容易出错。因此,提供一种深链的自动化生成工具具有重要的意义和现实需求。
发明内容
针对现有技术中存在的技术问题,本发明的目的在于提供一种安卓应用的深链接口自动生成方法及深链执行方法。
本发明采用静态程序分析与动态程序分析结合的方法,在开发者最低程度的参与下,自动为安卓应用生成深链接口。具体流程为:给定安卓应用程序的代码(安装包APK或源代码),首先通过静态分析获得到达每个Activity(专有名词,为Android里面的类)的Intent序列,记录如何从应用的入口Activity通过发送Intent到达每一个Activity的最短路径;进而,针对每个选定的目标Activity,通过动态分析获得如何从一个特定Activity的入口到达Activity内部特定Fragment的操作序列。Intent序列和操作序列构成应用中一个设定位置的深链模板(即对应位置的深链接口),例如,对于Activity m和其中的Fragmentf,到达m的Intent序列构成m的深链模板,而到达m的Intent序列和从m的入口到达f的操作序列构成f的深链模板。当开发者指定需要生成深链的Activity及其内部Fragment之后,其对应的深链模板(根据Activity和Fragment的名字即可找到对应的深链模板)和深链执行引擎会自动生成深链,并与原应用代码打包在一起成为一个新的安卓应用程序安装包。当一个深链被请求时,深链执行引擎会被启动,通过深链请求中的URI来对相应模板的参数进行实例化,然后执行引擎会依次执行模版中的Intent跳转到目标Activity,最后通过执行模版中的操作序列控制Activity跳转到指定Fragment,从而打开目标页面。
本发明的技术方案为:
一种安卓应用的深链接口自动生成方法,其步骤包括:
1)对于目标安卓应用程序的代码中每一设定Activity,获取到达该Activity的Intent序列;
2)针对该目标安卓应用程序的代码中每一选定的目标Activity,生成从该选定的Activity的入口到达其内部设定Fragment的操作序列;
3)根据所述Intent序列和所述操作序列构成该目标安卓应用程序中各设定位置的深链模板,即得到各设定位置对应的深链接口。
进一步的,获取到达该Activity的Intent序列的方法为:首先构造该目标安卓应用程序的Activity导航关系图;然后根据该Activity导航关系图,获取从应用入口Activity到达该Activity的路径,然后选取最短路径所对应的Intent序列,作为从应用入口Activity到达该Activity的Intent序列。
进一步的,生成所述操作序列的方法为:为所述目标Activity中的每一Fragment生成一标识;生成所述目标Activity的Fragment切换图FTG<P,D,p>;其中,P代表一个顶点集合,Activity中每一Fragment的标识对应一顶点;D是有向边的集合,每一条边是一个三元组e<s,t,i>,s代表源Fragment,t为目标Fragment,i代表引发切换的控件的标识id;p是起始点,即Activity刚打开时的主页面;然后根据所述目标Activity的Fragment切换图,将从起始点到目标Fragment的边串联起来,得到所述目标Activity的Fragment的操作序列。
进一步的,为所述目标Activity中的每一Fragment生成一标识的方法为:获取安卓***为该目标安卓应用程序在运行时构造的控件树;计算该控件树的哈希值,然后用该哈希值来标识当前的Fragment。
进一步的,计算所述控件树的哈希值的方法为:对于该控件树中的一个节点q,如果节点q在控件树中没有子节点,则结果为节点q对应控件的标签字符串哈希;如果节点q有子节点,则递归计算出节点q所有子节点的哈希;然后根据节点q的子节点的哈希值对节点q的子节点排序来保证哈希结构的一致性,再将每个子节点的哈希值与控件的标签加起来形成一个新的字符串,最终将该新的字符串的哈希值作为节点q的哈希。
进一步的,获得所述Fragment切换图的方法为:首先点击当前Fragment的每个控件来检查Activity是否改变,如果Activity改变,则调用***函数doback()直接返回前一个状态,返回之后继续遍历;如果Activity改变,则检查当前Fragment的状态,如果当前Fragment的标识与之前的不同,且当前Fragment是一个新的Fragment,则其加入Fragment切换图中,并且记录边的信息为发生切换的控件;如果没有发生Fragment切换则继续遍历;在完成遍历搜索后,得到所述Fragment切换图以及所有Fragment的列表。
一种基于上述深链接口的深链执行方法,其特征在于,代理Activity根据深链请求查找对应的深链模板并对其实例化,构造一个可跳转到该深链请求对应目标位置的脚本;然后根据脚本,回放引擎控制安卓应用在Activity之间切换,并在控件上进行操作,达到目标位置;所述深链请求中包含深链对应深链模板中的参数所需要的赋值。
本发明的方法流程如图1所示,其具体步骤包括:
1.针对目标安卓应用程序,生成到达所有Activity的Intent序列。
1)构造目标安卓应用程序的Activity导航关系图,描述Activity之间的跳转关系。一个Activity导航关系图G为一个有向图,用一个四元组G<V,E,r,L>表示,其中V是顶点集,代表一个应用中的所有Activity;E是有向边集,每一条有向边e(v1,v2)代表两个Activity v1到v2的跳转;r代表应用的入口Activity,假定从起始点r可以到达V中的任意顶点;L是有向边的标记集合,每一条有向边的标记为对应Intent序列的所有参数。Activity导航关系图中的两个点之间可能有多条边,表明两个Activity之间的跳转可能不止一条路径。
2)捷径分析。在建立Activity导航关系图后,可以分析从应用入口Activity到达每一个Activity的路径。一条到达Activity的路径P是一个从入口Activity开始的有序Activity跳转序列,{t1,t2,…,tk},k代表路径的长度。在一条路径中,t1代表打开入口Activity的Intent,路径P可以确保所有的内部依赖在到达Activity之前都已经被初始化。到达一个Activity的路径可能有多条,为了以最快的方式到达目标Activity,应选取最短路径所对应的Intent序列。
2.针对开发者指定的Activity,生成到达其中Fragment的操作序列。
1)为指定的Activity生成其中Fragment的标识。与Activity有唯一标识名不同,Fragment没有明确的标识。为了确保在操作后切换到了指定的Fragment,利用安卓提供的控件树来确定某一个Fragment。在安卓***中,所有控件被组织成一棵树,即控件树。在运行时获取控件树(每当***运行不同的Fragment时,对应不同的控件树,即控件树是变化的),通过递归算法来计算这棵控件树的哈希值,然后用该哈希值来标识每一个Fragment。递归算法的具体流程为:对于控件树中的一个控件q,如果q在控件树中没有子节点,则结果仅为q对应控件的标签(tag)字符串哈希。如果q有子节点,该算法则递归计算出q所有子节点的哈希。然后,根据子节点的哈希值对q的子节点排序来保证哈希结构的一致性(因为一个控件的子节点并非每次都保持同样的顺序),再将每个子节点的哈希值与控件的tag拼接,形成一个新的字符串,最终将该字符串的哈希值作为q的哈希。当将一个控件树的根节点对应的控件作为该算法的输入,可以得到该控件树的哈希结构,哈希值即可用作Fragment的标识。
2)对开发者选定的Activity生成Fragment切换图。为了获得一个Activity的所有Fragment以及到达每个Fragment的操作流,定义Fragment切换图来表示Fragment在一个Activity中的切换,由三元组FTG<P,D,p>表示。P代表一个Activity中所有的Fragment,组成图的所有顶点,由哈希值来唯一标记。D是图中的所有有向边的集合,每一条边是一个三元组e<s,t,i>,s和t分别代表源和目标Fragment,i代表引发切换的控件view的标识id。p是起始点,即Activity刚打开时的主页面。为了获得Fragment切换图,工具采用深度优先搜索的方式遍历整个Activity。首先,尝试点击当前Fragment的每个控件view来检查Activity是否改变,如果Activity改变,调用***函数doback()直接返回前一个状态,返回之后继续遍历。否则,检查Fragment的状态。如果当前Fragment的标识与之前的不同,则表明Fragment发生了切换。因此,如果它是一个新的Fragment就将其加入图中,并且记录边的信息为发生切换的控件view;如果没有发生Fragment切换则继续遍历。动态分析的过程其实类似于遍历每个网页的Web爬虫,只不过安卓仅仅提供doback()函数来返回到之前的Activity,而不是返回到Fragment。所以在Fragment切换后需要通过重启应用来追踪到之前的Fragment。在完成搜索后,可以得到Fragment切换图以及所有Fragment的列表。为了获取到达某一个Fragment的操作序列,只需要将从起始点到目标Fragment的边串联起来即可。
3.将深链添加到安卓应用程序中。
在计算出Activity的最短导航路径以及Fragment的操作序列后,即可生成支持深链的目标安卓应用程序安装文件。由于开发者可能只希望在应用的部分位置支持深链。因此,工具允许开发者只在需要的Activity或Fragment处添加深链。
当开发者选出待支持深链的Activity集合后,本发明会为每个选中的Activity生成一个抽象的URI。URI会遵循“scheme://host/path”的格式以便在安卓***中被识别。为了确定具体的位置,将“http://host/target?parameter#fragment”作为抽象URI的格式,其中采用与应用包名的逆序串作为host域,用Activity的类名作为target域,“?”后是参数部分。对于链接到Fragment的深链,目标Fragment的名字在“#”后面。
附图2描述了目标apk的结构和产生。本发明采用代理架构实现对原应用的最小修改。代理Activity来处理所有请求。代理Activity被配置为遵从URI的Intent filter。当一个Intent传到代理Activity时,如果Intent与其中一个URI格式相匹配,代理Activity将会操控回放引擎重复既定的操作来执行深链。如果不能与其中任何一个URI格式相匹配,则将会直接交给原来的源码处理。
4.在运行时通过重复之前的操作来执行深链的跳转
当深链被请求时,请求信息中会包含深链对应模板中的参数所需要的赋值,进而可将深链模版进行实例化,从而构造一个可跳转到特定位置的脚本。根据脚本,回放引擎与原来的应用软件代码通信,控制应用软件在Activity之间切换,并在控件上进行操作。如,当深链http://anki.ichi2.com/NoteEditor?CALLER=3#tags被请求时,它表明用户希望到达Anki应用中的NoteEditor Activity的tags Fragment。所以回放引擎首先模板中的参数CALLER赋值为3,然后发送对应的Intent序列到达NoteEditor Activity,接着在能够到达tags Fragment的对应控件上模拟点击,最后用户便可以到达目标位置。
与现有技术相比,本发明的积极效果为:
本方案借助发明工具可以自动地为安卓应用生成深链,节省开发者的工作量,可以极大提高现有安卓应用的深链数量,促进深链的应用。
附图说明
图1为本发明的方法流程图。
图2为支持深链的目标APK结构。
具体实施方式
下面结合附图对本发明进行进一步详细描述。
开发者可以选择被分析应用的源码。然后工具的静态分析会找出所有Activity以及相关的Activity最短导航路径。当一个Activity被选中,Activity最短导航路径信息会在界面中呈现。如果要为Activity中的Fragment生成深链,则工具允许开发者启动模拟器,然后在模拟器中进行操作,切换到一个Activity的入口位置。接下来,如果开发者选择启动动态分析,执行结果则会显示出来。开发者可以查看所有的Fragment是否正确,也可利用工具提供的控件信息来手动添加一个Fragment。当Activity的深链已经生成好后,开发者可以选择生成目标文件作为输出。
下面的代码展示了工具为Anki应用添加的两个深链模版。其中的代码即为CardTemplateEditor和NoteEditor Activity的深链模版。在到达CardTemplateEditor前,必需先传入CALLER和modeId两个参数,因此跳转到CardTemplateEditor的深链必需对这两个参数进行赋值。然后Aladdin会找到合适的Intent来切换到目标Activity。NoteEditor有Fragment名“tags”,到具体Fragment的行动需要点击源id为CardEditorTagButton的view。因此,为了到达目标Fragment,Intents的值(CALLER=3)和fragment的值(#tags)都需要具体赋值。
(1)CardTemplateEditor深链:
调用示例:http://anki.ichi2.com/CardTemplateEditor?CALLER=3&modelId=1472031370433
(2)NoteEditor深链:
调用示例:http://anki.ichi2.com/NoteEditor?CALLER=3#tags。
以上实施仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的精神和范围,本发明的保护范围应以权利要求书所述为准。
Claims (7)
1.一种安卓应用的深链接口自动生成方法,其步骤包括:
1)对于目标安卓应用程序的代码中每一设定Activity,获取到达该Activity的Intent序列;
2)针对该目标安卓应用程序的代码中每一选定的目标Activity,生成从该选定的Activity的入口到达其内部设定Fragment的操作序列;
3)根据所述Intent序列和所述操作序列构成该目标安卓应用程序中各设定位置的深链模板,即得到各设定位置对应的深链接口。
2.如权利要求1所述的方法,其特征在于,获取到达该Activity的Intent序列的方法为:首先构造该目标安卓应用程序的Activity导航关系图;然后根据该Activity导航关系图,获取从应用入口Activity到达该Activity的路径,然后选取最短路径所对应的Intent序列,作为从应用入口Activity到达该Activity的Intent序列。
3.如权利要求1所述的方法,其特征在于,生成所述操作序列的方法为:为所述目标Activity中的每一Fragment生成一标识;生成所述目标Activity的Fragment切换图FTG<P,D,p>;其中,P代表一个顶点集合,Activity中每一Fragment的标识对应一顶点;D是有向边的集合,每一条边是一个三元组e<s,t,i>,s代表源Fragment,t为目标Fragment,i代表引发切换的控件的标识id;p是起始点,即Activity刚打开时的主页面;然后根据所述目标Activity的Fragment切换图,将从起始点到目标Fragment的边串联起来,得到所述目标Activity的Fragment的操作序列。
4.如权利要求3所述的方法,其特征在于,为所述目标Activity中的每一Fragment生成一标识的方法为:获取安卓***为该目标安卓应用程序在运行时构造的控件树;计算该控件树的哈希值,然后用该哈希值来标识当前的Fragment。
5.如权利要求4所述的方法,其特征在于,计算所述控件树的哈希值的方法为:对于该控件树中的一个节点q,如果节点q在控件树中没有子节点,则结果为节点q对应控件的标签字符串哈希;如果节点q有子节点,则递归计算出节点q所有子节点的哈希;然后根据节点q的子节点的哈希值对节点q的子节点排序来保证哈希结构的一致性,再将每个子节点的哈希值与控件的标签加起来形成一个新的字符串,最终将该新的字符串的哈希值作为节点q的哈希。
6.如权利要求3所述的方法,其特征在于,获得所述Fragment切换图的方法为:首先点击当前Fragment的每个控件来检查Activity是否改变,如果Activity改变,则调用***函数doback()直接返回前一个状态,返回之后继续遍历;如果Activity改变,则检查当前Fragment的状态,如果当前Fragment的标识与之前的不同,且当前Fragment是一个新的Fragment,则其加入Fragment切换图中,并且记录边的信息为发生切换的控件;如果没有发生Fragment切换则继续遍历;在完成遍历搜索后,得到所述Fragment切换图以及所有Fragment的列表。
7.一种基于权利要求1所述方法生成的深链接口的深链执行方法,其特征在于,代理Activity根据深链请求查找对应的深链模板并对其实例化,构造一个可跳转到该深链请求对应目标位置的脚本;然后根据脚本,回放引擎控制安卓应用在Activity之间切换,并在控件上进行操作,达到目标位置;所述深链请求中包含深链对应深链模板中的参数所需要的赋值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711134577.1A CN108008941B (zh) | 2017-11-16 | 2017-11-16 | 一种安卓应用的深链接口自动生成方法及深链执行方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711134577.1A CN108008941B (zh) | 2017-11-16 | 2017-11-16 | 一种安卓应用的深链接口自动生成方法及深链执行方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108008941A true CN108008941A (zh) | 2018-05-08 |
CN108008941B CN108008941B (zh) | 2019-06-21 |
Family
ID=62052642
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711134577.1A Active CN108008941B (zh) | 2017-11-16 | 2017-11-16 | 一种安卓应用的深链接口自动生成方法及深链执行方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108008941B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111240957A (zh) * | 2019-11-27 | 2020-06-05 | 广东电网有限责任公司信息中心 | Android应用的Activity关系图生成方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1755682A (zh) * | 2004-09-30 | 2006-04-05 | 微软公司 | 使用点击距离对搜索结果分级的***和方法 |
CN102591981A (zh) * | 2011-01-06 | 2012-07-18 | 微软公司 | 提供与工具栏关联的深层链接 |
CN105431844A (zh) * | 2013-07-17 | 2016-03-23 | 谷歌公司 | 用于搜索***的第三方搜索应用 |
CN106663108A (zh) * | 2014-06-25 | 2017-05-10 | 谷歌公司 | 用于原生应用的深链接 |
US20170192987A1 (en) * | 2015-12-31 | 2017-07-06 | Quixey, Inc. | Transformation and Presentation of On-Demand Native Application Crawling Results |
US20170249312A1 (en) * | 2016-02-27 | 2017-08-31 | Microsoft Technology Licensing, Llc | Dynamic deeplinks for navigational queries |
-
2017
- 2017-11-16 CN CN201711134577.1A patent/CN108008941B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1755682A (zh) * | 2004-09-30 | 2006-04-05 | 微软公司 | 使用点击距离对搜索结果分级的***和方法 |
CN102591981A (zh) * | 2011-01-06 | 2012-07-18 | 微软公司 | 提供与工具栏关联的深层链接 |
CN105431844A (zh) * | 2013-07-17 | 2016-03-23 | 谷歌公司 | 用于搜索***的第三方搜索应用 |
CN106663108A (zh) * | 2014-06-25 | 2017-05-10 | 谷歌公司 | 用于原生应用的深链接 |
US20170192987A1 (en) * | 2015-12-31 | 2017-07-06 | Quixey, Inc. | Transformation and Presentation of On-Demand Native Application Crawling Results |
US20170249312A1 (en) * | 2016-02-27 | 2017-08-31 | Microsoft Technology Licensing, Llc | Dynamic deeplinks for navigational queries |
Non-Patent Citations (2)
Title |
---|
MARGI3: "《CSDN博客》", 13 October 2017 * |
YUN MA,XUANZHE LIU,ZINIU HU等: "Aladdin: Automating Release of Android Deep Links to In-App Content", 《2017 IEEE/ACM 39TH INTERNATIONAL CONFERENCE ON SOFTWARE ENGINEERING COMPANION (ICSE-C)》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111240957A (zh) * | 2019-11-27 | 2020-06-05 | 广东电网有限责任公司信息中心 | Android应用的Activity关系图生成方法 |
CN111240957B (zh) * | 2019-11-27 | 2023-09-15 | 广东电网有限责任公司信息中心 | Android应用的Activity关系图生成方法 |
Also Published As
Publication number | Publication date |
---|---|
CN108008941B (zh) | 2019-06-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11150874B2 (en) | API specification generation | |
US9158764B2 (en) | Method and apparatus for utilizing user feedback to improve signifier mapping | |
JP6494609B2 (ja) | カスタマイズされたソフトウェア開発キット(sdk)生成のための方法および装置 | |
CN102597993B (zh) | 利用统一资源标识符管理应用状态信息 | |
Steffan et al. | Collaborative attack modeling | |
US6606625B1 (en) | Wrapper induction by hierarchical data analysis | |
US7062488B1 (en) | Task/domain segmentation in applying feedback to command control | |
CN107766344B (zh) | 一种模板渲染的方法、装置及浏览器 | |
KR20060050608A (ko) | 데이터 공유 시스템, 방법 및 소프트웨어 툴 | |
Benjamin et al. | A strategy for efficient crawling of rich internet applications | |
WO2014204984A1 (en) | Method and apparatus for code virtualization and remote process call generation | |
WO2009059480A1 (en) | Url and anchor text analysis for focused crawling | |
US8219934B2 (en) | Method and code module for facilitating navigation between webpages | |
Sharma et al. | A novel architecture for deep web crawler | |
CN108008941B (zh) | 一种安卓应用的深链接口自动生成方法及深链执行方法 | |
US7124142B2 (en) | Method and system for responding to requests relating to complex data maintained in a structured form | |
Kowalczyk et al. | Enhancing SEO in single-page web applications in contrast with multi-page applications | |
Raad et al. | DOM: specification and client reasoning | |
US7921104B2 (en) | Invoking actions on data via LDAP requests | |
CN105912573A (zh) | 数据更新方法及装置 | |
Choudhary | M-crawler: Crawling rich internet applications using menu meta-model | |
Troelsen et al. | Introducing ASP. NET MVC | |
Shrestha | Ember. js front-end framework–SEO challenges and frameworks comparison | |
JP2002342382A (ja) | ハイパー・テキスト構造の自動検索方法及び装置 | |
JP2003330803A (ja) | 情報アクセス装置、情報アクセス方法、コンピュータにその方法を実現させるプログラムおよびそのプログラムを記録した記録媒体 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |