Kea2-python 0.0.1a0__py3-none-any.whl → 0.0.1a2__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/assets/fastbot_configs/widget.block.py +14 -18
- kea2/assets/monkeyq.jar +0 -0
- kea2/assets/quickstart.py +9 -1
- kea2/cli.py +18 -13
- kea2/keaUtils.py +24 -7
- kea2/kea_launcher.py +19 -11
- kea2/u2Driver.py +14 -4
- {kea2_python-0.0.1a0.dist-info → kea2_python-0.0.1a2.dist-info}/METADATA +17 -57
- {kea2_python-0.0.1a0.dist-info → kea2_python-0.0.1a2.dist-info}/RECORD +13 -13
- {kea2_python-0.0.1a0.dist-info → kea2_python-0.0.1a2.dist-info}/WHEEL +1 -1
- {kea2_python-0.0.1a0.dist-info → kea2_python-0.0.1a2.dist-info}/entry_points.txt +0 -0
- {kea2_python-0.0.1a0.dist-info → kea2_python-0.0.1a2.dist-info}/licenses/LICENSE +0 -0
- {kea2_python-0.0.1a0.dist-info → kea2_python-0.0.1a2.dist-info}/top_level.txt +0 -0
|
@@ -1,22 +1,18 @@
|
|
|
1
|
-
from kea2.utils import
|
|
2
|
-
from
|
|
1
|
+
from kea2.utils import Device
|
|
2
|
+
from kea2.keaUtils import precondition
|
|
3
3
|
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
5
|
+
def global_block_widgets(d: "Device"):
|
|
6
|
+
"""
|
|
7
|
+
global block widgets.
|
|
8
|
+
return the widgets you want to block globally
|
|
9
|
+
only available in mode `u2 agent`
|
|
10
|
+
"""
|
|
11
|
+
return []
|
|
10
12
|
|
|
11
13
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
d
|
|
17
|
-
blocked_widgets = func(d)
|
|
18
|
-
if isinstance(blocked_widgets, u2.UiObject):
|
|
19
|
-
blocked_widgets = [blocked_widgets]
|
|
20
|
-
if not all([isinstance(w, u2.UiObject) for w in blocked_widgets]):
|
|
21
|
-
raise TypeError(f"Invalid widgets block list in {sample_block_list}")
|
|
22
|
-
|
|
14
|
+
# conditional block list
|
|
15
|
+
@precondition(lambda d: d(text="In the home page").exists)
|
|
16
|
+
def block_sth(d: "Device"):
|
|
17
|
+
# Important: function shold starts with "block"
|
|
18
|
+
return [d(text="widgets to block"), d.xpath(".//node[@text='widget to block']")]
|
kea2/assets/monkeyq.jar
CHANGED
|
Binary file
|
kea2/assets/quickstart.py
CHANGED
|
@@ -73,7 +73,15 @@ def check_installation():
|
|
|
73
73
|
d.stop_uiautomator()
|
|
74
74
|
|
|
75
75
|
|
|
76
|
+
def _get_agent():
|
|
77
|
+
import sys
|
|
78
|
+
if len(sys.argv) == 0 or sys.argv[1] == "u2":
|
|
79
|
+
return "u2"
|
|
80
|
+
return "native"
|
|
81
|
+
|
|
76
82
|
if __name__ == "__main__":
|
|
83
|
+
|
|
84
|
+
AGENT=_get_agent()
|
|
77
85
|
check_installation()
|
|
78
86
|
KeaTestRunner.setOptions(
|
|
79
87
|
Options(
|
|
@@ -84,7 +92,7 @@ if __name__ == "__main__":
|
|
|
84
92
|
maxStep=5000,
|
|
85
93
|
# running_mins=10, # specify the maximal running time in minutes, default value is 10m
|
|
86
94
|
# throttle=200, # specify the throttle in milliseconds, default value is 200ms
|
|
87
|
-
|
|
95
|
+
agent=AGENT # 'native' for running the vanilla Fastbot, 'u2' for running Kea2
|
|
88
96
|
)
|
|
89
97
|
)
|
|
90
98
|
unittest.main(testRunner=KeaTestRunner)
|
kea2/cli.py
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
# cli.py
|
|
3
3
|
|
|
4
4
|
from __future__ import absolute_import, print_function
|
|
5
|
+
import sys
|
|
5
6
|
from kea2.utils import getProjectRoot, getLogger
|
|
6
7
|
from .kea_launcher import run
|
|
7
8
|
import argparse
|
|
@@ -43,9 +44,7 @@ def cmd_run(args):
|
|
|
43
44
|
if base_dir is None:
|
|
44
45
|
logger.error("kea2 project not initialized. Use `kea2 init`.")
|
|
45
46
|
return
|
|
46
|
-
|
|
47
|
-
argv.extend(args.args)
|
|
48
|
-
run(argv)
|
|
47
|
+
run(args)
|
|
49
48
|
|
|
50
49
|
|
|
51
50
|
def cmd_install(args):
|
|
@@ -83,14 +82,14 @@ _commands = [
|
|
|
83
82
|
command="init",
|
|
84
83
|
help="init the Kea2 project in current directory",
|
|
85
84
|
),
|
|
86
|
-
dict(
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
),
|
|
85
|
+
# dict(
|
|
86
|
+
# action=cmd_run,
|
|
87
|
+
# command="run",
|
|
88
|
+
# help="run kea2",
|
|
89
|
+
# flags=[
|
|
90
|
+
# dict(args=["args"], nargs=argparse.REMAINDER),
|
|
91
|
+
# ],
|
|
92
|
+
# ),
|
|
94
93
|
# dict(
|
|
95
94
|
# action=cmd_install,
|
|
96
95
|
# command="",
|
|
@@ -157,11 +156,17 @@ def main():
|
|
|
157
156
|
kwargs.pop('args', None)
|
|
158
157
|
sp.add_argument(*args, **kwargs)
|
|
159
158
|
|
|
159
|
+
from .kea_launcher import _set_driver_parser
|
|
160
|
+
_set_driver_parser(subparser)
|
|
161
|
+
actions["run"] = cmd_run
|
|
162
|
+
if sys.argv[1:] == ["run"]:
|
|
163
|
+
sys.argv.append("-h")
|
|
160
164
|
args = parser.parse_args()
|
|
161
|
-
|
|
162
165
|
|
|
166
|
+
import logging
|
|
167
|
+
logging.getLogger("urllib3").setLevel(logging.INFO)
|
|
168
|
+
logging.getLogger("uiautomator2").setLevel(logging.INFO)
|
|
163
169
|
if args.debug:
|
|
164
|
-
import logging
|
|
165
170
|
logging.basicConfig(level=logging.DEBUG)
|
|
166
171
|
logger.debug("args: %s", args)
|
|
167
172
|
|
kea2/keaUtils.py
CHANGED
|
@@ -15,6 +15,8 @@ from time import sleep
|
|
|
15
15
|
from .adbUtils import push_file
|
|
16
16
|
from .logWatcher import LogWatcher
|
|
17
17
|
from .utils import TimeStamp, getProjectRoot, getLogger
|
|
18
|
+
from .u2Driver import StaticU2UiObject
|
|
19
|
+
import uiautomator2 as u2
|
|
18
20
|
import types
|
|
19
21
|
PRECONDITIONS_MARKER = "preconds"
|
|
20
22
|
PROP_MARKER = "prop"
|
|
@@ -404,8 +406,14 @@ class KeaTestRunner(TextTestRunner):
|
|
|
404
406
|
"""
|
|
405
407
|
send a step monkey request to the server and get the xml string.
|
|
406
408
|
"""
|
|
407
|
-
block_widgets = self._getBlockedWidgets()
|
|
408
|
-
|
|
409
|
+
block_widgets: List[str] = self._getBlockedWidgets()
|
|
410
|
+
URL = f"http://localhost:{self.scriptDriver.lport}/stepMonkey"
|
|
411
|
+
r = requests.post(
|
|
412
|
+
url=URL,
|
|
413
|
+
json={
|
|
414
|
+
"block_widgets": block_widgets
|
|
415
|
+
}
|
|
416
|
+
)
|
|
409
417
|
|
|
410
418
|
res = json.loads(r.content)
|
|
411
419
|
xml_raw = res["result"]
|
|
@@ -479,7 +487,7 @@ class KeaTestRunner(TextTestRunner):
|
|
|
479
487
|
print(f"[INFO] Load property: {getFullPropName(t)}", flush=True)
|
|
480
488
|
|
|
481
489
|
@property
|
|
482
|
-
def
|
|
490
|
+
def _blockWidgetFuncs(self):
|
|
483
491
|
if self._block_widgets_funcs is None:
|
|
484
492
|
self._block_widgets_funcs = list()
|
|
485
493
|
root_dir = getProjectRoot()
|
|
@@ -512,7 +520,7 @@ class KeaTestRunner(TextTestRunner):
|
|
|
512
520
|
|
|
513
521
|
def _getBlockedWidgets(self):
|
|
514
522
|
blocked_widgets = list()
|
|
515
|
-
for func in self.
|
|
523
|
+
for func in self._blockWidgetFuncs:
|
|
516
524
|
try:
|
|
517
525
|
script_driver = self.options.Driver.getScriptDriver()
|
|
518
526
|
preconds = getattr(func, PRECONDITIONS_MARKER)
|
|
@@ -520,9 +528,18 @@ class KeaTestRunner(TextTestRunner):
|
|
|
520
528
|
_widgets = func(self.options.Driver.getStaticChecker())
|
|
521
529
|
if not isinstance(_widgets, list):
|
|
522
530
|
_widgets = [_widgets]
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
531
|
+
for w in _widgets:
|
|
532
|
+
if isinstance(w, StaticU2UiObject):
|
|
533
|
+
blocked_widgets.append(w._getXPath(w.selector))
|
|
534
|
+
elif isinstance(w, u2.xpath.XPathSelector):
|
|
535
|
+
def getXPathRepr(w):
|
|
536
|
+
return w._parent.xpath
|
|
537
|
+
blocked_widgets.append(getXPathRepr(w))
|
|
538
|
+
else:
|
|
539
|
+
logger.warning(f"{w} Not supported")
|
|
540
|
+
# blocked_widgets.extend([
|
|
541
|
+
# w._getXPath(w.selector) for w in _widgets
|
|
542
|
+
# ])
|
|
526
543
|
except Exception as e:
|
|
527
544
|
logger.error(f"error when getting blocked widgets: {e}")
|
|
528
545
|
import traceback
|
kea2/kea_launcher.py
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import sys
|
|
1
2
|
import argparse
|
|
2
|
-
from typing import List
|
|
3
3
|
import unittest
|
|
4
|
+
from typing import List
|
|
4
5
|
|
|
5
6
|
def _set_driver_parser(subparsers: "argparse._SubParsersAction[argparse.ArgumentParser]"):
|
|
6
|
-
parser = subparsers.add_parser("
|
|
7
|
+
parser = subparsers.add_parser("run", help="run kea2")
|
|
7
8
|
parser.add_argument(
|
|
8
9
|
"-s",
|
|
9
10
|
"--serial",
|
|
@@ -96,21 +97,28 @@ def parse_args(argv: List):
|
|
|
96
97
|
subparsers = parser.add_subparsers(dest="command", required=True)
|
|
97
98
|
|
|
98
99
|
_set_driver_parser(subparsers)
|
|
99
|
-
if len(argv) == 0:
|
|
100
|
-
argv.append("-h")
|
|
101
100
|
args = parser.parse_args(argv)
|
|
102
|
-
driver_info_logger(args)
|
|
103
|
-
unittest_info_logger(args)
|
|
104
101
|
return args
|
|
105
102
|
|
|
106
|
-
def
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
103
|
+
def _sanitize_args(args):
|
|
104
|
+
if args.agent == "u2" and not args.driver_name:
|
|
105
|
+
if args.extra == []:
|
|
106
|
+
args.driver_name = "d"
|
|
107
|
+
else:
|
|
108
|
+
raise ValueError("--driver-name should be specified when customizing script in --agent u2")
|
|
109
|
+
|
|
110
|
+
def run(args=None):
|
|
111
|
+
if args is None:
|
|
112
|
+
args = parse_args(sys.argv[1:])
|
|
113
|
+
|
|
114
|
+
_sanitize_args(args)
|
|
115
|
+
|
|
116
|
+
driver_info_logger(args)
|
|
117
|
+
unittest_info_logger(args)
|
|
111
118
|
|
|
112
119
|
from kea2 import KeaTestRunner, Options
|
|
113
120
|
from kea2.u2Driver import U2Driver
|
|
121
|
+
U2Driver.setDeviceSerial(args.serial)
|
|
114
122
|
options = Options(
|
|
115
123
|
agent=args.agent,
|
|
116
124
|
driverName=args.driver_name,
|
kea2/u2Driver.py
CHANGED
|
@@ -85,7 +85,8 @@ class StaticU2UiObject(u2.UiObject):
|
|
|
85
85
|
|
|
86
86
|
def _transferU2Keys(self, originKey):
|
|
87
87
|
filterDict = {
|
|
88
|
-
"resourceId": "resource-id"
|
|
88
|
+
"resourceId": "resource-id",
|
|
89
|
+
"description": "content-desc"
|
|
89
90
|
}
|
|
90
91
|
if filterDict.get(originKey, None):
|
|
91
92
|
return filterDict[originKey]
|
|
@@ -116,7 +117,7 @@ class StaticU2UiObject(u2.UiObject):
|
|
|
116
117
|
|
|
117
118
|
@property
|
|
118
119
|
def exists(self):
|
|
119
|
-
self.selector
|
|
120
|
+
dict.update(self.selector, {"covered": "true"})
|
|
120
121
|
xpath = self._getXPath(self.selector)
|
|
121
122
|
matched_widgets = self.session.xml.xpath(xpath)
|
|
122
123
|
return bool(matched_widgets)
|
|
@@ -124,7 +125,7 @@ class StaticU2UiObject(u2.UiObject):
|
|
|
124
125
|
def __len__(self):
|
|
125
126
|
xpath = self._getXPath(self.selector)
|
|
126
127
|
matched_widgets = self.session.xml.xpath(xpath)
|
|
127
|
-
return len(matched_widgets)
|
|
128
|
+
return len(matched_widgets)
|
|
128
129
|
|
|
129
130
|
|
|
130
131
|
def _get_bounds(raw_bounds):
|
|
@@ -216,12 +217,21 @@ class U2StaticDevice(u2.Device):
|
|
|
216
217
|
def get_page_source(self):
|
|
217
218
|
# print("[Debug] Using static get_page_source method")
|
|
218
219
|
return u2.xpath.PageSource.parse(self._d.xml_raw)
|
|
219
|
-
xpathEntry =
|
|
220
|
+
xpathEntry = _XPathEntry(self)
|
|
220
221
|
xpathEntry.get_page_source = types.MethodType(
|
|
221
222
|
get_page_source, xpathEntry
|
|
222
223
|
)
|
|
223
224
|
return xpathEntry
|
|
224
225
|
|
|
226
|
+
class _XPathEntry(u2.xpath.XPathEntry):
|
|
227
|
+
def __init__(self, d):
|
|
228
|
+
self.xpath = None
|
|
229
|
+
super().__init__(d)
|
|
230
|
+
|
|
231
|
+
def __call__(self, xpath, source = None):
|
|
232
|
+
self.xpath = xpath
|
|
233
|
+
return super().__call__(xpath, source)
|
|
234
|
+
|
|
225
235
|
|
|
226
236
|
class U2StaticChecker(AbstractStaticChecker):
|
|
227
237
|
"""
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: Kea2-python
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.1a2
|
|
4
4
|
Summary: A python library for supporting and customizing automated UI testing for mobile apps
|
|
5
5
|
Author-email: Xixian Liang <xixian@stu.ecnu.edu.cn>
|
|
6
6
|
Requires-Python: >=3.9
|
|
@@ -48,59 +48,20 @@ In the future, Kea2 will be extended to support
|
|
|
48
48
|
|
|
49
49
|
> Kea2 is inspired by many valuable insights, advices and lessons shared by experienced industrial practitioners from Bytedance (Zhao Zhang, Yuhui Su from the Fastbot team), OPay (Tiesong Liu), WeChat (Haochuan Lu), Huawei, Xiaomi and etc. Kudos!
|
|
50
50
|
|
|
51
|
-
|
|
52
|
-
# Deploy Kea2
|
|
53
|
-
|
|
54
51
|
## Installation
|
|
55
52
|
|
|
56
53
|
Running requirements/environment:
|
|
57
54
|
- support Windows, MacOS and Linux
|
|
58
|
-
- python 3.
|
|
55
|
+
- python 3.9+
|
|
59
56
|
- Android SDK installed
|
|
60
57
|
- **VPN closed** (Features 2 and 3 required)
|
|
61
58
|
|
|
62
|
-
1. Clone `Kea2` into your workspace.
|
|
63
|
-
|
|
64
|
-
```bash
|
|
65
|
-
git clone git@github.com:ecnusse/Kea2.git
|
|
66
|
-
cd Kea2
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
2. Setup the python virtual environment with `uv`.
|
|
70
|
-
|
|
71
|
-
> [uv](https://github.com/astral-sh/uv) is a extremely fast python package and project manager. We use `uv` to create a python virtual environment for Kea2 to avoid any dependency issues or conflicts with your existing python environment.
|
|
72
|
-
`uv` is similar to `virtualenv` but much more powerful.
|
|
73
|
-
Of course, you can also setup Kea2 in your [global environment](https://github.com/ecnusse/Kea2/tree/dev?tab=readme-ov-file#appendix-install-kea2-in-a-global-environment).
|
|
74
|
-
|
|
75
59
|
```bash
|
|
76
|
-
pip install
|
|
77
|
-
pip install uv
|
|
78
|
-
uv sync
|
|
79
|
-
```
|
|
60
|
+
python3 -m pip install Kea2-python
|
|
80
61
|
|
|
81
|
-
|
|
82
|
-
```bash
|
|
83
|
-
# For macOS users
|
|
84
|
-
brew install uv
|
|
85
|
-
uv sync
|
|
62
|
+
kea2 -h
|
|
86
63
|
```
|
|
87
64
|
|
|
88
|
-
3. Activate virtual environment
|
|
89
|
-
|
|
90
|
-
- Linux and macOS
|
|
91
|
-
```bash
|
|
92
|
-
source .venv/bin/activate
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
- Windows cmd
|
|
96
|
-
```cmd
|
|
97
|
-
\.venv\Scripts\activate.bat
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
- Windows powershell
|
|
101
|
-
```powershell
|
|
102
|
-
\.venv\Scripts\activate.ps1
|
|
103
|
-
```
|
|
104
65
|
|
|
105
66
|
## Quick Test
|
|
106
67
|
|
|
@@ -111,7 +72,8 @@ Kea2 connects to and runs on Android devices. We recommend you to do a quick tes
|
|
|
111
72
|
2. Run `quickstart.py` to test a sample app `omninotes` (released as `omninotes.apk` in Kea2's repository). The script `quickstart.py` will automatically install and test this sample app for a short time.
|
|
112
73
|
|
|
113
74
|
```python
|
|
114
|
-
|
|
75
|
+
kea2 init
|
|
76
|
+
python3 quickstart.py native
|
|
115
77
|
```
|
|
116
78
|
|
|
117
79
|
If you can see the app `omninotes` is successfully running and tested, Kea2 works. Otherwise, please help [file a bug report](https://github.com/ecnusse/Kea2/issues) with the error message to us. Thank you!
|
|
@@ -133,7 +95,7 @@ Test your app with the full capability of [Fastbot](https://github.com/bytedance
|
|
|
133
95
|
|
|
134
96
|
|
|
135
97
|
```bash
|
|
136
|
-
|
|
98
|
+
kea2 run -s "emulator-5554" -p it.feio.android.omninotes.alpha --agent native --running-minutes 10 --throttle 200
|
|
137
99
|
```
|
|
138
100
|
|
|
139
101
|
The usage is similar to the the original [Fastbot](https://github.com/bytedance/Fastbot_Android?tab=readme-ov-file#run-fastbot-with-shell-command)'s shell commands.
|
|
@@ -185,19 +147,17 @@ In this case, the `Home` page is the entry page of the `Privacy` page and the `H
|
|
|
185
147
|
- 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.
|
|
186
148
|
- 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.
|
|
187
149
|
|
|
188
|
-
You can find the full example in script `
|
|
150
|
+
You can find the full example in script `quickstart.py` and run it by executing:
|
|
189
151
|
|
|
152
|
+
```python
|
|
153
|
+
python3 quickstart.py u2
|
|
154
|
+
```
|
|
190
155
|
|
|
191
156
|
```bash
|
|
192
|
-
# Launch Kea2 and load one single script
|
|
193
|
-
|
|
157
|
+
# Launch Kea2 and load one single script quickstart.py.
|
|
158
|
+
kea2 run -s "emulator-5554" -p it.feio.android.omninotes.alpha --agent u2 --running-minutes 10 --throttle 200 --driver-name d unittest quickstart.py
|
|
194
159
|
```
|
|
195
160
|
|
|
196
|
-
or simply run:
|
|
197
|
-
|
|
198
|
-
```python
|
|
199
|
-
python3 quickstart2.py
|
|
200
|
-
```
|
|
201
161
|
|
|
202
162
|
|
|
203
163
|
|
|
@@ -294,21 +254,21 @@ We offer two ways to launch Kea2.
|
|
|
294
254
|
|
|
295
255
|
### 1. Launch by shell commands
|
|
296
256
|
|
|
297
|
-
Kea2 is compatible with `unittest` framework. You can manage your test cases in unittest style. You can launch Kea2 with `
|
|
257
|
+
Kea2 is compatible with `unittest` framework. You can manage your test cases in unittest style. You can launch Kea2 with `kea run` with driver options and sub-command `unittest` (for unittest options).
|
|
298
258
|
|
|
299
259
|
The shell command:
|
|
300
260
|
```
|
|
301
|
-
|
|
261
|
+
kea2 run <Kea2 cmds> unittest <unittest cmds>
|
|
302
262
|
```
|
|
303
263
|
|
|
304
264
|
Sample shell commands:
|
|
305
265
|
|
|
306
266
|
```bash
|
|
307
267
|
# Launch Kea2 and load one single script quickstart.py.
|
|
308
|
-
|
|
268
|
+
kea2 run -s "emulator-5554" -p it.feio.android.omninotes.alpha --agent u2 --running-minutes 10 --throttle 200 --driver-name d unittest quickstart.py
|
|
309
269
|
|
|
310
270
|
# Launch Kea2 and load multiple scripts from the directory mytests/omni_notes
|
|
311
|
-
|
|
271
|
+
kea2 run -s "emulator-5554" -p it.feio.android.omninotes.alpha --agent u2 --running-minutes 10 --throttle 200 --driver-name d unittest discover -s mytests/omni_notes
|
|
312
272
|
```
|
|
313
273
|
|
|
314
274
|
| arg | meaning |
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
kea2/__init__.py,sha256=_IFDiyzb6OLyhjldBXrAol6OpOijTnJ2LYWMK4TqSno,121
|
|
2
2
|
kea2/absDriver.py,sha256=1vXTkPqhhIosT8KpS6pwi7XKjNZTOuSb7mczhS_tMoQ,648
|
|
3
3
|
kea2/adbUtils.py,sha256=IV-5G_3mc89YP1NJZJIWUrgxb13QECGGXTTANkGH_Rk,8986
|
|
4
|
-
kea2/cli.py,sha256=
|
|
5
|
-
kea2/keaUtils.py,sha256=
|
|
6
|
-
kea2/kea_launcher.py,sha256=
|
|
4
|
+
kea2/cli.py,sha256=yTBmWUKi0onIWATV5uccwnItySwxFFUtewOiBEjQZAs,4466
|
|
5
|
+
kea2/keaUtils.py,sha256=KF00-qf_R8-hk221uKJJi64TdOOKnSINeQrVWKzCN3Y,19452
|
|
6
|
+
kea2/kea_launcher.py,sha256=pBjV3Hxv3Sh9MXiV50Afahcb3ebgoY0JQhRTCekOMRU,3916
|
|
7
7
|
kea2/logWatcher.py,sha256=hd8banPiCa6aCQ6d_MznWKOdzK_A2X_dPbrx-usjxgE,1927
|
|
8
|
-
kea2/u2Driver.py,sha256=
|
|
8
|
+
kea2/u2Driver.py,sha256=dfvSapHL9LMyiSlFUCZMNI-G5usapqzGvaFu_lWv-s0,10193
|
|
9
9
|
kea2/utils.py,sha256=zjuoVwts2qVX9GnTaPoiqarfcSvyfW6cAD3ESf_dmrQ,1284
|
|
10
10
|
kea2/assets/fastbot-thirdpart.jar,sha256=0SZ_OoZFWDGMnazgXKceHgKvXdUDoIa3Gb2bcifaikk,85664
|
|
11
11
|
kea2/assets/framework.jar,sha256=rTluOJJKj2DFwh7ascXso1udYdWv00BxBwSQ3Vmv-fw,1149240
|
|
12
|
-
kea2/assets/monkeyq.jar,sha256=
|
|
13
|
-
kea2/assets/quickstart.py,sha256=
|
|
12
|
+
kea2/assets/monkeyq.jar,sha256=TjszvflvE59ev9RhVhkfS_0L46VYZbL2wvpKRyA8ZMk,460366
|
|
13
|
+
kea2/assets/quickstart.py,sha256=UeX_SIi_iEN9lzqit7dR1vSxA57fQ9ioCsBOSfzmkCY,3012
|
|
14
14
|
kea2/assets/u2.jar,sha256=G9fFf-AZ0CdaZrk27V1-pfJE2Y5eO6PRzPShTnIe-U8,3746525
|
|
15
15
|
kea2/assets/fastbot_configs/ADBKeyBoard.apk,sha256=L3Kva4gCQALo10EzinCvHrIbffGE3p94qSNbnS8CxP0,163634
|
|
16
16
|
kea2/assets/fastbot_configs/abl.strings,sha256=Rn8_YEbVGOJqndIY_-kWnR5NaoFI-cuB-ij10Ddhl90,75
|
|
@@ -20,14 +20,14 @@ kea2/assets/fastbot_configs/max.fuzzing.strings,sha256=_3bNHwgzlISgxB7RmMury5X3q
|
|
|
20
20
|
kea2/assets/fastbot_configs/max.schema.strings,sha256=zYupzvmTtnbPYomI2UCPk0s6PE97t94myZU_j3HutRM,40
|
|
21
21
|
kea2/assets/fastbot_configs/max.strings,sha256=k82GAAZZG7KbDI7bk7DUklp41WJJO7j-j8Ss1BcybUw,32
|
|
22
22
|
kea2/assets/fastbot_configs/max.tree.pruning,sha256=dm0oesN75FFbVSkV7STDUmrNMpQUBEuO7Uymt6nEkBc,629
|
|
23
|
-
kea2/assets/fastbot_configs/widget.block.py,sha256=
|
|
23
|
+
kea2/assets/fastbot_configs/widget.block.py,sha256=xNlC3UwKgff3Cevg6dvzeu8nfEhhVm8CtvwLjsOkuXk,505
|
|
24
24
|
kea2/assets/fastbot_libs/arm64-v8a/libfastbot_native.so,sha256=dA2Tf74-gDrCFdeClsf7qZAy0RqDZQOLlBZ-FViuorw,2005832
|
|
25
25
|
kea2/assets/fastbot_libs/armeabi-v7a/libfastbot_native.so,sha256=GWcL8M8WfQAd9CfOM6pRYbOnxeycN-LiL7Mf59YIadE,1334420
|
|
26
26
|
kea2/assets/fastbot_libs/x86/libfastbot_native.so,sha256=k-aw1gEXRWMKZRNHIggKNuZy0wC1y2BnveJGEIO6rbo,2036856
|
|
27
27
|
kea2/assets/fastbot_libs/x86_64/libfastbot_native.so,sha256=tiofhlf4uMQcU5WAvrdLgTBME0lb83hVUoGtTwxmE8A,2121416
|
|
28
|
-
kea2_python-0.0.
|
|
29
|
-
kea2_python-0.0.
|
|
30
|
-
kea2_python-0.0.
|
|
31
|
-
kea2_python-0.0.
|
|
32
|
-
kea2_python-0.0.
|
|
33
|
-
kea2_python-0.0.
|
|
28
|
+
kea2_python-0.0.1a2.dist-info/licenses/LICENSE,sha256=nM9PPjcsXVo5SzNsjRqWgA-gdJlwqZZcRDSC6Qf6bVE,2034
|
|
29
|
+
kea2_python-0.0.1a2.dist-info/METADATA,sha256=q4kT2cBZftSN2DmR966S-YvswbBuwJq6yX9j_ELrK2c,19032
|
|
30
|
+
kea2_python-0.0.1a2.dist-info/WHEEL,sha256=zaaOINJESkSfm_4HQVc5ssNzHCPXhJm0kEUakpsEHaU,91
|
|
31
|
+
kea2_python-0.0.1a2.dist-info/entry_points.txt,sha256=mFX06TyxXiUAJQ6JZn8QHzfn8n5R8_KJ5W-pTm_fRCA,39
|
|
32
|
+
kea2_python-0.0.1a2.dist-info/top_level.txt,sha256=TsgNH4PQoNOVhegpO7AcjutMVWp6Z4KDL1pBH9FnMmk,5
|
|
33
|
+
kea2_python-0.0.1a2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|