使用Gradle Managed Device与Github Action做CI测试遇设备配置失败求助
解决Github Action中Gradle Managed Device设备初始化失败问题
错误原因
Github Action默认托管Runner的资源(2核CPU、7GB内存)有限,Gradle Managed Device启动Android模拟器需要较多CPU和内存资源,当资源不足以支撑设备初始化时就会触发该错误。本地运行正常是因为本地设备通常具备更充足的硬件资源。
解决方案
1. 减少设备请求数量
确保在模块的build.gradle中只声明1台测试设备,避免多设备同时启动消耗过多资源:
android { testOptions { managedDevices { devices { nexusOneApi30(com.android.build.api.dsl.ManagedVirtualDevice) { device = "Nexus One" apiLevel = 30 systemImageSource = "aosp-atd" } } } } }
2. 禁用测试分片
测试分片会启动额外进程或设备,进一步消耗资源。可以通过两种方式禁用:
- 在Github Action的Gradle命令中移除
--test-shard相关参数 - 在
build.gradle中全局配置禁用分片:tasks.withType(Test) { sharding = false }
3. 使用更高配置的Github Runner
默认Runner资源不足时,切换到大规格的托管Runner(如ubuntu-latest-large,提供4核CPU、14GB内存),在Action的YAML文件中修改:
jobs: run-tests: runs-on: ubuntu-latest-large steps: # 后续步骤保持不变
4. 启用硬件加速
Github托管Runner支持KVM硬件加速,启用后能大幅降低模拟器的资源消耗并提升启动速度。在Action步骤中添加:
steps: - name: 启用KVM硬件加速 run: | echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules sudo udevadm control --reload-rules sudo udevadm trigger --subsystem-match=misc --action=add
5. 优化Gradle资源占用
调整Gradle配置,减少其对内存和CPU的占用,为模拟器预留更多资源。在gradle.properties中添加:
org.gradle.parallel=false org.gradle.jvmargs=-Xmx4g -XX:MaxMetaspaceSize=512m
内容的提问来源于stack exchange,提问作者hannes ach
相关产品推荐
相关产品推荐

