Appium 2.0.0-beta.61+UIAutomator2启动AndroidDriver失败,返回500错误
Appium UIAutomator2启动AndroidDriver超时(响应码500)排查方案
问题背景
使用Appium 2.0.0-beta.61 + Android UiAutomator2驱动启动AndroidDriver时失败,返回响应码500,核心错误为:
The instrumentation process cannot be initialized within 120000ms timeout.
已尝试过以下操作但无效:
- 移除设备上的Appium服务器应用
- 更换测试设备
- 增大
uiautomator2ServerLaunchTimeout至120000ms
错误日志
[AndroidUiautomator2Driver@9c56 (e03bdf49)] The instrumentation process cannot be initialized within 120000ms timeout. Make sure the application under test does not crash and investigate the logcat output. You could also try to increase the value of 'uiautomator2ServerLaunchTimeout' capability 10:31:32 SamsungS8Plus [ERROR] Failed to set driver. Closing Appium to prevent it from staying open after test fail. Please check exception below: 10:31:32 SamsungS8Plus [ERROR] Could not start a new session. Response code 500. Message: An unknown server-side error occurred while processing the command. Original error: The instrumentation process cannot be initialized within 120000ms timeout. Make sure the application under test does not crash and investigate the logcat output. You could also try to increase the value of 'uiautomator2ServerLaunchTimeout' capability Host info: host: 'INV-15330', ip: '192.168.67.232' Build info: version: '4.8.1', revision: '8ebccac989' System info: os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '11.0.15' Driver info: io.appium.java_client.android.AndroidDriver Command: [null, newSession {capabilities=[{appium:adbPort=5037, appium:systemPort=8301, appium:newCommandTimeout=180, appium:androidInstallTimeout=120000, appium:automationName=UIAutomator2, appium:udid=712KPRW1234990, appium:uiautomator2ServerLaunchTimeout=120000, appium:autoGrantPermissions=true, appium:remoteAdbHost=localhost, appium:appActivity=com.unity3d.player.UnityPlayerActivity, platformName=ANDROID, appium:app=C:\Users\Gre\Documents\htautomation\games\Puzzle\Android\Puzzle.apk, appium:uiautomator2ServerInstallTimeout=120000}], desiredCapabilities=Capabilities {appium:adbPort: 5037, appium:androidInstallTimeout: 120000, appium:app: C:\Users\Gre\Doc..., appium:appActivity: com.unity3d.player.UnityPla..., appium:autoGrantPermissions: true, appium:automationName: UIAutomator2, appium:newCommandTimeout: 180, appium:remoteAdbHost: localhost, appium:systemPort: 8301, appium:udid: 712KPRW1234990, appium:uiautomator2ServerInstallTimeout: 120000, appium:uiautomator2ServerLaunchTimeout: 120000, platformName: ANDROID}}] Capabilities {appium:adbPort: 5037, appium:androidInstallTimeout: 120000, appium:app: C:\Users\Gre\Doc..., appium:appActivity: com.unity3d.player.UnityPla..., appium:autoGrantPermissions: true, appium:automationName: UIAutomator2, appium:newCommandTimeout: 180, appium:remoteAdbHost: localhost, appium:systemPort: 8301, appium:udid: 712KPRW1234990, appium:uiautomator2ServerInstallTimeout: 120000, appium:uiautomator2ServerLaunchTimeout: 120000, platformName: ANDROID}
Appium服务启动代码
AppiumServiceBuilder builder; builder = new AppiumServiceBuilder() .withArgument(GeneralServerFlag.LOG_LEVEL, "error") .withArgument(GeneralServerFlag.ALLOW_INSECURE, "adb_screen_streaming, chromedriver_autodownload") .withIPAddress("127.0.0.1") .usingPort(getAppiumServerFromSystemEnv()); server = AppiumDriverLocalService.buildService(builder); server.start();
AndroidDriver初始化代码
try { driver = new AndroidDriver(server.getUrl(), options); } catch (org.openqa.selenium.SessionNotCreatedException e) { loggerUtils.log(LoggerLevel.ERROR,"[HTA] Failed to set driver. Closing Appium to prevent it from staying open after test fail. Please check exception below:"); loggerUtils.log(LoggerLevel.ERROR, e.getMessage()); closeAppiumServer(); }
解决步骤
1. 抓取Logcat日志定位根因
命令行执行以下命令开启日志捕获,然后启动测试:
adb logcat -v time > logcat.txt
超时停止后,在日志中搜索以下关键词,定位具体失败原因:
Instrumentationuiautomator2com.android.uiautomator.testrunner- 应用包名(可通过
aapt dump badging Puzzle.apk | findstr package获取)
重点关注是否有应用崩溃、权限被拒绝、UIAutomator2进程被系统终止的日志。
2. 手动安装UIAutomator2 Server
从Appium的UIAutomator2驱动目录(通常是%APPDATA%\npm\node_modules\appium-uiautomator2-driver\apks)找到两个APK文件:
appium-uiautomator2-server-vxx.apkappium-uiautomator2-server-test-vxx.apk
用ADB手动安装:
adb install -r appium-uiautomator2-server-vxx.apk adb install -r appium-uiautomator2-server-test-vxx.apk
安装完成后重新启动测试,确认是否能正常初始化。
3. 调整Capabilities参数
在现有配置基础上添加/修改以下参数:
- 关闭窗口动画:减少启动耗时
options.setCapability("disableWindowAnimation", true); - 禁用应用重置(如果不需要每次重装):避免重复安装应用和UIAutomator2 Server
options.setCapability("noReset", true); - 指定应用包名:确保
appPackage与appActivity匹配,Unity应用包名从APK获取后添加options.setCapability("appPackage", "你的应用包名"); - 调大ADB执行超时:避免ADB命令超时导致流程中断
options.setCapability("adbExecTimeout", 300000); // 5分钟
4. 排查ADB连接与设备状态
- 重启ADB服务:
adb kill-server adb start-server - 重新插拔设备,切换USB连接模式为「文件传输」,关闭并重新开启USB调试
- 检查设备安全设置:比如三星Knox、系统安全软件是否限制了UIAutomator2进程,尝试临时关闭相关限制
5. 升级/降级Appium与UIAutomator2驱动
- 升级Appium到稳定版本:
npm install -g appium@latest - 重新安装UIAutomator2驱动:
appium driver uninstall uiautomator2 appium driver install uiautomator2 - 若问题仍存在,尝试降级到兼容的UIAutomator2版本(比如2.29.0):
appium driver install uiautomator2@2.29.0
6. 检查应用本身启动问题
- 手动安装应用到设备,确认应用能正常启动,无闪退、长时间卡在启动页的情况
- 若为Unity应用,检查启动时是否有大量资源加载或权限请求,手动记录启动耗时,如果本身启动就超过2分钟,需优化应用启动速度,仅调大超时参数无法解决本质问题
内容的提问来源于stack exchange,提问作者Grzeche
相关产品推荐
相关产品推荐

