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

Android Macrobenchmark:如何防止目标设备上的APK被更新

Macrobench 运行时重复卸载重装APK导致登录丢失的解决方案

核心问题根源

Macrobench 默认会执行 uninstallAll 任务,运行前会卸载所有关联变体的APK,包括你已登录的目标应用,这就是导致登录状态丢失、重复重装的直接原因。以下是针对性解决办法:


1. 禁用Macrobench自动卸载行为

在你的benchmark模块的build.gradle中,添加enableUninstall = false配置,阻止测试前自动卸载APK:

android {
    // 其他配置...
    androidTest {
        // 关闭自动卸载被测APK
        enableUninstall = false
    }
}

2. 强制基准测试APK与主应用签名完全一致

虽然你已尝试过,但需确保主应用模块和benchmark模块的所有buildType(包括debug/release)都使用同一签名配置,避免因签名不匹配触发隐性重装。示例配置:

// 根目录build.gradle统一签名配置
ext {
    appSigningConfig = [
        storeFile: file("your-keystore.jks"),
        storePassword: "your-store-pwd",
        keyAlias: "your-key-alias",
        keyPassword: "your-key-pwd"
    ]
}

// 主应用模块build.gradle
android {
    signingConfigs {
        release rootProject.ext.appSigningConfig
        debug rootProject.ext.appSigningConfig // debug也用正式签名
    }
    buildTypes {
        release { signingConfig signingConfigs.release }
        debug { signingConfig signingConfigs.debug }
    }
}

// benchmark模块build.gradle
android {
    signingConfigs {
        release rootProject.ext.appSigningConfig
        debug rootProject.ext.appSigningConfig
    }
    buildTypes {
        release { signingConfig signingConfigs.release }
        debug { signingConfig signingConfigs.debug }
    }
}

3. 手动维护已登录APK状态后再运行测试

  • 先在目标设备上安装已完成登录的主应用APK(可直接从主模块build/outputs/apk/目录获取)
  • 运行Macrobench时,跳过APK构建步骤,直接使用已安装的版本:
./gradlew benchmark:connectedBenchmarkAndroidTest -Pandroid.testInstrumentationRunnerArguments.class=your.package.YourBenchmarkClass --no-build

4. 排查测试代码中的主动卸载逻辑

检查你的Benchmark测试类,确保没有调用类似以下的主动卸载代码:

// 危险代码示例,需删除
InstrumentationRegistry.getInstrumentation().uiAutomation.executeShellCommand("pm uninstall com.your.app.package")

内容的提问来源于stack exchange,提问作者A. Andrews

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 03:17:41