Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
S2-group
GitHub Repository: S2-group/android-runner
Path: blob/master/AndroidRunner/NativeExperiment.py
629 views
1
import os.path as op
2
import time
3
4
from . import Tests
5
from .Experiment import Experiment
6
from .util import ConfigError
7
8
9
class NativeExperiment(Experiment):
10
def __init__(self, config, progress, restart):
11
self.package = None
12
self.duration = Tests.is_integer(config.get('duration', 0)) / 1000
13
super(NativeExperiment, self).__init__(config, progress, restart)
14
self.pre_installed_apps = config.get('apps', [])
15
for apk in config.get('paths', []):
16
if not op.isfile(apk):
17
raise ConfigError('File %s not found' % apk)
18
19
def cleanup(self, device):
20
super(NativeExperiment, self).cleanup(device)
21
if self.package in device.get_app_list() and self.package not in self.pre_installed_apps:
22
device.uninstall(self.package)
23
24
def before_experiment(self, device, *args, **kwargs):
25
super(NativeExperiment, self).before_experiment(device)
26
27
def before_run_subject(self, device, path, *args, **kwargs):
28
super(NativeExperiment, self).before_run_subject(device, path)
29
if path in self.pre_installed_apps:
30
self.package = path
31
else:
32
filename = op.basename(path)
33
self.logger.info('APK: %s' % filename)
34
if filename not in device.get_app_list():
35
device.install(path)
36
self.package = op.splitext(op.basename(path))[0]
37
38
39
def before_run(self, device, path, run, *args, **kwargs):
40
super(NativeExperiment, self).before_run(device, path, run)
41
device.configure_settings_device(self.package, enable=True)
42
device.launch_package(self.package)
43
time.sleep(1)
44
self.after_launch(device, path, run)
45
46
def start_profiling(self, device, path, run, *args, **kwargs):
47
self.profilers.start_profiling(device, app=self.package)
48
49
def interaction(self, device, path, run, *args, **kwargs):
50
super(NativeExperiment, self).interaction(device, path, run, *args, **kwargs)
51
time.sleep(self.duration)
52
53
def after_run(self, device, path, run, *args, **kwargs):
54
self.before_close(device, path, run)
55
device.force_stop(self.package)
56
if self.clear_cache == True:
57
device.clear_app_data(self.package)
58
device.configure_settings_device(self.package, enable=False)
59
time.sleep(3)
60
super(NativeExperiment, self).after_run(device, path, run)
61
62
def after_last_run(self, device, path, *args, **kwargs):
63
super(NativeExperiment, self).after_last_run(device, path)
64
if self.package in device.get_app_list() and self.package not in self.pre_installed_apps:
65
device.uninstall(self.package)
66
self.package = None
67
68
def after_experiment(self, device, *args, **kwargs):
69
super(NativeExperiment, self).after_experiment(device)
70
71