You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitHub Actions复用AVD缓存时INSTALL_FAILED_UPDATE_INCOMPATIBLE错误求助

解决GitHub Actions复用AVD缓存时插桩测试签名不匹配问题

问题根源

复用AVD缓存时,模拟器中留存了之前构建安装的旧APK,新构建的APK签名与旧APK签名不一致,导致系统判定为不兼容更新,抛出INSTALL_FAILED_UPDATE_INCOMPATIBLE错误。

解决方案

1. 生成AVD快照前彻底清理模拟器

在使用reactivecircus/android-emulator-runner生成AVD快照前,先清理模拟器内的目标应用或直接恢复出厂设置,确保缓存的AVD是干净状态:

- name: Prepare clean AVD before caching
  if: steps.avd-cache.outputs.cache-hit != 'true'
  run: |
    # 卸载目标应用(替换为你的实际包名)
    adb uninstall --user 0 com.your.app.package || true
    # 或者选择更彻底的恢复出厂设置(耗时但无残留)
    adb shell wipe data

2. 优化AVD缓存Key,关联签名文件

将签名文件的哈希值加入缓存Key,当签名文件变化时自动触发新的AVD生成,避免复用带旧签名应用的缓存:

- name: Cache AVD
  uses: actions/cache@v3
  id: avd-cache
  with:
    path: |
      ~/.android/avd/*
      ~/.android/adb*
    key: avd-${{ matrix.api-level }}-${{ hashFiles('path/to/your/signing/keystore') }}

3. 测试前强制卸载旧应用

在执行connectedCheck前添加卸载步骤,确保模拟器中没有残留的旧版本应用:

- name: Uninstall existing app before tests
  run: |
    adb uninstall --user 0 com.your.app.package || true

|| true 用于避免应用未安装时命令报错中断工作流。

4. 构建测试包前清理旧产物

执行connectedCheck前先运行clean任务,确保生成的是最新签名的APK:

- name: Run connected tests
  run: ./gradlew clean connectedCheck

内容的提问来源于stack exchange,提问作者SmallGrammer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 03:51:35