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
相关产品推荐
相关产品推荐

