mirror of
https://github.com/taigrr/adb.git
synced 2026-04-02 02:58:42 -07:00
89 lines
2.4 KiB
Go
89 lines
2.4 KiB
Go
package adb
|
|
|
|
import (
|
|
"context"
|
|
"regexp"
|
|
"strconv"
|
|
"time"
|
|
|
|
"github.com/google/shlex"
|
|
)
|
|
|
|
// Shell allows you to run an arbitrary shell command against a device.
|
|
//
|
|
// This function is useful if you need to run an obscure shell command or if
|
|
// you require functionality not provided by the exposed functions here.
|
|
// Instead of using Shell, please consider submitting a PR with the functionality
|
|
// you require.
|
|
func (d Device) Shell(ctx context.Context, command string) (stdout string, stderr string, ErrCode int, err error) {
|
|
cmd, err := shlex.Split(command)
|
|
if err != nil {
|
|
return "", "", 1, err
|
|
}
|
|
prefix := []string{"-s", string(d.SerialNo), "shell"}
|
|
cmd = append(prefix, cmd...)
|
|
stdout, stderr, errcode, err := execute(ctx, cmd)
|
|
return stdout, stderr, errcode, err
|
|
}
|
|
|
|
// adb shell wm size
|
|
// Physical size: 1440x3120
|
|
func (d Device) GetScreenResolution(ctx context.Context) (width int, height int, err error) {
|
|
cmd := []string{"-s", string(d.SerialNo), "shell", "wm", "size"}
|
|
stdout, _, _, err := execute(ctx, cmd)
|
|
if err != nil {
|
|
return -1, -1, err
|
|
}
|
|
return parseScreenResolution(stdout)
|
|
}
|
|
|
|
// Parses input, example:
|
|
// Physical size: 1440x3040
|
|
func parseScreenResolution(in string) (int, int, error) {
|
|
r := regexp.MustCompile(`Physical size: ([0-9]+)x([0-9]+)`)
|
|
resStr := r.FindStringSubmatch(in)
|
|
if len(resStr) != 3 {
|
|
return -1, -1, ErrResolutionParseFail
|
|
}
|
|
w, _ := strconv.Atoi(resStr[1])
|
|
h, _ := strconv.Atoi(resStr[2])
|
|
return w, h, nil
|
|
}
|
|
|
|
func (d Device) Tap(ctx context.Context, X, Y int) error {
|
|
return nil
|
|
}
|
|
|
|
// Simulates a long press
|
|
//
|
|
// Under the hood, this calls swipe with the same start and end coordinates
|
|
// with a duration of 250ms
|
|
func (d Device) LongPress(ctx context.Context, X, Y int) error {
|
|
return nil
|
|
}
|
|
|
|
func (d Device) Swipe(ctx context.Context, X1, Y1, X2, Y2 int, duration time.Duration) error {
|
|
return nil
|
|
}
|
|
|
|
// Equivalent to pressing the home button
|
|
//
|
|
// Calls `input keyevent KEYCODE_HOME` under the hood
|
|
func (d Device) GoHome(ctx context.Context) error {
|
|
return nil
|
|
}
|
|
|
|
//Equivalent to pressing the back button
|
|
//
|
|
// Calls `input keyevent KEYCODE_BACK` under the hood
|
|
func (d Device) GoBack(ctx context.Context) error {
|
|
return nil
|
|
}
|
|
|
|
// Equivalent to pushing the app switcher. You probably want to call this twice.
|
|
//
|
|
// Calls `input keyevent KEYCODE_APP_SWITCH` under the hood
|
|
func (d Device) SwitchApp(ctx context.Context) error {
|
|
return nil
|
|
}
|