Bitbucket流水线中Android模拟器APK安装失败问题求助
针对你遇到的ShellCommandUnresponsiveException、UtpException等测试APK安装失败问题,可以按以下步骤逐一排查解决:
确保模拟器完全启动就绪
armeabi-v7a模拟器启动速度远慢于x86_64版本,不要在模拟器启动后立刻执行测试。添加等待脚本确认系统完全启动:adb wait-for-device shell 'while [[ -z $(getprop sys.boot_completed) ]]; do sleep 1; done'这条命令会等待模拟器的系统启动完成信号,避免因系统未就绪导致的安装超时。
调整ADB安装超时阈值
默认ADB安装超时时间较短,不足以应对armeabi架构的慢安装速度。在流水线中添加环境变量:export ADB_INSTALL_TIMEOUT=120同时在项目根目录的
gradle.properties中添加配置:android.adbInstallTimeout=120000双保险延长安装超时时间(单位分别为秒和毫秒)。
优化AVD启动参数
启动模拟器时分配更多系统资源,避免因内存或存储空间不足导致安装失败:emulator -avd your_armeabi_avd -no-window -no-audio -no-boot-anim -partition-size 2048 -memory 2048-partition-size增大模拟器存储分区,-memory分配更多运行内存,减少资源瓶颈。修复UtpException传输问题
该错误多与ADB传输协议有关,强制ADB使用TCP协议:adb kill-server && adb start-server adb tcpip 5555 adb connect localhost:5555重启ADB守护进程并切换到TCP连接,避免USB模拟层的兼容性问题。
排查流水线环境依赖
确保Docker镜像中安装了armeabi模拟器所需的底层库:apt-get update && apt-get install -y libncurses5 libstdc++6缺失这些库可能导致模拟器后台进程无响应,进而引发ShellCommandUnresponsiveException。
优化Gradle测试命令
运行测试时禁用缓存并关闭调试等待,减少不必要的延迟:./gradlew connectedAndroidTest --no-build-cache -Pandroid.testInstrumentationRunnerArguments.waitForDebugger=false
如果以上步骤仍未解决问题,建议在测试失败前执行adb logcat -d > logcat.txt导出日志,查看APK安装时的具体错误信息(如签名不匹配、存储空间不足等),进一步定位问题。
内容的提问来源于stack exchange,提问作者Bitwise DEVS

