Add ADB (Android Debug Bridge) Support#1564
Add ADB (Android Debug Bridge) Support#1564ep1cman wants to merge 2 commits intolabgrid-project:masterfrom
Conversation
d234f34 to
15a4ce4
Compare
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## master #1564 +/- ##
========================================
- Coverage 46.7% 46.5% -0.3%
========================================
Files 179 181 +2
Lines 14202 14394 +192
========================================
+ Hits 6645 6704 +59
- Misses 7557 7690 +133
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. |
e346334 to
892693a
Compare
Emantor
left a comment
There was a problem hiding this comment.
Some minor comments in regard to subcommand handling and attribute naming.
| if resource.extra.get("proxy_required") or self.args.proxy: | ||
| proxy = resource.extra.get("proxy") | ||
| scrcpy_cmd.append(f"--tunnel-host={ip_addr}") | ||
| scrcpy_cmd.append(f"--tunnel-port={sshmanager.request_forward(proxy, host, 27183)}") |
There was a problem hiding this comment.
Is this always the same port? How will this interact with multiple devices connected over ADB to the same host?
There was a problem hiding this comment.
Good point, I had not tested multiple simultaneous screen sharing sessions. I have added some code to find a free port on the exporter and use that. It is based on the "get_free_port" code within labgrid that gets a free port on the client machine.
Is this worth moving into a more general location? Maybe within SSHConnection?
There was a problem hiding this comment.
get_free_port should already be in util.helper, so you should be able to import it directly.
There was a problem hiding this comment.
That returns a free port on the machine running the labgrid client, I require a free port on the exporter. The way scrcpy works is that it runs a server on the android device and creates a port forward between it and the ADB host (the exporter in this case)
There was a problem hiding this comment.
You might be able to handle that within the remote resource for the exporter, the SerialPortExport does something similar to choose a free port for ser2net.
There was a problem hiding this comment.
There is an additional complication to the scrcpy command.
I already use get_free_port in the ADBExport to get a port for the ADB server, which is started by the ADBExport.
The scrcpy server is not setup at this time, it is started by the scrcpy client when it connects to the device. It first connects via ADB, transfers over the binaries, starts the server, then uses ADB to create a port forward between the device and the ADB host (the exporter).
I am unable to know at the time of starting the exporter what ports will be available at the time scrcpy is launched, which could be weeks later.
|
Any updates on this? It would be great to get this merged. |
33c3683 to
65102d5
Compare
|
@Emantor I believe there was one remaining comment thread, I provided an explanation for why I did things that way, awaiting your feedback. I have update the PR to resolve merge conflicts with the latest master branch. |
| # adb connection may have gone "stale", resulting in adb blocking | ||
| # indefinitely when making calls to the device. To avoid this, | ||
| # always disconnect first. | ||
| subprocess.run( |
There was a problem hiding this comment.
This should use processwrapper from util.helper, see for example the FastbootDriver.
There was a problem hiding this comment.
Two questions about this:
processwrapperdoesn't support a timeout, how should we handle this?- I don't think I can also do this in
_runas I need to return a separate stdout, stderr and exit code.
There was a problem hiding this comment.
We should extend the processwrapper for timeout support, but IMO this is out of scope for this PR. Can you add a TODO entry to the first occasion in the driver? Than the subprocess usage should be fine.
I agree for _run since this needs explicit handling.
Some forms of reset can reset the device into different modes. For example: - Reboot - Reboot into bootloader mode - Reboot into recovery mode Signed-off-by: Sebastian Goscik <sebastian.goscik@arm.com>
6cc31a5 to
76403ef
Compare
|
It looks like we are missing DCOs for the additional commits, you can either squash them down into the original commit and give credit there or ask the committers to add the DCO 👍 |
ADB is expected to be installed and working on the exporter and client machines. For screensharing "scrcpy" needs to be installed on the client. Signed-off-by: Sebastian Goscik <sebastian.goscik@arm.com> Co-authored-by: David Brown <david.brown@arm.com> Co-authored-by: freedrikp <freedrikp@users.noreply.github.com> Co-authored-by: Luke Hackwell <luke.hackwell@arm.com>
I have squash the commits down and added the others as co-authors. Only outstanding issue now is the use of processwrapper, I left some questions above. |
This pull request add support for ADB (Android Debug Bridge) devices in labgrid.
adbfor interfacing with the device by theadbcliscrcpyfor remote screen/touch/keyboard/clipboard/etc. sharingChecklist