@gkd-kit/docs 0.0.1721312569876 → 0.0.1721382969248
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.vitepress/dist/404.html +4 -4
- package/.vitepress/dist/api/index.html +7 -7
- package/.vitepress/dist/api/interfaces/RawApp.html +7 -7
- package/.vitepress/dist/api/interfaces/RawAppGroup.html +7 -7
- package/.vitepress/dist/api/interfaces/RawAppRule.html +7 -7
- package/.vitepress/dist/api/interfaces/RawAppRuleProps.html +7 -7
- package/.vitepress/dist/api/interfaces/RawCategory.html +7 -7
- package/.vitepress/dist/api/interfaces/RawCommonProps.html +7 -7
- package/.vitepress/dist/api/interfaces/RawGlobalApp.html +7 -7
- package/.vitepress/dist/api/interfaces/RawGlobalGroup.html +7 -7
- package/.vitepress/dist/api/interfaces/RawGlobalRule.html +7 -7
- package/.vitepress/dist/api/interfaces/RawGlobalRuleProps.html +7 -7
- package/.vitepress/dist/api/interfaces/RawGroupProps.html +7 -7
- package/.vitepress/dist/api/interfaces/RawRuleProps.html +7 -7
- package/.vitepress/dist/api/interfaces/RawSubscription.html +7 -7
- package/.vitepress/dist/api/type-aliases/IArray.html +7 -7
- package/.vitepress/dist/api/type-aliases/Integer.html +7 -7
- package/.vitepress/dist/api/type-aliases/Position.html +7 -7
- package/.vitepress/dist/assets/{api_index.md.3PRXJson.js → api_index.md.B_aYOoV1.js} +1 -1
- package/.vitepress/dist/assets/api_index.md.B_aYOoV1.lean.js +1 -0
- package/.vitepress/dist/assets/{api_interfaces_RawApp.md.8sLmHweB.js → api_interfaces_RawApp.md.Bp5w73RS.js} +1 -1
- package/.vitepress/dist/assets/{api_interfaces_RawApp.md.8sLmHweB.lean.js → api_interfaces_RawApp.md.Bp5w73RS.lean.js} +1 -1
- package/.vitepress/dist/assets/{api_interfaces_RawAppGroup.md.DdwJRj99.js → api_interfaces_RawAppGroup.md.jeT3_cxo.js} +1 -1
- package/.vitepress/dist/assets/{api_interfaces_RawAppGroup.md.DdwJRj99.lean.js → api_interfaces_RawAppGroup.md.jeT3_cxo.lean.js} +1 -1
- package/.vitepress/dist/assets/{api_interfaces_RawAppRule.md.DOjDKktq.js → api_interfaces_RawAppRule.md.CbLX8P8G.js} +1 -1
- package/.vitepress/dist/assets/{api_interfaces_RawAppRule.md.DOjDKktq.lean.js → api_interfaces_RawAppRule.md.CbLX8P8G.lean.js} +1 -1
- package/.vitepress/dist/assets/{api_interfaces_RawAppRuleProps.md.WEps3B2Z.js → api_interfaces_RawAppRuleProps.md.mDHegsKi.js} +1 -1
- package/.vitepress/dist/assets/{api_interfaces_RawAppRuleProps.md.WEps3B2Z.lean.js → api_interfaces_RawAppRuleProps.md.mDHegsKi.lean.js} +1 -1
- package/.vitepress/dist/assets/{api_interfaces_RawCategory.md.DQKPbY5o.js → api_interfaces_RawCategory.md.DUdjgczY.js} +1 -1
- package/.vitepress/dist/assets/{api_interfaces_RawCategory.md.DQKPbY5o.lean.js → api_interfaces_RawCategory.md.DUdjgczY.lean.js} +1 -1
- package/.vitepress/dist/assets/{api_interfaces_RawCommonProps.md.BoObWunG.js → api_interfaces_RawCommonProps.md.CtSInFSc.js} +1 -1
- package/.vitepress/dist/assets/{api_interfaces_RawCommonProps.md.BoObWunG.lean.js → api_interfaces_RawCommonProps.md.CtSInFSc.lean.js} +1 -1
- package/.vitepress/dist/assets/{api_interfaces_RawGlobalApp.md.DTFuY6sg.js → api_interfaces_RawGlobalApp.md.CBmfAnb3.js} +1 -1
- package/.vitepress/dist/assets/{api_interfaces_RawGlobalApp.md.DTFuY6sg.lean.js → api_interfaces_RawGlobalApp.md.CBmfAnb3.lean.js} +1 -1
- package/.vitepress/dist/assets/{api_interfaces_RawGlobalGroup.md.CI-pj5AD.js → api_interfaces_RawGlobalGroup.md.BZQPgreG.js} +1 -1
- package/.vitepress/dist/assets/{api_interfaces_RawGlobalGroup.md.CI-pj5AD.lean.js → api_interfaces_RawGlobalGroup.md.BZQPgreG.lean.js} +1 -1
- package/.vitepress/dist/assets/{api_interfaces_RawGlobalRule.md.ButOuD_j.js → api_interfaces_RawGlobalRule.md.r5Lzge_Q.js} +1 -1
- package/.vitepress/dist/assets/{api_interfaces_RawGlobalRule.md.ButOuD_j.lean.js → api_interfaces_RawGlobalRule.md.r5Lzge_Q.lean.js} +1 -1
- package/.vitepress/dist/assets/{api_interfaces_RawGlobalRuleProps.md.jof0OV0K.js → api_interfaces_RawGlobalRuleProps.md.DaMg9gj5.js} +1 -1
- package/.vitepress/dist/assets/{api_interfaces_RawGlobalRuleProps.md.jof0OV0K.lean.js → api_interfaces_RawGlobalRuleProps.md.DaMg9gj5.lean.js} +1 -1
- package/.vitepress/dist/assets/{api_interfaces_RawGroupProps.md.CzfLdQXT.js → api_interfaces_RawGroupProps.md.CZ0hUrWr.js} +1 -1
- package/.vitepress/dist/assets/{api_interfaces_RawGroupProps.md.CzfLdQXT.lean.js → api_interfaces_RawGroupProps.md.CZ0hUrWr.lean.js} +1 -1
- package/.vitepress/dist/assets/{api_interfaces_RawRuleProps.md.BAzarHNi.js → api_interfaces_RawRuleProps.md.DkIc0L7c.js} +1 -1
- package/.vitepress/dist/assets/{api_interfaces_RawRuleProps.md.BAzarHNi.lean.js → api_interfaces_RawRuleProps.md.DkIc0L7c.lean.js} +1 -1
- package/.vitepress/dist/assets/{api_interfaces_RawSubscription.md.Dc51XN4e.js → api_interfaces_RawSubscription.md.CKljwK0U.js} +1 -1
- package/.vitepress/dist/assets/{api_interfaces_RawSubscription.md.Dc51XN4e.lean.js → api_interfaces_RawSubscription.md.CKljwK0U.lean.js} +1 -1
- package/.vitepress/dist/assets/{api_type-aliases_IArray.md.oRXi7ugr.js → api_type-aliases_IArray.md.DBIZ7Hb2.js} +1 -1
- package/.vitepress/dist/assets/{api_type-aliases_IArray.md.oRXi7ugr.lean.js → api_type-aliases_IArray.md.DBIZ7Hb2.lean.js} +1 -1
- package/.vitepress/dist/assets/{api_type-aliases_Integer.md.D6h74cIH.js → api_type-aliases_Integer.md.B1mLD5vo.js} +1 -1
- package/.vitepress/dist/assets/{api_type-aliases_Integer.md.D6h74cIH.lean.js → api_type-aliases_Integer.md.B1mLD5vo.lean.js} +1 -1
- package/.vitepress/dist/assets/{api_type-aliases_Position.md.CdkdhAt0.js → api_type-aliases_Position.md.CgxnJPJO.js} +1 -1
- package/.vitepress/dist/assets/{api_type-aliases_Position.md.CdkdhAt0.lean.js → api_type-aliases_Position.md.CgxnJPJO.lean.js} +1 -1
- package/.vitepress/dist/assets/app.CJsRL6DI.js +1 -0
- package/.vitepress/dist/assets/chunks/@localSearchIndexroot.DNYdB9Q4.js +1 -0
- package/.vitepress/dist/assets/chunks/{VPLocalSearchBox.eYtt4ge9.js → VPLocalSearchBox.BWhTmwu8.js} +2 -2
- package/.vitepress/dist/assets/chunks/{framework.CSd4LtKr.js → framework.DAuRlsJR.js} +1 -1
- package/.vitepress/dist/assets/chunks/{index.R0h7RKsp.js → index.B6slXCSj.js} +1 -1
- package/.vitepress/dist/assets/chunks/theme.Ct42Rw2h.js +1 -0
- package/.vitepress/dist/assets/{guide_faq.md.B9Ah14lM.js → guide_faq.md.CQh24LD7.js} +1 -1
- package/.vitepress/dist/assets/{guide_faq.md.B9Ah14lM.lean.js → guide_faq.md.CQh24LD7.lean.js} +1 -1
- package/.vitepress/dist/assets/guide_index.md.C19r84dZ.js +1 -0
- package/.vitepress/dist/assets/guide_index.md.C19r84dZ.lean.js +1 -0
- package/.vitepress/dist/assets/{guide_snapshot.md.BcNduC28.js → guide_snapshot.md.DdWrSBgV.js} +1 -1
- package/.vitepress/dist/assets/{guide_snapshot.md.BcNduC28.lean.js → guide_snapshot.md.DdWrSBgV.lean.js} +1 -1
- package/.vitepress/dist/assets/{guide_subscription.md.BDMLB3yr.js → guide_subscription.md.BMiwrNPy.js} +1 -1
- package/.vitepress/dist/assets/{guide_subscription.md.BDMLB3yr.lean.js → guide_subscription.md.BMiwrNPy.lean.js} +1 -1
- package/.vitepress/dist/assets/{guide_what-is-gkd.md.8PjQDyPD.js → guide_what-is-gkd.md.C31ijX-g.js} +1 -1
- package/.vitepress/dist/assets/guide_what-is-gkd.md.C31ijX-g.lean.js +1 -0
- package/.vitepress/dist/assets/{index.md.BIe7A5q2.js → index.md.DTAaOzk1.js} +1 -1
- package/.vitepress/dist/assets/{index.md.BIe7A5q2.lean.js → index.md.DTAaOzk1.lean.js} +1 -1
- package/.vitepress/dist/assets/{selector_example.md.CuUVYz1m.js → selector_example.md.-3DFvS7c.js} +1 -1
- package/.vitepress/dist/assets/selector_example.md.-3DFvS7c.lean.js +1 -0
- package/.vitepress/dist/assets/selector_index.md.vTFQ7m-J.js +12 -0
- package/.vitepress/dist/assets/selector_index.md.vTFQ7m-J.lean.js +1 -0
- package/.vitepress/dist/assets/{selector_node.md.D9P0EESL.js → selector_node.md.C9SxSLjc.js} +1 -1
- package/.vitepress/dist/assets/selector_node.md.C9SxSLjc.lean.js +1 -0
- package/.vitepress/dist/assets/{selector_optimize.md.DHOZlZAJ.js → selector_optimize.md.qZxu6dCr.js} +1 -1
- package/.vitepress/dist/assets/selector_optimize.md.qZxu6dCr.lean.js +1 -0
- package/.vitepress/dist/assets/{snapshot_index.md.BgTjn8Ut.js → snapshot_index.md.kVTiIPnR.js} +1 -1
- package/.vitepress/dist/assets/{snapshot_index.md.BgTjn8Ut.lean.js → snapshot_index.md.kVTiIPnR.lean.js} +1 -1
- package/.vitepress/dist/assets/style.DU-YwcM_.css +1 -1
- package/.vitepress/dist/guide/faq.html +8 -8
- package/.vitepress/dist/guide/index.html +8 -8
- package/.vitepress/dist/guide/snapshot.html +8 -8
- package/.vitepress/dist/guide/subscription.html +8 -8
- package/.vitepress/dist/guide/what-is-gkd.html +8 -8
- package/.vitepress/dist/hashmap.json +1 -1
- package/.vitepress/dist/index.html +7 -7
- package/.vitepress/dist/selector/example.html +8 -8
- package/.vitepress/dist/selector/index.html +9 -9
- package/.vitepress/dist/selector/node.html +8 -8
- package/.vitepress/dist/selector/optimize.html +8 -8
- package/.vitepress/dist/snapshot/index.html +8 -8
- package/package.json +1 -1
- package/.vitepress/dist/assets/api_index.md.3PRXJson.lean.js +0 -1
- package/.vitepress/dist/assets/app.DqzQBrqq.js +0 -1
- package/.vitepress/dist/assets/chunks/@localSearchIndexroot.CQRgRmWG.js +0 -1
- package/.vitepress/dist/assets/chunks/theme.u-UTZ1M2.js +0 -1
- package/.vitepress/dist/assets/guide_index.md.C6EnGW7N.js +0 -1
- package/.vitepress/dist/assets/guide_index.md.C6EnGW7N.lean.js +0 -1
- package/.vitepress/dist/assets/guide_what-is-gkd.md.8PjQDyPD.lean.js +0 -1
- package/.vitepress/dist/assets/selector_example.md.CuUVYz1m.lean.js +0 -1
- package/.vitepress/dist/assets/selector_index.md.Dq6qdIFi.js +0 -12
- package/.vitepress/dist/assets/selector_index.md.Dq6qdIFi.lean.js +0 -1
- package/.vitepress/dist/assets/selector_node.md.D9P0EESL.lean.js +0 -1
- package/.vitepress/dist/assets/selector_optimize.md.DHOZlZAJ.lean.js +0 -1
package/.vitepress/dist/assets/{selector_node.md.D9P0EESL.js → selector_node.md.C9SxSLjc.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{_ as t,c as d,o as e,a8 as o}from"./chunks/framework.DAuRlsJR.js";const u=JSON.parse('{"title":"属性方法","description":"","frontmatter":{},"headers":[],"relativePath":"selector/node.md","filePath":"selector/node.md","lastUpdated":1721382947000}'),r={name:"selector/node.md"},c=o('<h1 id="title" tabindex="-1">属性方法 <a class="header-anchor" href="#title" aria-label="Permalink to "属性方法 {#title}""></a></h1><p>此章节介绍各个类型可用的属性及其方法</p><h2 id="null" tabindex="-1">null <a class="header-anchor" href="#null" aria-label="Permalink to "null""></a></h2><div class="note custom-block github-alert"><p class="custom-block-title">提示</p><p><code>null</code> 无任何属性方法, 并且属性方法当调用者或者参数是 <code>null</code> 时, 均返回 <code>null</code></p></div><p>当 <code>name</code> 是 <code>null</code> 时, <code>name.length</code> 为 <code>null</code></p><p>当 <code>parent</code> 是 <code>null</code> 时, <code>parent.getChild(0)</code> 为 <code>null</code></p><p>当 <code>index</code> 是 <code>null</code> 时, <code>parent.getChild(index)</code> 为 <code>null</code></p><h2 id="boolean" tabindex="-1">boolean <a class="header-anchor" href="#boolean" aria-label="Permalink to "boolean""></a></h2><table tabindex="0"><thead><tr><th>方法名</th><th>参数</th><th>返回类型</th><th>描述</th></tr></thead><tbody><tr><td>toInt</td><td></td><td><code>int</code></td><td>转为 0 或 1</td></tr></tbody></table><h2 id="int" tabindex="-1">int <a class="header-anchor" href="#int" aria-label="Permalink to "int""></a></h2><table tabindex="0"><thead><tr><th>方法名</th><th>参数</th><th>返回类型</th><th>描述</th></tr></thead><tbody><tr><td>toString</td><td></td><td><a href="#string"><code>string</code></a></td><td>转为10进制字符串</td></tr><tr><td>toString</td><td><code>int</code></td><td><code>string</code></td><td>转为对应进制的字符串</td></tr><tr><td>plus</td><td><code>int</code></td><td><code>string</code></td><td>加上</td></tr><tr><td>minus</td><td><code>int</code></td><td><code>string</code></td><td>减去</td></tr><tr><td>times</td><td><code>int</code></td><td><code>string</code></td><td>乘以</td></tr><tr><td>div</td><td><code>int</code></td><td><code>string</code></td><td>除以</td></tr><tr><td>rem</td><td><code>int</code></td><td><code>string</code></td><td>取余</td></tr></tbody></table><h2 id="string" tabindex="-1">string <a class="header-anchor" href="#string" aria-label="Permalink to "string""></a></h2><table tabindex="0"><thead><tr><th>标识符</th><th>属性类型</th><th>描述</th></tr></thead><tbody><tr><td>length</td><td><a href="#int"><code>int</code></a></td><td>字符串长度</td></tr></tbody></table><table tabindex="0"><thead><tr><th>方法名</th><th>参数</th><th>返回类型</th><th>描述</th></tr></thead><tbody><tr><td>get</td><td><a href="#int"><code>int</code></a></td><td><code>string</code></td><td>获取对应索引字符串</td></tr><tr><td>at</td><td><code>int</code></td><td><code>string</code></td><td>同上,但是参数传负数时从最后一个字符取</td></tr><tr><td>substring</td><td><code>int</code></td><td><code>string</code></td><td>截取指定索引到结尾字符串</td></tr><tr><td>substring</td><td><code>int</code>,<code>int</code></td><td><code>string</code></td><td>截取指定间隔字符串</td></tr><tr><td>toInt</td><td></td><td><code>int</code></td><td>转为10进制数字</td></tr><tr><td>toInt</td><td><code>int</code></td><td><code>int</code></td><td>转为指定进制的数字</td></tr><tr><td>indexOf</td><td><code>string</code></td><td><code>int</code></td><td>查找指定字符串的索引</td></tr><tr><td>indexOf</td><td><code>string</code>,<code>int</code></td><td><code>int</code></td><td>从指定索引开始查找指定字符串的索引</td></tr></tbody></table><h2 id="node" tabindex="-1">node <a class="header-anchor" href="#node" aria-label="Permalink to "node""></a></h2><div class="important custom-block github-alert"><p class="custom-block-title">重要提示</p><p>此类型下以 _ 开头的属性只能在网页快照调试工具上使用, 真机不可用</p></div><table tabindex="0"><thead><tr><th>标识符</th><th>属性类型</th><th>描述</th></tr></thead><tbody><tr><td>_id</td><td><a href="#int"><code>int</code></a></td><td></td></tr><tr><td>_pid</td><td><code>int</code></td><td></td></tr><tr><td>id</td><td><a href="#string"><code>string</code></a></td><td></td></tr><tr><td>vid</td><td><code>string</code></td><td></td></tr><tr><td>name</td><td><code>string</code></td><td></td></tr><tr><td>text</td><td><code>string</code></td><td></td></tr><tr><td>desc</td><td><code>string</code></td><td></td></tr><tr><td>clickable</td><td><code>boolean</code></td><td></td></tr><tr><td>focusable</td><td><code>boolean</code></td><td></td></tr><tr><td>checkable</td><td><code>boolean</code></td><td></td></tr><tr><td>checked</td><td><code>boolean</code></td><td></td></tr><tr><td>editable</td><td><code>boolean</code></td><td></td></tr><tr><td>longClickable</td><td><code>boolean</code></td><td></td></tr><tr><td>visibleToUser</td><td><code>boolean</code></td><td></td></tr><tr><td>left</td><td><code>int</code></td><td></td></tr><tr><td>top</td><td><code>int</code></td><td></td></tr><tr><td>right</td><td><code>int</code></td><td></td></tr><tr><td>bottom</td><td><code>int</code></td><td></td></tr><tr><td>width</td><td><code>int</code></td><td></td></tr><tr><td>height</td><td><code>int</code></td><td></td></tr><tr><td>childCount</td><td><code>int</code></td><td></td></tr><tr><td>index</td><td><code>int</code></td><td></td></tr><tr><td>depth</td><td><code>int</code></td><td></td></tr><tr><td>parent</td><td><a href="#node"><code>node</code></a></td><td>获取父节点</td></tr></tbody></table><table tabindex="0"><thead><tr><th>方法名</th><th>参数</th><th>返回类型</th><th>描述</th></tr></thead><tbody><tr><td>getChild</td><td>int</td><td><a href="#node"><code>node</code></a></td><td>获取指定索引的子节点</td></tr></tbody></table><h2 id="context" tabindex="-1">context <a class="header-anchor" href="#context" aria-label="Permalink to "context""></a></h2><p>context 具有 <a href="#node">node</a> 的所有属性方法, 下面只介绍额外属性方法</p><table tabindex="0"><thead><tr><th>标识符</th><th>属性类型</th><th>描述</th></tr></thead><tbody><tr><td>prev</td><td><a href="#context"><code>context</code></a></td><td>右侧属性选择器的节点上下文 <br> 最右侧的 prev=null</td></tr></tbody></table><p>例 <code>FrameLayout[prev.name$='ImageView'] > ImageView</code> 中的 prev 就是 FrameLayout 右侧的 ImageView</p><table tabindex="0"><thead><tr><th>方法名</th><th>参数</th><th>返回类型</th><th>描述</th></tr></thead><tbody><tr><td>getPrev</td><td>int</td><td><a href="#context"><code>context</code></a></td><td>快捷获取深层 prev <br> getPrev(0) -> prev <br> getPrev(1) -> prev.prev <br> getPrev(2) -> prev.prev.prev</td></tr></tbody></table>',23),a=[c];function n(i,h,l,s,b,p){return e(),d("div",null,a)}const m=t(r,[["render",n]]);export{u as __pageData,m as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{_ as t,c as d,o as e,a8 as o}from"./chunks/framework.DAuRlsJR.js";const u=JSON.parse('{"title":"属性方法","description":"","frontmatter":{},"headers":[],"relativePath":"selector/node.md","filePath":"selector/node.md","lastUpdated":1721382947000}'),r={name:"selector/node.md"},c=o("",23),a=[c];function n(i,h,l,s,b,p){return e(),d("div",null,a)}const m=t(r,[["render",n]]);export{u as __pageData,m as default};
|
package/.vitepress/dist/assets/{selector_optimize.md.DHOZlZAJ.js → selector_optimize.md.qZxu6dCr.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{_ as e,c as o,o as t,a8 as c}from"./chunks/framework.DAuRlsJR.js";const b=JSON.parse('{"title":"查询优化","description":"","frontmatter":{},"headers":[],"relativePath":"selector/optimize.md","filePath":"selector/optimize.md","lastUpdated":1721382947000}'),d={name:"selector/optimize.md"},i=c('<h1 id="title" tabindex="-1">查询优化 <a class="header-anchor" href="#title" aria-label="Permalink to "查询优化 {#title}""></a></h1><p>一些关于查询优化的说明</p><h2 id="query-root" tabindex="-1">查找根节点 <a class="header-anchor" href="#query-root" aria-label="Permalink to "查找根节点 {#query-root}""></a></h2><p>选择器通过满足下列格式的属性选择器标识根节点</p><ul><li><code>[parent=null]</code></li><li><code>A[id='xxx'][parent=null][text='xxx']</code></li></ul><p>即只需存在一个 <code>[parent=null]</code> 就满足条件, 以下是对此的优化</p><h3 id="enforce" tabindex="-1">主动查询 <a class="header-anchor" href="#enforce" aria-label="Permalink to "主动查询 {#enforce}""></a></h3><p>一般的选择器如 <code>LinearLayout > TextView</code>, 选择器需要从 根节点/事件节点 使用深度先序顺序遍历子孙节点并判断是否满足条件</p><p>如果屏幕上有 n 个节点, 判断逻辑需要运行 n 次</p><p>但是如果选择器是类似 <code>TextView <3 LinearLayout <2 [parent=null]</code>, 由于在右侧标明了从根节点查找</p><p>因此上面的 <code>深度先序顺序遍历子孙节点</code> 将省略, 只进行一次判断, 不需要判断 n 次</p><p>但是如果你在子查询里使用 <code><<n</code>, 例如 <code>TextView <<n [parent=null]</code></p><p>根据上面说明的优化, 虽然也只有一次判断, 但是由于 <code><<n</code> 导致内部的子判断也是 n 次, 实际上没有优化判断次数</p><p>实际上, 在初始匹配节点是 根节点 的情况下, <code>TextView</code> 和 <code>@TextView <<n [parent=null]</code> 完全等价</p><h3 id="ancestor" tabindex="-1">祖先节点 <a class="header-anchor" href="#ancestor" aria-label="Permalink to "祖先节点 {#ancestor}""></a></h3><p>在示例 <code>A <3 [parent=null] >n TextView</code> 中, 选择器找到 <code>TextView</code> 后, 根据 <code>>n</code> 表示任意祖先节点</p><p>在默认情况下, 如果 <code>TextView</code> 的层级很深, 那必然需要多次调用 获取父节点 才能最终匹配</p><p>但是如果左侧的选择器是 <code>[parent=null] >n</code>, 这表示找到根节点, 选择器此时不会去执行多次调用 获取父节点</p><p>在 GKD 内部, 根节点可以直接通过 API 获取, 因此 <code>[parent=null] >n</code> 只需要调用一次方法</p><h2 id="fast-query" tabindex="-1">快速查询 <a class="header-anchor" href="#fast-query" aria-label="Permalink to "快速查询 {#fast-query}""></a></h2><div class="tip custom-block github-alert"><p class="custom-block-title">提示</p><p>此优化需要设置 <a href="/api/interfaces/RawCommonProps#fastquery">fastQuery</a> 来启用</p></div><p>一般情况下, 选择器 <code>[vid="name"]</code> 需要从 根节点/事件节点 使用深度先序顺序遍历子孙节点并判断是否满足条件</p><p>但是 Android 提供了如下两个快速获取节点的 Api</p><ul><li><a href="https://developer.android.google.cn/reference/android/view/accessibility/AccessibilityNodeInfo#findAccessibilityNodeInfosByViewId(java.lang.String)" target="_blank" rel="noreferrer">findAccessibilityNodeInfosByViewId</a></li><li><a href="https://developer.android.google.cn/reference/android/view/accessibility/AccessibilityNodeInfo#findAccessibilityNodeInfosByText(java.lang.String)" target="_blank" rel="noreferrer">findAccessibilityNodeInfosByText</a></li></ul><p>这使得可以通过 <code>id</code>/<code>vid</code>/<code>text</code> 直接获取子孙节点</p><p>对此我们需要规定符合特定条件的选择器来调用这些 Api 从而跳过手动遍历子孙节点</p><p>所有 <code>末尾属性选择器</code>的<code>第一个属性选择表达式</code>符合下面的结构之一</p><ul><li><code>[id='abc']</code></li><li><code>[vid='abc']</code></li><li><code>[text='abc']</code></li><li><code>[text^='abc']</code></li><li><code>[text*='abc']</code></li><li><code>[text$='abc']</code></li></ul><p>或者使用 <code>||</code> 将它们连接形成的逻辑表达式也符合条件, 即如下格式</p><ul><li><code>[id='abc' || id='abc2']</code></li><li><code>[id='abc' || vid='abc' || text='abc' || text^='abc' || text*='abc' || text$='abc']</code></li></ul><p>这些规定的格式都是为了提取 <code>id</code>/<code>vid</code>/<code>text</code> 来调用上面的两个 Android Api</p><p>下面给出实际示例: ✅ 表示符合格式, ❎ 表示不符合格式</p><ul><li><code>A > B + C[id='x'][childCount=2]</code> ✅</li><li><code>A > B + C[childCount=2][id='x']</code> ❎</li><li><code>A > B + C[id='x' || text='manbaout' || text*='ikun'][childCount=2]</code> ✅</li><li><code>A > B + C[childCount=2][id='x' || text='manbaout' || text*='ikun']</code> ❎</li></ul><p>这样一个选择器只能在右侧使用快速查询, 为了在中间的子选择器也能使用</p><p>额外规定如果属性选择器如果符合上面格式并且右侧是 <code><<n</code>, 也能在局部使用快速查找</p><p>示例 <code>A > B + C[id='x'][childCount=2] <<n D</code> 中的 <code>C[id='x'][childCount=2] <<n</code> 可以使用局部快速查找</p><div class="tip custom-block github-alert"><p class="custom-block-title">提示</p><p>实际上从根节点开始匹配的选择器如 <code>A > B</code> 都可等价为 <code>A > @B <<n [parent=null]</code></p></div><p>下面给出满足局部查询优化的示例: ✅ 表示符合格式, ❎ 表示不符合格式</p><ul><li><code>A > B + C[id='x'][childCount=2] <<n D</code> ✅</li><li><code>A > B + C[childCount=2][id='x'] <<n D</code> ❎</li></ul><p>上面介绍的是只有一个局部选择器的情况, 下面给出多个局部快速查找的的示例</p><p>如 <code>A > C[id='x'] <<n D[id='y'] <<n E</code>, 其中的 <code>C[id='x'] <<n</code> 和 <code>D[id='y'] <<n</code> 都可以使用局部快速查找</p><hr><p>以 <a href="https://i.gkd.li/i/16201605?gkd=W3ZpZD0iaW1hZ2UiXSA8PG4gW3ZpZD0icmVjeWNsZXJWaWV3Il0gPDxuIFt2aWQ9ImNvbnRlbnRfbGF5b3V0Il0" target="_blank" rel="noreferrer"><code>[vid="image"] <<n [vid="recyclerView"] <<n [vid="content_layout"]</code></a> 为例</p><p>上面的选择器存在 3 个快速查找优化</p><ul><li><code>[vid="content_layout"]</code> 从 根节点 优化查询找到 <code>content_layout</code></li><li><code>[vid="recyclerView"]</code> 从 <code>content_layout</code> 优化查询找到 <code>recyclerView</code></li><li><code>[vid="image"]</code> 从 <code>recyclerView</code> 优化查询找到 <code>image</code></li></ul><p>也就是只需要调用 <code>findAccessibilityNodeInfosByViewId</code> 3 次即可得到目标节点</p><p>如果是从根节点开始查询, 根据快照内的 选择器路径视图</p><ul><li><code>[vid="content_layout"]</code> 从 根节点 需要 7 次找到 <code>content_layout</code></li><li><code>[vid="recyclerView"]</code> 从 <code>content_layout</code> 需要 48 次找到 <code>recyclerView</code></li><li><code>[vid="image"]</code> 从 <code>recyclerView</code> 需要 44 次找到 <code>image</code></li></ul>',48),l=[i];function a(n,r,p,u,s,h){return t(),o("div",null,l)}const f=e(d,[["render",a]]);export{b as __pageData,f as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{_ as e,c as o,o as t,a8 as c}from"./chunks/framework.DAuRlsJR.js";const b=JSON.parse('{"title":"查询优化","description":"","frontmatter":{},"headers":[],"relativePath":"selector/optimize.md","filePath":"selector/optimize.md","lastUpdated":1721382947000}'),d={name:"selector/optimize.md"},i=c("",48),l=[i];function a(n,r,p,u,s,h){return t(),o("div",null,l)}const f=e(d,[["render",a]]);export{b as __pageData,f as default};
|
package/.vitepress/dist/assets/{snapshot_index.md.BgTjn8Ut.js → snapshot_index.md.kVTiIPnR.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{_ as a,c as t,o as e,a8 as s}from"./chunks/framework.DAuRlsJR.js";const m=JSON.parse('{"title":"快照审查","description":"","frontmatter":{},"headers":[],"relativePath":"snapshot/index.md","filePath":"snapshot/index.md","lastUpdated":1721382947000}'),i={name:"snapshot/index.md"},o=s('<h1 id="title" tabindex="-1">快照审查 <a class="header-anchor" href="#title" aria-label="Permalink to "快照审查 {#title}""></a></h1><p>关于快照的一些知识</p><h2 id="what-is-snapshot" tabindex="-1">什么是快照 <a class="header-anchor" href="#what-is-snapshot" aria-label="Permalink to "什么是快照 {#what-is-snapshot}""></a></h2><p>快照 是一个 zip 文件, 内部保存了设备在抓取时间点</p><ul><li>截图</li><li>界面信息</li><li>设备信息</li><li>无障碍节点信息</li></ul><h2 id="capture-snapshot" tabindex="-1">抓取快照 <a class="header-anchor" href="#capture-snapshot" aria-label="Permalink to "抓取快照 {#capture-snapshot}""></a></h2><p>在 GKD 内可以通过多种方式抓取快照</p>',7),n=[o];function r(l,h,p,c,d,_){return e(),t("div",null,n)}const f=a(i,[["render",r]]);export{m as __pageData,f as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{_ as a,c as t,o as e,a8 as s}from"./chunks/framework.DAuRlsJR.js";const m=JSON.parse('{"title":"快照审查","description":"","frontmatter":{},"headers":[],"relativePath":"snapshot/index.md","filePath":"snapshot/index.md","lastUpdated":1721382947000}'),i={name:"snapshot/index.md"},o=s("",7),n=[o];function r(l,h,p,c,d,_){return e(),t("div",null,n)}const f=a(i,[["render",r]]);export{m as __pageData,f as default};
|