Skip to content

Commit

Permalink
Add support for screen recording with VIEW intent.
Browse files Browse the repository at this point in the history
You can run it as follows:

```
python3 ./record_adb.py --mode intent --package org.mozilla.fenix --url https://theme-crave-demo.myshopify.com/ --output shopify-app-link.mp4
```
  • Loading branch information
mstange committed Jul 4, 2024
1 parent 4187327 commit 21f237b
Showing 1 changed file with 33 additions and 23 deletions.
56 changes: 33 additions & 23 deletions record_adb.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,23 +6,24 @@
import argparse
import subprocess
import time
import os
import signal


# This script records the phone either through intent or simulating user touch
# This script records the phone either through view intent or simulating user touch
# for the purpose of generating videos that are consistent.
# The consistency allows us to compare said video.
def main(args):
method = args.input
mode = args.mode
device_path = './sdcard/output.mp4'

if method in 'touch' and (args.coordinate_x is None or args.coordinate_y is None):
print('--touch requires --coordinate-x <coordinate> --coordinate-y <coordinate> to use the touch input')
if mode == 'touch' and (args.coordinate_x is None or args.coordinate_y is None):
print('--mode touch requires --coordinate-x <coordinate> --coordinate-y <coordinate> '
'to use the touch input. Enable the touch coordinate overlay in the Android debug '
'settings to find the right coordinates.')
sys.exit()

if mode == 'intent' and (args.url is None or args.package is None):
print('--mode intent requires --url and --package arguments')
sys.exit()
# if method in 'intent' and args.package is None:
# print('--intent requires --package <your.package.name>')
# sys.exit()

kill_existing_processes("org.mozilla")
kill_existing_processes("com.android.chrome")
Expand All @@ -34,20 +35,28 @@ def main(args):
record_process = subprocess.Popen(['adb', 'shell', 'screenrecord', '--bugreport'] + [device_path])
time.sleep(3)

# TODO allow intent trigger
# if method in 'intent':
# record_with_intent(args.package)
# else:
simulate_input(args.coordinate_x, args.coordinate_y)
if mode == "touch":
simulate_input(args.coordinate_x, args.coordinate_y)
else:
if args.package.startswith("org.mozilla"):
activity = args.package + "/org.mozilla.fenix.IntentReceiverActivity"
else:
# Assume Chrome
activity = args.package + "/com.google.android.apps.chrome.IntentDispatcher"
record_with_view_intent(activity, args.url)

time.sleep(5)
record_process.kill()
time.sleep(5)
pull_recording(device_path, args.output)

# def record_with_intent(package):
# activity_start = subprocess.Popen(['adb', 'shell', 'am', 'start-activity', package +'/.App',
# '--ez finishonboarding true'])
# activity_start.wait()

def record_with_view_intent(activity, url):
activity_start = subprocess.Popen(
['adb', 'shell', 'am', 'start-activity', '-d', url,
'-a', 'android.intent.action.VIEW', activity]
)
activity_start.wait()


def simulate_input(x, y):
Expand Down Expand Up @@ -79,13 +88,14 @@ def kill_existing_processes(package_substr):

if __name__ == "__main__":
parser = argparse.ArgumentParser(description='record video through adb',
usage=('record_adb.py --input <touch> --coordinate-x and --cordinate-y '
usage=('record_adb.py --mode touch -cx 660 -cy 2222 '
'--output <name.mp4>'))
# add intent later
parser.add_argument('-i', '--input', required=True, choices=("touch"))

parser.add_argument('-m', '--mode', required=True, choices=("touch", "intent"))
parser.add_argument('-cx', '--coordinate-x', type=int, help="X position of touch event")
parser.add_argument('-cy', '--coordinate-y', type=int, help="Y position of touch event")
# parser.add_argument('-p','--package', type=str, help='package name to record if intent is used')
parser.add_argument('-o', '--output', type=str, help="output name of file")
parser.add_argument('-u', '--url', type=str, help="App link URL")
parser.add_argument('-p', '--package', type=str, help="App package for app link")
parser.add_argument('-o', '--output', required=True, type=str, help="output file path")
args = parser.parse_args()
main(args)

0 comments on commit 21f237b

Please sign in to comment.