如何从卸载应用程序停止Gradle检测的测试运行?

Com*_*are 6 android android-gradle-plugin

如果我:

  • 创建一个全新的Android Studio 3.5.1项目(Kotlin,API 21,“空活动”模板)
  • 从IDE内部运行应用程序
  • 确认该应用程序已安装并具有启动器图标
  • 运行connectedAndroidDebugTestGradle任务(从Android Studio内部或通过gradlew

该应用程序最终会在测试运行时被卸载。即使我添加了一个testApplicationId值以defaultConfig使测试代码使用其他应用程序ID,我也会得到这种行为。

如何停止这种行为?如何在不干扰现有应用安装的情况下从命令行运行检测测试?

Kev*_*rth 8

我刚刚遇到这个问题,并发现至少有一个原因可能是所使用的 Android Gradle 插件的版本。

  • AGP 7.4.1 & 8.0.2 -> 测试完成后不要卸载应用程序
  • AGP 8.1.0 -> 测试完成后卸载应用程序

如果知道如何告诉 AGP 8.1.0 不要卸载该应用程序,那就太好了。

编辑:

根据谷歌的问题跟踪器,将会有一个新的配置选项,android.injected.androidTest.leaveApksInstalledAfterRun它将允许保留或不安装应用程序。不过,听起来我们不会比 AGP 8.3.0-alpha07 更早看到它。

# gradle.properties
...
android.injected.androidTest.leaveApksInstalledAfterRun=true
Run Code Online (Sandbox Code Playgroud)

  • 仅供参考,我在这里向 Google 报告了此问题:https://issuetracker.google.com/issues/295039976 (5认同)

tyn*_*ynn 4

任务connectedCheck的类型为DeviceProviderInstrumentTestTask。对于在一台设备上运行的简单测试,它使用 a SimpleTestRunner,而设备又使用 aSimpleTestRunnable来实际执行测试。在这里你可以找到一个结构

try {
    // connect to device
    // install all APKs
    // run tests
} catch(Exception e) {
    // handle error
} finally {
    // get test report
    // uninstall all APKs
    // disconnect from device
}
Run Code Online (Sandbox Code Playgroud)

我不太确定是否找到了最新的实现,但这种确切的行为可以追溯到几年前。所以我猜你无法实现你所要求的。