Android Automation Magic

Posted on Sat 07 September 2019 in android

Use automation scripts to cater to daily routine tasks on Android.

Launch Application

There are 2 ways to go. [1]

  • Without specifying an activity:

    monkey -p app.package.name 1

    Note that the pseudorandom operation usually turns on auto-rotation, from my experience.

  • With a certain activity:

    am start [-S] app.package.name/.activityname (-S: force new activity)

    For the activity name, either use

    cmd package resolve-activity --brief app.package.name to obtain the "default" activity, or

    dumpsys window windows | grep Focus to obtain the activity on current screen.

    btw, kill by am force-stop app.package.name

Click/Swipe/Input/Press

Use the input applet to

  • tap: input tap <x> <y>

  • swipe: input swipe <x1> <y1> <x2> <y2> [duration]

    • canonically, from (x1, y1) to (x2, y2), with an optional swipe duration.
    • can be used to simulate a long press by setting (x1, y1) == (x2, y2) & duration = press time.
  • input text: input text "the text to go" (be careful about the active input method)

  • back/home/recent/etc. keys: input keyevent <keycode> (check keycodes here: 26=power, KEYCODE_APP_SWITCH=recent, 3=home, 4=back)

To show (x, y) coordiante, just turn on pointer location in phone's developer options, or by adb shell settings put system pointer_location 1 (0 to disable).

Tips

All the above commands can be issued with adb shell wrapper.

Screenshot by capturing bytes output of adb exec-out screencap -p

Stay awake by adb shell svc power stayon usb

Get lock state by "mAwake" and "Lockscreen" of adb shell dumpsys window

Use sleep to pause between operations.

Integrate scripts with automation apps like Easer, or Auto.js

See also shizuku


[1]https://stackoverflow.com/q/29931318