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

Travis CI Android模拟器网络连接问题:是否支持及配置方法?

Travis CI Android模拟器网络支持与配置指南

首先明确:Travis CI的Android模拟器是支持网络连接的,默认状态下网络功能已启用,但偶尔会因为模拟器启动配置、网络延迟或SDK组件不全等问题,出现网络不通的情况——这大概率就是你的FCM Token获取测试在Travis上失败的原因。下面是具体的排查和配置方案:

一、核心问题分析

你的测试在本地正常但Travis上失败,本质是模拟器启动后网络还未完全就绪,导致应用无法连接到Firebase服务器获取Token。Travis的服务器网络环境和本地有差异,需要额外配置确保模拟器网络稳定。

二、修改.travis.yml的关键调整

针对你现有的配置,我整理了几个关键优化点:

1. 优化模拟器启动参数

默认启动参数可能存在网络性能问题,建议添加-no-snapshot-save和-netfast参数,提升网络稳定性:

emulator -avd test -no-audio -no-window -no-snapshot-save -netfast &
  • -no-snapshot-save:禁用快照启动,保证每次都是全新的模拟器状态,避免快照残留的网络异常
  • -netfast:启用网络加速模式,优化模拟器的网络传输效率

2. 增加网络就绪等待时间

android-wait-for-emulator仅能判断模拟器是否启动完成,但网络可能还未连通。建议在模拟器解锁后增加延迟,甚至主动验证网络:

- android-wait-for-emulator
- adb shell input keyevent 82 &
# 等待网络完全稳定,可根据实际情况调整时长
- sleep 30
# 可选:通过ping公共DNS验证网络连通性
- adb shell ping -c 3 8.8.8.8

3. 补全必要的SDK组件

FCM依赖Google Play服务,你的before_script中需要确保该组件已安装,同时保持BuildTools版本与项目一致:

before_script:
  - echo y | ${ANDROID_HOME}/tools/bin/sdkmanager --channel=3 "tools" "platform-tools" "build-tools;26.0.2" "platforms;android-22" "extras;google;m2repository" "extras;google;google_play_services"

4. 完整的修正后.travis.yml

language: android
jdk: oraclejdk8
sudo: required # 确保足够的内存和网络带宽
android:
  components:
    - tools
    - tools # 重复安装以确保获取最新版本
    - build-tools-26.0.2
    - android-22
    - sys-img-armeabi-v7a-android-22

before_cache:
  - rm -f  $HOME/.gradle/caches/modules-2/modules-2.lock
  - rm -fr $HOME/.gradle/caches/*/plugin-resolution/
cache:
  directories:
    - $HOME/.gradle/caches/
    - $HOME/.gradle/wrapper/
    - $HOME/.android/build-cache # 修正原配置中的缩进问题

before_script:
  # 更新SDK组件,确保Google Play服务等依赖齐全
  - echo y | ${ANDROID_HOME}/tools/bin/sdkmanager --channel=3 "tools" "platform-tools" "build-tools;26.0.2" "platforms;android-22" "extras;google;m2repository" "extras;google;google_play_services"
  
  # 创建并启动模拟器,添加网络优化参数
  - echo no | android create avd --force -n test -t android-22 --abi armeabi-v7a
  - emulator -avd test -no-audio -no-window -no-snapshot-save -netfast &
  - android-wait-for-emulator
  - adb shell input keyevent 82 & # 解锁模拟器
  # 等待网络稳定并验证连通性
  - sleep 30
  - adb shell ping -c 3 8.8.8.8 || echo "网络连接检测异常,继续执行测试"

script: ./build.sh

三、额外的测试代码优化建议

如果调整配置后仍有问题,可以在测试代码中增加重试逻辑,适配Travis较慢的网络环境:

@Test
public void testFCMToken() throws InterruptedException {
    int retryCount = 0;
    String token = null;
    // 最多重试3次,每次间隔5秒
    while (retryCount < 3 && token == null) {
        Thread.sleep(5000);
        token = FirebaseInstanceId.getInstance().getToken();
        retryCount++;
    }
    assertNotNull("FCM Token 不应为空", token);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:20:24