Skip to content

Commit

Permalink
Fixes (needs check on runtime) adb + add a solution for p4a.extra_args
Browse files Browse the repository at this point in the history
  • Loading branch information
misl6 committed Apr 30, 2022
1 parent 036413e commit 8a9e869
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 29 deletions.
61 changes: 37 additions & 24 deletions buildozer/targets/android.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
from os.path import exists, join, realpath, expanduser, basename, relpath
from platform import architecture
from shutil import copyfile, rmtree, which
import shlex
from glob import glob
from time import sleep

Expand Down Expand Up @@ -113,11 +114,8 @@ def __init__(self, *args, **kwargs):
if self.buildozer.log_level >= 2:
self.extra_p4a_args.append("--debug")

# FIXME: user_extra_p4a_args is a string, but we want a list
user_extra_p4a_args = self.buildozer.config.getdefault('app', 'p4a.extra_args',
None)
if user_extra_p4a_args:
self.extra_p4a_args.append(user_extra_p4a_args)
user_extra_p4a_args = self.buildozer.config.getdefault('app', 'p4a.extra_args', "")
self.extra_p4a_args.extend(shlex.split(user_extra_p4a_args))

self.warn_on_deprecated_tokens()

Expand Down Expand Up @@ -262,13 +260,13 @@ def check_requirements(self):
self._set_win32_java_home()
except:
traceback.print_exc()
self.adb_cmd = join(self.android_sdk_dir, 'platform-tools',
self.adb_executable = join(self.android_sdk_dir, 'platform-tools',
'adb.exe')
self.javac_cmd = self._locate_java('javac.exe')
self.keytool_cmd = self._locate_java('keytool.exe')
# darwin, linux
else:
self.adb_cmd = join(self.android_sdk_dir, 'platform-tools', 'adb')
self.adb_executable = join(self.android_sdk_dir, 'platform-tools', 'adb')
self.javac_cmd = self._locate_java('javac')
self.keytool_cmd = self._locate_java('keytool')

Expand All @@ -282,9 +280,8 @@ def check_requirements(self):

# Adb arguments:
adb_args = self.buildozer.config.getdefault(
"app", "android.adb_args", None)
if adb_args is not None:
self.adb_cmd += ' ' + adb_args
"app", "android.adb_args", "")
self.adb_args = shlex.split(adb_args)

# Need to add internally installed ant to path for external tools
# like adb to use
Expand Down Expand Up @@ -1018,11 +1015,19 @@ def cmd_run(self, *args):
self.buildozer.environ['ANDROID_SERIAL'] = serial
self.buildozer.info('Run on {}'.format(serial))
self.buildozer.cmd(
'{adb} shell am start -n {package}/{entry} -a {entry}'.format(
adb=self.adb_cmd,
package=package,
entry=entrypoint),
cwd=self.buildozer.global_platform_dir)
[
self.adb_executable,
*self.adb_args,
"shell",
"am",
"start",
"-n",
f"{package}/{entrypoint}",
"-a",
entrypoint,
],
cwd=self.buildozer.global_platform_dir,
)
self.buildozer.environ.pop('ANDROID_SERIAL', None)

while True:
Expand Down Expand Up @@ -1417,8 +1422,9 @@ def serials(self):
serial = environ.get('ANDROID_SERIAL')
if serial:
return serial.split(',')
lines = self.buildozer.cmd('{} devices'.format(self.adb_cmd),
get_stdout=True)[0].splitlines()
lines = self.buildozer.cmd(
[self.adb_executable, *self.adb_args, "devices"], get_stdout=True
)[0].splitlines()
serials = []
for serial in lines:
if not serial:
Expand All @@ -1442,9 +1448,9 @@ def cmd_adb(self, *args):
print('To set up ADB in this shell session, execute:')
print(' alias adb=$(buildozer {} adb --alias 2>&1 >/dev/null)'
.format(self.targetname))
sys.stderr.write(self.adb_cmd + '\n')
sys.stderr.write(self.adb_executable + '\n')
else:
self.buildozer.cmd(' '.join([self.adb_cmd] + args))
self.buildozer.cmd([self.adb_executable, *self.adb_args, *args])

def cmd_deploy(self, *args):
super().cmd_deploy(*args)
Expand All @@ -1467,16 +1473,23 @@ def cmd_deploy(self, *args):
for serial in self.serials:
self.buildozer.environ['ANDROID_SERIAL'] = serial
self.buildozer.info('Deploy on {}'.format(serial))
self.buildozer.cmd('{0} install -r "{1}"'.format(
self.adb_cmd, full_apk),
cwd=self.buildozer.global_platform_dir)
self.buildozer.cmd(
[self.adb_executable, *self.adb_args, "install", "-r", full_apk],
cwd=self.buildozer.global_platform_dir,
)
self.buildozer.environ.pop('ANDROID_SERIAL', None)

self.buildozer.info('Application pushed.')

def _get_pid(self):
pid, *_ = self.buildozer.cmd(
f'{self.adb_cmd} shell pidof {self._get_package()}',
[
self.adb_executable,
*self.adb_args,
"shell",
"pidof",
self._get_package(),
],
get_stdout=True,
show_output=False,
break_on_error=False,
Expand Down Expand Up @@ -1505,7 +1518,7 @@ def cmd_logcat(self, *args):
extra_args.extend(('--pid', pid))

self.buildozer.cmd(
f"{self.adb_cmd} logcat {filters} {' '.join(extra_args)}",
[self.adb_executable, *self.adb_args, "logcat", filters, *extra_args],
cwd=self.buildozer.global_platform_dir,
show_output=True,
run_condition=self._get_pid if pid else None,
Expand Down
8 changes: 4 additions & 4 deletions tests/targets/test_android.py
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,8 @@ def test_check_requirements(self):
"""Basic tests for the check_requirements() method."""
target_android = init_target(self.temp_dir)
buildozer = target_android.buildozer
assert not hasattr(target_android, "adb_cmd")
assert not hasattr(target_android, "adb_executable")
assert not hasattr(target_android, "adb_args")
assert not hasattr(target_android, "javac_cmd")
assert "PATH" not in buildozer.environ
with patch_buildozer_checkbin() as m_checkbin:
Expand All @@ -162,9 +163,8 @@ def test_check_requirements(self):
mock.call("Java compiler (javac)", "javac"),
mock.call("Java keytool (keytool)", "keytool"),
]
assert target_android.adb_cmd.endswith(
".buildozer/android/platform/android-sdk/platform-tools/adb"
)
assert target_android.adb_executable.endswith(".buildozer/android/platform/android-sdk/platform-tools/adb")
assert target_android.adb_args == []
assert target_android.javac_cmd == "javac"
assert target_android.keytool_cmd == "keytool"
assert "PATH" in buildozer.environ
Expand Down
1 change: 0 additions & 1 deletion tests/targets/test_ios.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,6 @@ def test_check_requirements(self):
"""Basic tests for the check_requirements() method."""
target = init_target(self.temp_dir)
buildozer = target.buildozer
assert not hasattr(target, "adb_cmd")
assert not hasattr(target, "javac_cmd")
assert "PATH" not in buildozer.environ
with patch_buildozer_checkbin() as m_checkbin:
Expand Down

0 comments on commit 8a9e869

Please sign in to comment.