启动Appium报错未导出ANDROID_HOME或ANDROID_SDK_ROOT环境变量
问题场景
编写移动端自动化脚本时,计划通过代码方式启动Appium服务,后续在已打开的模拟器中运行自动化逻辑。
代码启动Appium的实现如下:
AppiumDriverLocalService service = AppiumDriverLocalService.buildService(new AppiumServiceBuilder().usingDriverExecutable(new File(nodePath)).withAppiumJS(new File(appiumPath)).withIPAddress("127.0.0.1") .usingPort(4723)); service.start();
当前现象:Appium服务启动成功(接口返回200响应),capabilities配置已加载完成,但运行自动化逻辑时抛出报错:
Error: Neither ANDROID_HOME nor ANDROID_SDK_ROOT environment variable was exported
解决方案
报错核心原因:通过代码方式拉起的Appium服务进程,未获取到Android SDK对应的路径环境变量,无法定位SDK相关执行文件。可通过以下任意一种方式修复:
- 优先方案:在构建Appium服务时直接注入环境变量,不依赖系统全局环境配置,稳定性最高。参考实现代码如下:
import java.util.HashMap; import java.util.Map; // 替换为本地Android SDK的实际安装绝对路径 // Windows常见路径示例:C:\\Users\\你的用户名\\AppData\\Local\\Android\\Sdk // Mac常见路径示例:/Users/你的用户名/Library/Android/sdk String androidSdkAbsolutePath = "替换为你本地SDK实际路径"; Map<String, String> appiumEnv = new HashMap<>(System.getenv()); // 同时配置两个SDK路径变量,兼容不同版本Appium的读取逻辑 appiumEnv.put("ANDROID_HOME", androidSdkAbsolutePath); appiumEnv.put("ANDROID_SDK_ROOT", androidSdkAbsolutePath); AppiumDriverLocalService service = AppiumDriverLocalService.buildService( new AppiumServiceBuilder() .usingDriverExecutable(new File(nodePath)) .withAppiumJS(new File(appiumPath)) .withIPAddress("127.0.0.1") .usingPort(4723) // 传入携带SDK配置的环境变量 .withEnvironment(appiumEnv) ); service.start();
- 系统环境变量修复方案:如果不想修改代码注入逻辑,先确认系统全局已正确配置
ANDROID_HOME和ANDROID_SDK_ROOT两个环境变量,变量值指向SDK根目录,同时将SDK下的platform-tools、build-tools、emulator目录加入系统PATH。配置完成后必须彻底关闭运行代码的IDE/终端进程再重新打开,避免进程继承旧的无SDK配置的环境变量,导致拉起的Appium服务依然读不到路径。 - 路径校验:配置完成后确认SDK路径下存在
platform-tools、build-tools、emulator三个核心子目录,避免路径填写错误指向非SDK目录。
内容的提问来源于stack exchange,提问作者preetam
相关产品推荐
相关产品推荐

