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

如何在Gradle托管设备中映射或使用本地文件?

Gradle托管虚拟设备中访问本地文件的解决方案

Gradle托管虚拟设备目前没有直接提供本地文件/文件夹映射到设备的配置选项,也不存在预定义的可直接访问本地文件的特定路径。针对你的需求,以下是几种可行的落地方案:

1. 结合Gradle任务与ADB推送文件

可以在测试任务执行前,新增一个自定义Gradle任务,通过adb push将本地文件推送到虚拟设备的可访问路径(如/sdcard/或应用私有目录)。Gradle托管设备启动后会自动关联ADB,无需手动指定设备ID。

示例配置:

// 自定义推送测试文件的任务
task pushTestFilesToDevice(type: Exec) {
    doFirst {
        // 等待设备就绪
        exec { commandLine 'adb', 'wait-for-device' }
        // 推送本地文件到设备SD卡的测试目录
        exec { commandLine 'adb', 'push', './src/test/resources/test-files/', '/sdcard/test-resources/' }
    }
}

// 让对应托管设备的测试任务依赖推送任务
tasks.named('connectedPixel2api30AndroidTest') {
    dependsOn pushTestFilesToDevice
}

2. 将文件打包进测试APK(推荐)

如果测试依赖的文件是固定不变的,直接把文件放到src/androidTest/assets目录下,这些文件会被打包进测试APK。测试代码中可以通过AssetManager直接读取:

示例测试代码(Kotlin):

@Test
fun testReadLocalFile() {
    val assetManager = InstrumentationRegistry.getInstrumentation().context.assets
    assetManager.open("test-data.csv").use { inputStream ->
        val content = inputStream.bufferedReader().readText()
        // 执行测试逻辑
    }
}

这种方式无需额外的设备操作,兼容性最好,适合体积不大的静态测试文件。

3. 手动模拟器的自动化优化

如果选择放弃Gradle托管设备,改用手动模拟器,可以通过CI脚本将创建模拟器、推送文件、执行测试的流程自动化,降低操作复杂度:

示例bash脚本:

# 创建并启动模拟器
avdmanager create avd -n TestPixel2 -k "system-images;android-30;default;x86_64" -d "pixel_2"
emulator -avd TestPixel2 -no-window -no-audio &

# 等待模拟器就绪
adb wait-for-device
adb shell input keyevent 82 # 解锁设备

# 推送本地文件
adb push ./local-test-files/ /sdcard/test-files/

# 运行仪器化测试
./gradlew connectedAndroidTest

# 关闭模拟器
adb emu kill

你提到的自定义测试实验室方案,适合文件依赖复杂、测试频率高的长期场景,但搭建和维护成本较高,一般作为最后选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 18:32:50