Skip to content
This repository has been archived by the owner on Nov 23, 2023. It is now read-only.

Sendevents for faster / more reliable touch/longtouch events when using ADB

License

Notifications You must be signed in to change notification settings

hansalemaos/sendevent_touch

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Use:

Send touch/longtouch events to BlueStacks/Android

$pip install sendevent-touch

from sendevent_touch import SendEventTouch

sendtouch = SendEventTouch(
    adb_path="C:\\Users\\Gamer\\AppData\\Local\\Android\\Sdk\\platform-tools\\adb.exe",
    deviceserial="localhost:5735",
    sdcard="/storage/emulated/0/",  # it is probably better to pass the path, not the symlink
    tmp_folder_on_sd_card="AUTOMAT",  # if the folder doesn't exist, it will be created
    bluestacks_divider=32767,
    use_bluestacks_coordinates=True,  # Recalculates the BlueStacks coordinates https://stackoverflow.com/a/73733261/15096247
)

sendtouch.connect_to_adb()

# Useful if you want to repeat the click
df_click1 = sendtouch.get_dataframe_for_clicks(50, 50)
sendtouch.touch_df(
    df_click1, struct_folder="struct real"
)  # "struct real" will use the recalculated coordinates for BlueStacks


# Touching without returning a DataFrame
sendtouch.touch(520, 40, struct_folder="struct real")


# Same thing for longtouch, duration is in seconds
sendtouch.longtouch_df(df_click1, duration=2.5, struct_folder="struct real")
sendtouch.longtouch(520, 40, duration=3.1, struct_folder="struct real")


# Using struct_folder="struct" should work for any rooted Android device, but I haven't checked it!
# I would be grateful for any feedback!
df_click1 = sendtouch.get_dataframe_for_clicks(50, 50)
sendtouch.touch_df(df_click1, struct_folder="struct")
sendtouch.touch(520, 40, struct_folder="struct")


sendtouch.longtouch_df(df_click1, duration=2, struct_folder="struct")
sendtouch.longtouch(520, 40, duration=3, struct_folder="struct")

#%timeit sendtouch.touch_df(df_click1 ,struct_folder="struct real")
# 109 ms ± 4.62 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
#%timeit subprocess.run('adb shell input tap 50 50')
# 197 ms ± 1.54 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

Tested against Windows 10 / Python 3.9.13 / BlueStacks 5

It should also work with any rooted Android device, the only problem might be the "bluestacks_divider". https://stackoverflow.com/a/73733261/15096247

But changing the code (if necessary) shouldn't be a big thing. Since my cell phone is not rooted, and I have no intention of rooting it, I cannot test the module against a physical Android device. (I would be grateful for any feedback)

About

Sendevents for faster / more reliable touch/longtouch events when using ADB

Topics

Resources

License

Stars

Watchers

Forks

Languages