1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
import json
import os
import threading
from pychrysalide import core
from pychrysalide.analysis.contents import MemoryContent
from pychrysalide.plugins.gplay import PlayStore, AndroidDevice
if __name__ == "__main__":
core.set_verbosity(0)
assert('bacon' in AndroidDevice.list_available_models())
dev = AndroidDevice('bacon')
MyPlayStore = PlayStore
if not(os.path.isfile('playstore.cfg')):
user = os.getenv('USER')
password = os.getenv('PASSWORD')
store = PlayStore(dev, user, password)
cfg = {
'dev_id': store.device_id,
'auth_token': store.auth_token,
'dev_token': store.device_token,
}
with open('playstore.cfg', 'w') as fd:
json.dump(cfg, fd, indent=' ')
else:
with open('playstore.cfg', 'r') as fd:
cfg = json.load(fd)
store = PlayStore(dev, dev_id=cfg['dev_id'], auth_token=cfg['auth_token'], dev_token=cfg['dev_token'])
_take_ownership = None
ret = store.login()
if ret:
pkg_name = 'org.mozilla.firefox'
details = store.get_package_details(pkg_name)
pkg_version = details.version_code
def _on_downloaded(_store, _content, _event):
if not(_content is None):
# As the content is allocated from another thread,
# transfer ownership to the main thread in order
# to avoid deadlock when Python tries to free this content
global _take_ownership
_take_ownership = _content
with open('%s-%u.apk' % (pkg_name, pkg_version), 'wb') as fd:
fd.write(_content.data)
else:
core.log_message(core.LogMessageType.EXT_ERROR, 'Error while downloading the APK file')
_event.set()
event = threading.Event()
store.connect('downloaded', _on_downloaded, event)
store.download_package(pkg_name, pkg_version)
event.wait()
|