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

Github Actions运行MacOS端Android测试时Detox无法找到adb且初始化失败问题求助

解决Github Actions MacOS环境下Detox初始化失败(adb不存在)的问题

我之前也碰到过类似的Detox初始化坑,结合你描述的场景——CI里跑测试报错,但SSH手动执行正常、单独跑adb命令也没问题——大概率是Detox进程没正确加载到Android SDK的环境变量,尤其是MacOS上交互式shell和非交互式shell的环境差异导致的。下面是几个可以尝试的解决方向:

1. 给Detox显式指定adb路径

因为Detox可能没继承到正确的PATH,所以可以直接在配置里硬编码adb的位置,或者在启动命令里先补全环境变量:

  • 在detox.config.js里添加adb路径配置:
    module.exports = {
      configurations: {
        android: {
          // 其他配置...
          binaryPath: process.env.ANDROID_HOME 
            ? `${process.env.ANDROID_HOME}/platform-tools/adb` 
            : '~/Library/Android/sdk/platform-tools/adb'
        }
      }
    }
    
  • 或者在Github Actions的测试启动命令前显式导出PATH:
    export PATH="$ANDROID_HOME/platform-tools:$PATH" && detox test
    
    注意:Github Actions里用actions/setup-android后,ANDROID_HOME会自动设为/Users/runner/Library/Android/sdk,直接用这个变量比写用户目录更稳妥。

2. 修正Github Actions的shell环境

Github Actions在MacOS上默认用的是非交互式shell(比如bash --noprofile --norc),不会加载~/.bash_profile或~/.zshrc里的环境变量,但你SSH连接时是交互式shell,会自动加载这些配置。Detox启动时如果依赖这些配置里的变量,就会出问题。
解决方法很简单,在测试步骤里手动加载配置文件,或者直接设置环境变量:

- name: Run Detox Android tests
  run: |
    # 如果用zsh就换成source ~/.zshrc
    source ~/.bash_profile
    detox test
  shell: bash

或者更直接地在步骤里指定ANDROID_HOME和PATH:

- name: Run Detox Android tests
  run: |
    export ANDROID_HOME=/Users/runner/Library/Android/sdk
    export PATH="$ANDROID_HOME/platform-tools:$ANDROID_HOME/tools:$PATH"
    detox test
  shell: bash

3. 验证Detox启动时的环境变量

如果上面的方法都没解决,可以先打印环境变量对比差异:
在Github Actions的测试步骤里添加:

echo "PATH in CI: $PATH"
which adb
detox test

然后和你SSH连接到机器后执行同样命令的结果对比,就能清楚看到Detox进程拿到的PATH里有没有包含adb所在的目录,针对性调整即可。

4. 确认Detox初始化逻辑

虽然你SSH跑是正常的,但还是可以快速检查下测试代码里的初始化顺序:确保detox.init()是第一个被调用的Detox API,没有在初始化前就调用了比如device.launchApp()这类方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 14:22:27