Kea2-python 0.0.1b2__py3-none-any.whl → 0.1.0b0__py3-none-any.whl

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.

Potentially problematic release.


This version of Kea2-python might be problematic. Click here for more details.

kea2/u2Driver.py CHANGED
@@ -123,6 +123,7 @@ class StaticU2UiObject(u2.UiObject):
123
123
  xpath = f".//node{''.join(attrLocs)}"
124
124
  return xpath
125
125
 
126
+
126
127
  @property
127
128
  def exists(self):
128
129
  dict.update(self.selector, {"covered": "false"})
@@ -134,6 +135,12 @@ class StaticU2UiObject(u2.UiObject):
134
135
  xpath = self._getXPath(self.selector)
135
136
  matched_widgets = self.session.xml.xpath(xpath)
136
137
  return len(matched_widgets)
138
+
139
+ def child(self, **kwargs):
140
+ return StaticU2UiObject(self.session, self.selector.clone().child(**kwargs))
141
+
142
+ def sibling(self, **kwargs):
143
+ return StaticU2UiObject(self.session, self.selector.clone().sibling(**kwargs))
137
144
 
138
145
 
139
146
  def _get_bounds(raw_bounds):
@@ -324,6 +331,89 @@ def forward_port(self, remote: Union[int, str]) -> int:
324
331
  return local_port
325
332
 
326
333
 
334
+ def selector_to_xpath(selector: u2.Selector, is_initial: bool = True) -> str:
335
+ """
336
+ Convert a u2 Selector into an XPath expression compatible with Java Android UI controls.
337
+
338
+ Args:
339
+ selector (u2.Selector): A u2 Selector object
340
+ is_initial (bool): Whether it is the initial node, defaults to True
341
+
342
+ Returns:
343
+ str: The corresponding XPath expression
344
+ """
345
+ try:
346
+ if is_initial:
347
+ xpath = ".//node"
348
+ else:
349
+ xpath = "node"
350
+
351
+ conditions = []
352
+
353
+ if "className" in selector:
354
+ conditions.insert(0, f"[@class='{selector['className']}']") # 将 className 条件放在前面
355
+
356
+ if "text" in selector:
357
+ conditions.append(f"[@text='{selector['text']}']")
358
+ elif "textContains" in selector:
359
+ conditions.append(f"[contains(@text, '{selector['textContains']}')]")
360
+ elif "textMatches" in selector:
361
+ conditions.append(f"[re:match(@text, '{selector['textMatches']}')]")
362
+ elif "textStartsWith" in selector:
363
+ conditions.append(f"[starts-with(@text, '{selector['textStartsWith']}')]")
364
+
365
+ if "description" in selector:
366
+ conditions.append(f"[@content-desc='{selector['description']}']")
367
+ elif "descriptionContains" in selector:
368
+ conditions.append(f"[contains(@content-desc, '{selector['descriptionContains']}')]")
369
+ elif "descriptionMatches" in selector:
370
+ conditions.append(f"[re:match(@content-desc, '{selector['descriptionMatches']}')]")
371
+ elif "descriptionStartsWith" in selector:
372
+ conditions.append(f"[starts-with(@content-desc, '{selector['descriptionStartsWith']}')]")
373
+
374
+ if "packageName" in selector:
375
+ conditions.append(f"[@package='{selector['packageName']}']")
376
+ elif "packageNameMatches" in selector:
377
+ conditions.append(f"[re:match(@package, '{selector['packageNameMatches']}')]")
378
+
379
+ if "resourceId" in selector:
380
+ conditions.append(f"[@resource-id='{selector['resourceId']}']")
381
+ elif "resourceIdMatches" in selector:
382
+ conditions.append(f"[re:match(@resource-id, '{selector['resourceIdMatches']}')]")
383
+
384
+ bool_props = [
385
+ "checkable", "checked", "clickable", "longClickable", "scrollable",
386
+ "enabled", "focusable", "focused", "selected", "covered"
387
+ ]
388
+ for prop in bool_props:
389
+ if prop in selector:
390
+ value = "true" if selector[prop] else "false"
391
+ conditions.append(f"[@{prop}='{value}']")
392
+
393
+ if "index" in selector:
394
+ conditions.append(f"[@index='{selector['index']}']")
395
+ elif "instance" in selector:
396
+ conditions.append(f"[@instance='{selector['instance']}']")
397
+
398
+ xpath += "".join(conditions)
399
+
400
+ if "childOrSibling" in selector and selector["childOrSibling"]:
401
+ for i, relation in enumerate(selector["childOrSibling"]):
402
+ sub_selector = selector["childOrSiblingSelector"][i]
403
+ sub_xpath = selector_to_xpath(sub_selector, False) # 递归处理子选择器
404
+
405
+ if relation == "child":
406
+ xpath += f"/{sub_xpath}"
407
+ elif relation == "sibling":
408
+ xpath_initial = xpath
409
+ xpath = '(' + xpath_initial + f"/following-sibling::{sub_xpath} | " + xpath_initial + f"/preceding-sibling::{sub_xpath})"
410
+
411
+ return xpath
412
+
413
+ except Exception as e:
414
+ print(f"Error occurred during selector conversion: {e}")
415
+ return "//error"
416
+
327
417
  def is_port_in_use(port: int) -> bool:
