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

如何在Android测试启动前执行自定义Gradle Task?

解决方案:让MonkeyRunner权限脚本在Android Tests前自动执行

我之前也碰到过类似的问题,折腾了好一阵才搞定,给你几个靠谱的方案试试:

1. 定义执行MonkeyRunner的Gradle Task

先在模块级的build.gradle(比如app/build.gradle)里创建专门的Task来运行你的权限脚本。这里要注意两点:一是确保Gradle能找到monkeyrunner,二是让脚本执行失败时直接终止后续测试流程——毕竟权限没拿到,测试也白跑。

示例代码:

task grantTestPermissions(type: Exec) {
    // 如果系统PATH里已经配置了monkeyrunner,直接写"monkeyrunner"即可
    def monkeyRunnerPath = "${android.sdkDirectory}/tools/bin/monkeyrunner"
    // 替换成你的MonkeyRunner脚本实际路径
    commandLine monkeyRunnerPath, "${project.rootDir}/scripts/grant_test_perms.py"

    // 关键:脚本执行失败就终止流程
    ignoreExitValue = false

    // 可选:打印脚本输出,方便调试问题
    standardOutput = new ByteArrayOutputStream()
    doLast {
        println "Permission grant output:\n${standardOutput.toString()}"
    }
}

2. 把Task绑定到测试流程的前置环节

Android Gradle插件提供了多个测试相关Task,比如connectedAndroidTest(连接设备/模拟器跑测试),你需要让权限脚本Task成为这些测试Task的依赖,这样测试启动前会自动先跑脚本。

方法一:绑定到所有连接设备的测试任务

如果你的测试都是通过connectedAndroidTest启动的,直接加依赖:

connectedAndroidTest.dependsOn grantTestPermissions

方法二:仅绑定到特定构建变体的测试

比如只在debug测试前执行脚本:

android {
    buildTypes {
        debug {
            connectedAndroidTest.dependsOn grantTestPermissions
        }
    }
}

方法三:绑定到所有测试类型的通用前置

如果想让所有测试Task都先跑权限脚本,用tasks.withType匹配:

tasks.withType(Test) {
    dependsOn grantTestPermissions
}

3. 排查常见坑点

如果之前的方案没生效,大概率是碰到了这些问题:

  • MonkeyRunner路径错误:检查android.sdkDirectory是否指向正确的SDK路径,或者直接写绝对路径(比如/Users/xxx/Library/Android/sdk/tools/bin/monkeyrunner)。
  • 脚本执行成功但权限没加上:在你的MonkeyRunner脚本里,要确保授予权限的命令执行后检查结果,失败时返回非0码。比如:
    result = device.shell(f"pm grant com.your.test.package android.permission.WRITE_EXTERNAL_STORAGE")
    if result:
        print(f"Failed to grant permission: {result}")
        sys.exit(1)
    
  • Task执行时机不对:如果脚本在APK安装前执行,权限会授予失败。可以调整执行顺序:
    grantTestPermissions.mustRunAfter tasks.withType(Install)
    connectedAndroidTest.dependsOn grantTestPermissions
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:19:53