fix: setup device and driver

This commit is contained in:
lilong.129
2025-02-18 18:04:18 +08:00
parent c8f7e2fa70
commit 7b052f0d98
14 changed files with 175 additions and 149 deletions

View File

@@ -84,6 +84,11 @@ func NewAndroidDevice(opts ...option.AndroidDeviceOption) (device *AndroidDevice
Logcat: NewAdbLogcat(androidOptions.SerialNumber),
}
log.Info().Str("serial", device.Options.SerialNumber).Msg("init android device")
// setup device
if err := device.Setup(); err != nil {
return nil, errors.Wrap(err, "setup android device failed")
}
return device, nil
}
@@ -107,32 +112,6 @@ func (dev *AndroidDevice) Setup() error {
return errors.Wrap(code.DeviceShellExecError, err.Error())
}
if dev.Options.UIA2 {
// uiautomator2 server must be started before
// check uiautomator server package installed
if !dev.Device.IsPackageInstalled(dev.Options.UIA2ServerPackageName) {
return errors.Wrapf(code.MobileUIDriverAppNotInstalled,
"%s not installed", dev.Options.UIA2ServerPackageName)
}
if !dev.Device.IsPackageInstalled(dev.Options.UIA2ServerTestPackageName) {
return errors.Wrapf(code.MobileUIDriverAppNotInstalled,
"%s not installed", dev.Options.UIA2ServerTestPackageName)
}
// TODO: check uiautomator server package running
// if dev.IsPackageRunning(UIA2ServerPackageName) {
// return nil
// }
// start uiautomator2 server
go func() {
if err := dev.startUIA2Server(); err != nil {
log.Error().Err(err).Msg("start UIA2 failed")
}
}()
time.Sleep(5 * time.Second) // wait for uiautomator2 server start
}
return nil
}
@@ -164,10 +143,6 @@ func (dev *AndroidDevice) NewDriver() (driver IDriver, err error) {
return nil, err
}
}
// setup driver
if err := driver.Setup(); err != nil {
return nil, err
}
return driver, nil
}
@@ -404,33 +379,6 @@ func (dev *AndroidDevice) getPackageMD5(packagePath string) (string, error) {
return "", errors.New("failed to get package md5")
}
func (dev *AndroidDevice) startUIA2Server() error {
const maxRetries = 3
for attempt := 1; attempt <= maxRetries; attempt++ {
log.Info().Str("package", dev.Options.UIA2ServerTestPackageName).
Int("attempt", attempt).Msg("start uiautomator server")
// $ adb shell am instrument -w $UIA2ServerTestPackageName
// -w: wait for instrumentation to finish before returning.
// Required for test runners.
out, err := dev.Device.RunShellCommand("am", "instrument", "-w",
dev.Options.UIA2ServerTestPackageName)
if err != nil {
return errors.Wrap(err, "start uiautomator server failed")
}
if strings.Contains(out, "Process crashed") {
log.Error().Msg("uiautomator server crashed, retrying...")
}
}
return errors.Wrapf(code.MobileUIDriverAppCrashed,
"uiautomator server crashed %d times", maxRetries)
}
func (dev *AndroidDevice) stopUIA2Server() error {
_, err := dev.Device.RunShellCommand("am", "force-stop", dev.Options.UIA2ServerPackageName)
return err
}
type LineCallback func(string)
type AdbLogcat struct {