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

如何在Docker Container中运行Android Instrumented Tests并解决兼容问题?

Docker容器运行Android 15 Instrumented Tests失败的修复方案

Dockerfile 修正要点

  • 必须安装与SDK35(对应Android15)完全匹配的系统镜像,别混装其他版本的镜像
  • 明确指定模拟器ABI(比如x86_64),避免自动选到不兼容的架构
  • 添加环境变量,让Gradle能识别模拟器的API等级
  • 启动模拟器时加必要参数,等设备完全就绪再跑测试

修改后的Dockerfile关键片段:

# 安装Android15对应系统镜像
RUN sdkmanager "system-images;android-35;google_apis;x86_64"

# 配置环境变量
ENV ANDROID_SDK_ROOT /opt/android-sdk
ENV ANDROID_AVD_HOME /root/.android/avd
ENV API_LEVEL 35

# 创建并启动模拟器
RUN echo "no" | avdmanager create avd -n test_avd -k "system-images;android-35;google_apis;x86_64" --force
CMD emulator -avd test_avd -no-window -no-audio -no-boot-anim -gpu swiftshader_indirect -verbose & \
    # 轮询等待设备连接成功
    until adb devices | grep -v "List of devices attached" | grep -q "device"; do sleep 2; done && \
    # 解锁设备,避免锁屏卡测试
    adb shell input keyevent 82 && \
    # 执行测试任务
    ./gradlew connectedAndroidTest

build.gradle.kts 配置调整

  • 明确指定测试兼容的API等级范围,一定要包含35
  • 配置testOptions里的设备过滤规则,精准匹配API35的设备

修改后的build.gradle.kts关键片段:

android {
    compileSdk = 35
    defaultConfig {
        minSdk = 24 // 按你项目实际需求改
        targetSdk = 35
        testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
        // 给测试Runner指定API等级参数
        testInstrumentationRunnerArguments["android.testInstrumentationRunnerArguments.apiLevel"] = "35"
    }

    testOptions {
        animationsDisabled = true
        devices {
            // 只包含API35的设备
            includeDevices {
                apiLevel 35
            }
        }
    }
}

额外排查动作

  • 启动容器时加--privileged参数,避免模拟器因权限不足无法正常运转
  • 跑测试前手动查设备状态:在容器里执行adb devices和adb shell getprop ro.build.version.sdk,确认设备已连接且SDK等级显示为35
  • 先清Gradle缓存:执行./gradlew clean再跑测试

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 10:35:53