328
418
  with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
329
419
  return s.connect_ex(('127.0.0.1', port)) == 0
kea2/utils.py CHANGED
@@ -1,6 +1,9 @@
1
1
  import logging
2
2
  import os
3
3
  from pathlib import Path
4
+ from typing import TYPE_CHECKING
5
+ if TYPE_CHECKING:
6
+ from .keaUtils import Options
4
7
 
5
8
 
6
9
  def getLogger(name: str) -> logging.Logger:
@@ -50,4 +53,8 @@ def getProjectRoot():
50
53
  if cur_dir == root:
51
54
  return None
52
55
  cur_dir = cur_dir.parent
53
- return cur_dir
56
+ return cur_dir
57
+
58
+
59
+
60
+
@@ -0,0 +1,257 @@
1
+ Metadata-Version: 2.4
2
+ Name: Kea2-python
3
+ Version: 0.1.0b0
4
+ Summary: A python library for supporting and customizing automated UI testing for mobile apps
5
+ Author-email: Xixian Liang <xixian@stu.ecnu.edu.cn>
6
+ Requires-Python: >=3.8
7
+ Description-Content-Type: text/markdown
8
+ License-File: LICENSE
9
+ Requires-Dist: rtree>=1.3.0
10
+ Requires-Dist: uiautomator2>=3.2.9
11
+ Dynamic: license-file
12
+
13
+
14
+
15
+ [![PyPI](https://img.shields.io/pypi/v/kea2-python.svg)](https://pypi.python.org/pypi/kea2-python)
16
+ [![PyPI Downloads](https://static.pepy.tech/badge/kea2-python)](https://pepy.tech/projects/kea2-python)
17
+ ![Python](https://img.shields.io/badge/python-3.8%2B-blue)
18
+
19
+ <div>
20
+ <img src="https://github.com/user-attachments/assets/dad0dbf5-b5d3-414b-a627-281a0fa40cf1" style="border-radius: 14px; width: 20%; height: 20%;"/>
21
+ </div>
22
+
23
+ ## About
24
+
25
+ Kea2 is an easy-to-use Python library for supporting, customizing and improving automated UI testing for mobile apps. Kea2's novelty is able to fuse the scripts (usually written by human) with automated UI testing tools, thus allowing many interesting and powerful features.
26
+
27
+ Kea2 is currently built on top of [Fastbot](https://github.com/bytedance/Fastbot_Android) and [uiautomator2](https://github.com/openatx/uiautomator2) and targets [Android](https://en.wikipedia.org/wiki/Android_(operating_system)) apps.
28
+
29
+ ## Important features
30
+ - **Feature 1**(查找稳定性问题): coming with the full capability of [Fastbot](https://github.com/bytedance/Fastbot_Android) for stress testing and finding *stability problems* (i.e., *crashing bugs*);
31
+
32
+ - **Feature 2**(自定义测试场景\事件序列\黑白名单\黑白控件[^1]): customizing testing scenarios when running Fastbot (e.g., testing specific app functionalities, executing specific event traces, entering specifc UI pages, reaching specific app states, blacklisting specific activities/UI widgets/UI regions) with the full capability and flexibility powered by *python* language and [uiautomator2](https://github.com/openatx/uiautomator2);
33
+
34
+ - **Feature 3**(支持断言机制[^2]): supporting auto-assertions when running Fastbot, based on the idea of [property-based testing](https://en.wikipedia.org/wiki/Software_testing#Property_testing) inheritted from [Kea](https://github.com/ecnusse/Kea), for finding *logic bugs* (i.e., *non-crashing bugs*)
35
+
36
+
37
+ **The ability of the three features in Kea2**
38
+ | | **Feature 1** | **Feature 2** | **Feature 3** |
39
+ | --- | --- | --- | ---- |
40
+ | **Finding crashes** | :+1: | :+1: | :+1: |
41
+ | **Finding crashes in deep states** | | :+1: | :+1: |
42
+ | **Finding non-crashing functional (logic) bugs** | | | :+1: |
43
+
44
+
45
+ <div align="center">
46
+ <div style="max-width:80%; max-height:80%">
47
+ <img src="docs/intro.png" style="border-radius: 14px; width: 80%; height: 80%;"/>
48
+ </div>
49
+ </div>
50
+
51
+
52
+
53
+ ## Design & Roadmap
54
+ Kea2, released as a Python library, currently works with:
55
+ - [unittest](https://docs.python.org/3/library/unittest.html) as the testing framework;
56
+ - [uiautomator2](https://github.com/openatx/uiautomator2) as the UI test driver;
57
+ - [Fastbot](https://github.com/bytedance/Fastbot_Android) as the backend automated UI testing tool.
58
+
59
+ In the future, Kea2 will be extended to support
60
+ - [pytest](https://docs.pytest.org/en/stable/)
61
+ - [Appium](https://github.com/appium/appium), [Hypium](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/hypium-python-guidelines) (for HarmonyOS/Open Harmony)
62
+ - other automated UI testing tools (not limited to Fastbot)
63
+
64
+
65
+ ## Installation
66
+
67
+ Running environment:
68
+ - support Windows, MacOS and Linux
69
+ - python 3.8+, Android 4.4+ (Android SDK installed)
70
+ - **VPN closed** (Features 2 and 3 required)
71
+
72
+ Install Kea2 by `pip`:
73
+ ```bash
74
+ python3 -m pip install kea2-python
75
+ ```
76
+
77
+ Find Kea2's options by running
78
+ ```bash
79
+ kea2 -h
80
+ ```
81
+
82
+ ## Quick Test
83
+
84
+ Kea2 connects to and runs on Android devices. We recommend you to do a quick test to ensure that Kea2 is compatible with your devices.
85
+
86
+ 1. Connect to a real Android device or an Android emulator (only one device is enough) and make sure you can see the connected device by running `adb devices`.
87
+
88
+ 2. Run `quicktest.py` to test a sample app `omninotes` (released as `omninotes.apk` in Kea2's repository). The script `quicktest.py` will automatically install and test this sample app for a short time.
89
+
90
+ Initialize Kea2 under your preferred working directory:
91
+ ```python
92
+ kea2 init
93
+ ```
94
+
95
+ > This step is always needed if it is your first time to run Kea2.
96
+
97
+ Run the quick test:
98
+ ```python
99
+ python3 quicktest.py
100
+ ```
101
+
102
+ If you can see the app `omninotes` is successfully running and tested, Kea2 works!
103
+ Otherwise, please help [file a bug report](https://github.com/ecnusse/Kea2/issues) with the error message to us. Thank you!
104
+
105
+
106
+
107
+ ## Feature 1(运行基础版Fastbot:查找稳定性错误)
108
+
109
+ Test your app with the full capability of Fastbot for stress testing and finding *stability problems* (i.e., *crashing bugs*);
110
+
111
+
112
+ ```bash
113
+ kea2 run -s "emulator-5554" -p it.feio.android.omninotes.alpha --agent native --running-minutes 10 --throttle 200
114
+ ```
115
+
116
+ 理解上述选项含义请查看[文档](docs/manual_en.md#launching-kea2)
117
+
118
+ > The usage is similar to the the original Fastbot's [shell commands](https://github.com/bytedance/Fastbot_Android?tab=readme-ov-file#run-fastbot-with-shell-command).
119
+
120
+ See more options by
121
+ ```bash
122
+ kea2 run -h
123
+ ```
124
+
125
+ ## Feature 2(运行增强版Fastbot:自定义测试场景\事件序列\黑白控件)
126
+
127
+ When running any automated UI testing tools like Fastbot to test your apps, you may find that some specifc UI pages or functionalities are difficult to reach or cover. The reason is that Fastbot lacks knowledge of your apps. Fortunately, this is the strength of script testing. In Feature 2, Kea2 can support writing small scripts to guide Fastbot to explore wherever we want. You can also use such small scripts to block specific widgets during UI testing.
128
+
129
+ In Kea2, a script is composed of two elements:
130
+ - **Precondition:** When to execute the script.
131
+ - **Interaction scenario:** The interaction logic (specified in the script's test method) to reach where we want.
132
+
133
+ ### Simple Example
134
+
135
+ Assuming `Privacy` is a hard-to-reach UI page during automated UI testing. Kea2 can easily guide Fastbot to reach this page.
136
+
137
+ ```python
138
+ @prob(0.5)
139
+ # precondition: when we are at the page `Home`
140
+ @precondition(lambda self:
141
+ self.d(text="Home").exists
142
+ )
143
+ def test_goToPrivacy(self):
144
+ """
145
+ Guide Fastbot to the page `Privacy` by opening `Drawer`,
146
+ clicking the option `Setting` and clicking `Privacy`.
147
+ """
148
+ self.d(description="Drawer").click()
149
+ self.d(text="Settings").click()
150
+ self.d(text="Privacy").click()
151
+ ```
152
+
153
+ - By the decorator `@precondition`, we specify the precondition --- when we are at the `Home` page.
154
+ In this case, the `Home` page is the entry page of the `Privacy` page and the `Home` page can be easily reached by Fastbot. Thus, the script will be activated when we are at `Home` page by checking whether a unique widget `Home` exists.
155
+ - In script's test method `test_goToPrivacy`, we specify the interaction logic (i.e., opening `Drawer`, clicking the option `Setting` and clicking `Privacy`) to guide Fastbot to reach the `Privacy` page.
156
+ - By the decorator `@prob`, we specify the probability (50% in this example) to do the guidance when we are at the `Home` page. As a result, Kea2 still allows Fastbot to explore other pages.
157
+
158
+ You can find the full example in script `quicktest.py`, and run this script with Fastbot by the command `kea2 run`:
159
+
160
+ ```bash
161
+ # Launch Kea2 and load one single script quicktest.py.
162
+ kea2 run -s "emulator-5554" -p it.feio.android.omninotes.alpha --agent u2 --running-minutes 10 --throttle 200 --driver-name d unittest discover -p quicktest.py
163
+ ```
164
+
165
+ ## Feature 3(运行增强版Fastbot:加入自动断言)
166
+
167
+ Kea2 supports auto-assertions when running Fastbot for finding *logic bugs* (i.e., *non-crashing bugs*). To achieve this, you can add assertions in the scripts. When an assertion fails during automated UI testing, we find a likely functional bug.
168
+
169
+ In Feature 3, a script is composed of three elements:
170
+
171
+ - **Precondition:** When to execute the script.
172
+ - **Interaction scenario:** The interaction logic (specified in the script's test method).
173
+ - **Assertion:** The expected app behaviour.
174
+
175
+ ### Example
176
+
177
+ In a social media app, message sending is a common feature. On the message sending page, the `send` button should always appears when the input box is not empty (i.e., has some message).
178
+
179
+ <div align="center" >
180
+ <div >
181
+ <img src="docs/socialAppBug.png" style="border-radius: 14px; width:30%; height:40%;"/>
182
+ </div>
183
+ <p>The expected behavior (the upper figure) and the buggy behavior (the lower figure).
184
+ <p/>
185
+ </div>
186
+
187
+ For the preceding always-holding property, we can write the following script to validate the functional correctness: when there is an `input_box` widget on the message sending page, we can type any non-empty string text into the input box and assert `send_button` should always exists.
188
+
189
+
190
+ ```python
191
+ @precondition(
192
+ lambda self: self.d(description="input_box").exists
193
+ )
194
+ def test_input_box(self):
195
+ from hypothesis.strategies import text, ascii_letters
196
+ random_str = text(alphabet=ascii_letters).example()
197
+ self.d(description="input_box").set_text(random_str)
198
+ assert self.d(description="send_button").exist
199
+
200
+ # we can even do more assertions, e.g.,
201
+ # the input string should exist on the message sending page
202
+ assert self.d(text=random_str).exist
203
+ ```
204
+ > We use [hypothesis](https://github.com/HypothesisWorks/hypothesis) to generate random texts.
205
+
206
+ You can run this example by using the similar command line in Feature 2. `--take-screenshots` is recommanded to replay the functional bug.
207
+
208
+ > Notes: `--take-screenshots` will need more disk space on PC.
209
+
210
+ ```bash
211
+ # Launch Kea2 and load one single script quicktest.py.
212
+ kea2 run -s "emulator-5554" -p it.feio.android.omninotes.alpha --agent u2 --running-minutes 10 --throttle 200 --driver-name d --take-screenshots unittest discover -p quicktest.py
213
+ ```
214
+
215
+ ## Documentations(更多文档)
216
+
217
+ [更多文档](docs/manual_en.md):如何定义Kea2脚本、如何启动Kea2、如何查看/理解Kea2的运行结果
218
+
219
+ [如何黑白控件/区域](docs/blacklisting.md)
220
+
221
+ ### Open-source projects used by Kea2
222
+
223
+ - [Fastbot](https://github.com/bytedance/Fastbot_Android)
224
+ - [uiautomator2](https://github.com/openatx/uiautomator2)
225
+ - [hypothesis](https://github.com/HypothesisWorks/hypothesis)
226
+
227
+ ### Relevant papers of Kea2
228
+
229
+ > General and Practical Property-based Testing for Android Apps. ASE 2024. [pdf](https://dl.acm.org/doi/10.1145/3691620.3694986)
230
+
231
+ > An Empirical Study of Functional Bugs in Android Apps. ISSTA 2023. [pdf](https://dl.acm.org/doi/10.1145/3597926.3598138)
232
+
233
+ > Fastbot2: Reusable Automated Model-based GUI Testing for Android Enhanced by Reinforcement Learning. ASE 2022. [pdf](https://dl.acm.org/doi/10.1145/3551349.3559505)
234
+
235
+ > Guided, Stochastic Model-Based GUI Testing of Android Apps. ESEC/FSE 2017. [pdf](https://dl.acm.org/doi/10.1145/3106237.3106298)
236
+
237
+ ### Maintainers/Contributors
238
+
239
+ Kea2 has been actively developed and maintained by the people in [ecnusse](https://github.com/ecnusse):
240
+
241
+ - [Xixian Liang](https://xixianliang.github.io/resume/) ([@XixianLiang][])
242
+ - Bo Ma ([@majuzi123][])
243
+ - Chen Peng ([@Drifterpc][])
244
+ - [Ting Su](https://tingsu.github.io/) ([@tingsu][])
245
+
246
+ [@XixianLiang]: https://github.com/XixianLiang
247
+ [@majuzi123]: https://github.com/majuzi123
248
+ [@Drifterpc]: https://github.com/Drifterpc
249
+ [@tingsu]: https://github.com/tingsu
250
+
251
+ [Zhendong Su](https://people.inf.ethz.ch/suz/), [Yiheng Xiong](https://xyiheng.github.io/), [Xiangchen Shen](https://xiangchenshen.github.io/), [Mengqian Xu](https://mengqianx.github.io/), [Haiying Sun](https://faculty.ecnu.edu.cn/_s43/shy/main.psp), [Jingling Sun](https://jinglingsun.github.io/), [Jue Wang](https://cv.juewang.info/) have also been actively participated in this project and contributed a lot!
252
+
253
+ Kea2 has also received many valuable insights, advices, feedbacks and lessons shared by several industrial people from Bytedance ([Zhao Zhang](https://github.com/zhangzhao4444), Yuhui Su from the Fastbot team), OPay (Tiesong Liu), WeChat (Haochuan Lu, Yuetang Deng), Huawei, Xiaomi and etc. Kudos!
254
+
255
+ [^1]: 不少UI自动化测试工具提供了“自定义事件序列”能力(如[Fastbot](https://github.com/bytedance/Fastbot_Android/blob/main/handbook-cn.md#%E8%87%AA%E5%AE%9A%E4%B9%89%E4%BA%8B%E4%BB%B6%E5%BA%8F%E5%88%97) 和[AppCrawler](https://github.com/seveniruby/AppCrawler)),但在实际使用中存在不少问题,如自定义能力有限、使用不灵活等。此前不少Fastbot用户抱怨过其“自定义事件序列”在使用中的问题,如[#209](https://github.com/bytedance/Fastbot_Android/issues/209), [#225](https://github.com/bytedance/Fastbot_Android/issues/225), [#286](https://github.com/bytedance/Fastbot_Android/issues/286)等。
256
+
257
+ [^2]: 在UI自动化测试过程中支持自动断言是一个很重要的能力,但几乎没有测试工具提供这样的能力。我们注意到[AppCrawler](https://ceshiren.com/t/topic/15801/5)的开发者曾经希望提供一种断言机制,得到了用户的热切响应,不少用户从21年就开始催更,但始终未能实现。
@@ -1,17 +1,17 @@
1
- kea2/__init__.py,sha256=QW4OVa1NHcX-DxC7Nr-ozo1G1wxfARnRh63bB08a1Yw,132
1
+ kea2/__init__.py,sha256=JFJjqgf5KB4bXUFQ3upkEug0cFMFIk9p3OHV9vzulHw,75
2
2
  kea2/absDriver.py,sha256=X99d-OP77EIiDwTLvWVkgDUtqscoxmWeOb-EcaOPWGI,1294
3
- kea2/adbUtils.py,sha256=4XhHTXLsHaBYWfq3jLcE7DCzO7hwQHKTn0nJoGX2PS4,9911
3
+ kea2/adbUtils.py,sha256=j6goAAzV1Ikmv26DZEE0Oi8S1PrejcV1Io3u_Xw4ws4,9910
4
4
  kea2/cli.py,sha256=YgWOe5JB0_WBTKyBShBEymhLIqj6K5gNR4Aaj6Pbtn0,2796
5
- kea2/keaUtils.py,sha256=cpHLFhtY009OBmtu2ZoSNs5sETogUprS9zE5OD0s0nc,22972
6
- kea2/kea_launcher.py,sha256=l1qVaf7SktBUbUiPbbCin9aPKvJ2me5jBR_qwdF1L2Q,4528
7
- kea2/logWatcher.py,sha256=hd8banPiCa6aCQ6d_MznWKOdzK_A2X_dPbrx-usjxgE,1927
8
- kea2/u2Driver.py,sha256=YQEq8XEXpxC5QqfyZkayL4LSofTl8VOoendCqdSIrhQ,11063
9
- kea2/utils.py,sha256=zjuoVwts2qVX9GnTaPoiqarfcSvyfW6cAD3ESf_dmrQ,1284
5
+ kea2/keaUtils.py,sha256=iV82-aUB8Wc0VkIUTDAk2lxsfr-RAABzTcb0igQYXbo,27037
6
+ kea2/kea_launcher.py,sha256=Kj49TBJ8aRRJQI24y3vwbBMyTenJpL1HAqgv4ETRT9E,4986
7
+ kea2/logWatcher.py,sha256=RQp9b6yF24Vh6_dUgx-nrSjiz-mP4uXjyVz7_HfYQ28,2029
8
+ kea2/resultSyncer.py,sha256=f3qfne8WQCo1AA3cwx9IZzLdenjjMWbEpAqPdvddAqk,1984
9
+ kea2/u2Driver.py,sha256=1uViwhQAkBFu69XFR5i8dSgG8SL3v7wZ68-t0E0Xlpw,14876
10
+ kea2/utils.py,sha256=bLS8SokdLffOnRrncDn6JBNrnYzAQ-pIOsE4uLirwbA,1374
10
11
  kea2/assets/fastbot-thirdpart.jar,sha256=0SZ_OoZFWDGMnazgXKceHgKvXdUDoIa3Gb2bcifaikk,85664
11
12
  kea2/assets/framework.jar,sha256=rTluOJJKj2DFwh7ascXso1udYdWv00BxBwSQ3Vmv-fw,1149240
12
- kea2/assets/monkeyq.jar,sha256=04Tyl0a3-u2hZFeSBGiznBGX_yO_EVR3gq-krM_3FBc,461177
13
+ kea2/assets/monkeyq.jar,sha256=6eio4sDwd9F2w0CTwROP7RmbbC1a6ghVKKljxVE8w4g,463163
13
14
  kea2/assets/quicktest.py,sha256=j-fIryvspXObaNm3kWzgM0LMFes4h7EXT5C9xUWGUVo,2887
14
- kea2/assets/u2.jar,sha256=G9fFf-AZ0CdaZrk27V1-pfJE2Y5eO6PRzPShTnIe-U8,3746525
15
15
  kea2/assets/fastbot_configs/abl.strings,sha256=Rn8_YEbVGOJqndIY_-kWnR5NaoFI-cuB-ij10Ddhl90,75
16
16
  kea2/assets/fastbot_configs/awl.strings,sha256=-j4980GoWQxGOM9ijAwXPQmziCwFBZJFmuiv2tOEaYI,101
17
17
  kea2/assets/fastbot_configs/max.config,sha256=rBgR4mdgBzqVPQ2lZaXqx2WN6tDzhe-FNizm4Y7tyA8,226
@@ -19,14 +19,14 @@ kea2/assets/fastbot_configs/max.fuzzing.strings,sha256=_3bNHwgzlISgxB7RmMury5X3q
19
19
  kea2/assets/fastbot_configs/max.schema.strings,sha256=zYupzvmTtnbPYomI2UCPk0s6PE97t94myZU_j3HutRM,40
20
20
  kea2/assets/fastbot_configs/max.strings,sha256=k82GAAZZG7KbDI7bk7DUklp41WJJO7j-j8Ss1BcybUw,32
21
21
  kea2/assets/fastbot_configs/max.tree.pruning,sha256=dm0oesN75FFbVSkV7STDUmrNMpQUBEuO7Uymt6nEkBc,629
22
- kea2/assets/fastbot_configs/widget.block.py,sha256=DUcN88EPt3vLukvnEWhFdG347uc5L_W-JoSJ3716uBk,506
22
+ kea2/assets/fastbot_configs/widget.block.py,sha256=r9Njm2xSBls3GMDIHTPMdmlFRiOjJWuVsq2KiieWFXA,1272
23
23
  kea2/assets/fastbot_libs/arm64-v8a/libfastbot_native.so,sha256=dA2Tf74-gDrCFdeClsf7qZAy0RqDZQOLlBZ-FViuorw,2005832
24
24
  kea2/assets/fastbot_libs/armeabi-v7a/libfastbot_native.so,sha256=GWcL8M8WfQAd9CfOM6pRYbOnxeycN-LiL7Mf59YIadE,1334420
25
25
  kea2/assets/fastbot_libs/x86/libfastbot_native.so,sha256=k-aw1gEXRWMKZRNHIggKNuZy0wC1y2BnveJGEIO6rbo,2036856
26
26
  kea2/assets/fastbot_libs/x86_64/libfastbot_native.so,sha256=tiofhlf4uMQcU5WAvrdLgTBME0lb83hVUoGtTwxmE8A,2121416
27
- kea2_python-0.0.1b2.dist-info/licenses/LICENSE,sha256=nM9PPjcsXVo5SzNsjRqWgA-gdJlwqZZcRDSC6Qf6bVE,2034
28
- kea2_python-0.0.1b2.dist-info/METADATA,sha256=dsRT9uNb_tQP_wVkiYvPCkorsu773o37pyb-4O3NwvU,22754
29
- kea2_python-0.0.1b2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
30
- kea2_python-0.0.1b2.dist-info/entry_points.txt,sha256=mFX06TyxXiUAJQ6JZn8QHzfn8n5R8_KJ5W-pTm_fRCA,39
31
- kea2_python-0.0.1b2.dist-info/top_level.txt,sha256=TsgNH4PQoNOVhegpO7AcjutMVWp6Z4KDL1pBH9FnMmk,5
32
- kea2_python-0.0.1b2.dist-info/RECORD,,
27
+ kea2_python-0.1.0b0.dist-info/licenses/LICENSE,sha256=nM9PPjcsXVo5SzNsjRqWgA-gdJlwqZZcRDSC6Qf6bVE,2034
28
+ kea2_python-0.1.0b0.dist-info/METADATA,sha256=akhVwN64y8HfDVvuifnxasVIqgMZgE-BqXx_Yar7Hfo,13356
29
+ kea2_python-0.1.0b0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
30
+ kea2_python-0.1.0b0.dist-info/entry_points.txt,sha256=mFX06TyxXiUAJQ6JZn8QHzfn8n5R8_KJ5W-pTm_fRCA,39
31
+ kea2_python-0.1.0b0.dist-info/top_level.txt,sha256=TsgNH4PQoNOVhegpO7AcjutMVWp6Z4KDL1pBH9FnMmk,5
32
+ kea2_python-0.1.0b0.dist-info/RECORD,,
kea2/assets/u2.jar DELETED
Binary file