Appium-安装Android SDK on Windows

本文详细介绍如何在Windows环境下安装配置Android SDK及相关组件,包括JDK安装、Android SDK安装与更新、驱动下载、系统环境变量设置等内容,为使用Appium进行自动化测试打下坚实基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Appium-安装Android SDK on Windows

作者: Max.Bai

时间: 2014/09



Android 开发环境搭建-Windows

1. JDK安装

安装Java JDK 1.6 以上,并设置

JAVA_HOME 环境变量

Path 添加:%JAVA_HOME%\bin

2. Android SDK for windows 安装

安装Android SDK for windows: Android\installer_r21-windows.exe

3. 更新Android SDKplatform_tools

打开SDK manager,安装tools 目录下的东西,安装4.2 以上的版本,安装了对应版本的SDK才能创建对应的模拟器

下载不成功请更新host文件,添加如下内容:

#google_android更新

203.208.46.146 dl.google.com

203.208.46.146 dl-ssl.google.com


还下载不成功就打开SDK manager, 设置tool -> options  勾上force。。。

http://zhuanlan.zhihu.com/internet-thinking/19969422

 

4. Devices 驱动下载

下载驱动,下载相关的驱动,比如CPU驱动,arm的或者intel的,后面创建模拟器的时候需要用到,如果没有安装就不能创建相关虚拟机

5. 系统环境变量设置

设置系统变量 Android_Home 为Android安装目录

修改系统变量Path,添加SDK Tool 和 platform_tools  目录

测试 adb 命令可用

6. 开启Android模拟器

打开AVD Manager,创建模拟器:

6.1 创建Android 模拟器

点击Create按钮

 

AVD name:模拟器名称 设置

Device: 需要模拟的设备(屏幕尺寸等。。)

Target: SDK的版本,只显示安装了的,建议使用Level17 以上

CPU: arm 或者 intel,需要sdk中安装对应的驱动

Keyboard: 键盘显示

Skin:

Front Camera: 无

Back Camera: 无

Memory Option: 内存设置

Internal Storage: 模拟器容量

SD card: SD卡容量

Emulation Options: 无

 

6.2 开启Android模拟器

选中AVD 点击Start

等模拟器开启完成,命令行 adb devices 查看刚刚开启的模拟器是否在列表中

 

图片就不上传了,网上资料挺多
[info] [Appium] Welcome to Appium v1.20.2 [info] [Appium] Non-default server args: [info] [Appium] relaxedSecurityEnabled: true [info] [Appium] allowInsecure: { [info] [Appium] } [info] [Appium] denyInsecure: { [info] [Appium] } [info] [Appium] Appium REST http interface listener started on 0.0.0.0:4723[info] [HTTP] --> GET /wd/hub/sessions [info] [HTTP] {} [debug] [GENERIC] Calling AppiumDriver.getSessions() with args: [] [debug] [GENERIC] Responding to client with driver.getSessions() result: [] [info] [HTTP] <-- GET /wd/hub/sessions 200 5 ms - 40 [info] [HTTP] [info] [HTTP] --> POST /wd/hub/session [info] [HTTP] {"desiredCapabilities":{"platformName\"":"Android","newCommandTimeout":0,"connectHardwareKeyboard":true}} [debug] [MJSONWP] Calling AppiumDriver.createSession() with args: [{"platformName\"":"Android","newCommandTimeout":0,"connectHardwareKeyboard":true},null,null] [debug] [BaseDriver] Event 'newSessionRequested' logged at 1750921438941 (15:03:58 GMT+0800 (中国标准时间)) [debug] [BaseDriver] Event 'newSessionStarted' logged at 1750921438942 (15:03:58 GMT+0800 (中国标准时间)) [debug] [MJSONWP] Encountered internal error running command: Error: You must include a platformName capability [debug] [MJSONWP] at AppiumDriver.getDriverAndVersionForCaps (D:\Appium-windows-1.20.2\resources\app\node_modules\appium\lib\appium.js:216:13) [debug] [MJSONWP] at AppiumDriver.createSession (D:\Appium-windows-1.20.2\resources\app\node_modules\appium\lib\appium.js:324:66) [debug] [MJSONWP] at commandExecutor (D:\Appium-windows-1.20.2\resources\app\node_modules\appium\node_modules\appium-base-driver\lib\basedriver\driver.js:334:9) [debug] [MJSONWP] at AppiumDriver.executeCommand (D:\Appium-windows-1.20.2\resources\app\node_modules\appium\node_modules\appium-base-driver\lib\basedriver\driver.js:348:15) [debug] [MJSONWP] at AppiumDriver.executeCommand (D:\Appium-windows-1.20.2\resources\app\node_modules\appium\lib\appium.js:533:26) [debug] [MJSONWP] at asyncHandler (D:\Appium-windows-1.20.2\resources\app\node_modules\appium\node_modules\appium-base-driver\lib\protocol\protocol.js:297:34) [debug] [MJSONWP] at D:\Appium-windows-1.20.2\resources\app\node_modules\appium\node_modules\appium-base-driver\lib\protocol\protocol.js:423:15 [debug] [MJSONWP] at Layer.handle [as handle_request] (D:\Appium-windows-1.20.2\resources\app\node_modules\appium\node_modules\express\lib\router\layer.js:95:5) [debug] [MJSONWP] at next (D:\Appium-windows-1.20.2\resources\app\node_modules\appium\node_modules\express\lib\router\route.js:137:13) [debug] [MJSONWP] at Route.dispatch (D:\Appium-windows-1.20.2\resources\app\node_modules\appium\node_modules\express\lib\router\route.js:112:3) [debug] [MJSONWP] at Layer.handle [as handle_request] (D:\Appium-windows-1.20.2\resources\app\node_modules\appium\node_modules\express\lib\router\layer.js:95:5) [debug] [MJSONWP] at D:\Appium-windows-1.20.2\resources\app\node_modules\appium\node_modules\express\lib\router\index.js:281:22 [debug] [MJSONWP] at Function.process_params (D:\Appium-windows-1.20.2\resources\app\node_modules\appium\node_modules\express\lib\router\index.js:335:12) [debug] [MJSONWP] at next (D:\Appium-windows-1.20.2\resources\app\node_modules\appium\node_modules\express\lib\router\index.js:275:10) [debug] [MJSONWP] at logger (D:\Appium-windows-1.20.2\resources\app\node_modules\appium\node_modules\morgan\index.js:144:5) [debug] [MJSONWP] at Layer.handle [as handle_request] (D:\Appium-windows-1.20.2\resources\app\node_modules\appium\node_modules\express\lib\router\layer.js:95:5) [debug] [MJSONWP] at trim_prefix (D:\Appium-windows-1.20.2\resources\app\node_modules\appium\node_modules\express\lib\router\index.js:317:13) [debug] [MJSONWP] at D:\Appium-windows-1.20.2\resources\app\node_modules\appium\node_modules\express\lib\router\index.js:284:7 [debug] [MJSONWP] at Function.process_params (D:\Appium-windows-1.20.2\resources\app\node_modules\appium\node_modules\express\lib\router\index.js:335:12) [debug] [MJSONWP] at next (D:\Appium-windows-1.20.2\resources\app\node_modules\appium\node_modules\express\lib\router\index.js:275:10) [debug] [MJSONWP] at D:\Appium-windows-1.20.2\resources\app\node_modules\appium\node_modules\body-parser\lib\read.js:130:5 [debug] [MJSONWP] at invokeCallback (D:\Appium-windows-1.20.2\resources\app\node_modules\appium\node_modules\raw-body\index.js:224:16) [debug] [MJSONWP] at done (D:\Appium-windows-1.20.2\resources\app\node_modules\appium\node_modules\raw-body\index.js:213:7) [debug] [MJSONWP] at IncomingMessage.onEnd (D:\Appium-windows-1.20.2\resources\app\node_modules\appium\node_modules\raw-body\index.js:273:7) [debug] [MJSONWP] at IncomingMessage.emit (events.js:208:15) [debug] [MJSONWP] at endReadableNT (_stream_readable.js:1168:12) [debug] [MJSONWP] at processTicksAndRejections (internal/process/task_queues.js:77:11) [info] [HTTP] <-- POST /wd/hub/session 500 27 ms - 179 [info] [HTTP]  [info] [HTTP] --> DELETE /wd/hub/session [info] [HTTP] {} [debug] [HTTP] No route found for /wd/hub/session [info] [HTTP] <-- DELETE /wd/hub/session 404 5 ms - 211 [info] [HTTP] [info] [HTTP] --> POST /wd/hub/session [info] [HTTP] {"desiredCapabilities":{"ensureWebviewsHavePages":true,"platformName":"Android","newCommandTimeout":0,"connectHardwareKeyboard":true}} [debug] [MJSONWP] Calling AppiumDriver.createSession() with args: [{"ensureWebviewsHavePages":true,"platformName":"Android","newCommandTimeout":0,"connectHardwareKeyboard":true},null,null] [debug] [BaseDriver] Event 'newSessionRequested' logged at 1750921458583 (15:04:18 GMT+0800 (中国标准时间)) [warn] [Appium] [warn] [Appium] ====================================================================== [warn] [Appium] DEPRECATION WARNING: [warn] [Appium] [warn] [Appium] The 'automationName' capability was not provided in the desired [warn] [Appium] capabilities for this Android session [warn] [Appium] [warn] [Appium] Setting 'automationName=UiAutomator2' by default and using the [warn] [Appium] UiAutomator2 Driver [warn] [Appium] [warn] [Appium] The next major version of Appium (2.x) will **require** the [warn] [Appium] 'automationName' capability to be set for all sessions on all [warn] [Appium] platforms [warn] [Appium] [warn] [Appium] In previous versions (Appium <= 1.13.x), the default was [warn] [Appium] 'automationName=UiAutomator1' [warn] [Appium] [warn] [Appium] If you wish to use that automation instead of UiAutomator2, please [warn] [Appium] add 'automationName=UiAutomator1' to your desired capabilities [warn] [Appium] [warn] [Appium] For more information about drivers, please visit [warn] [Appium] http://appium.io/docs/en/about-appium/intro/ and explore the [warn] [Appium] 'Drivers' menu [warn] [Appium] [warn] [Appium] ====================================================================== [warn] [Appium] [info] [Appium] Appium v1.20.2 creating new AndroidUiautomator2Driver (v1.61.2) session [info] [Appium] Applying relaxed security to 'AndroidUiautomator2Driver' as per server command line argument. All insecure features will be enabled unless explicitly disabled by --deny-insecure [debug] [BaseDriver] Creating session with MJSONWP desired capabilities: { [debug] [BaseDriver] "ensureWebviewsHavePages": true, [debug] [BaseDriver] "platformName": "Android", [debug] [BaseDriver] "newCommandTimeout": 0, [debug] [BaseDriver] "connectHardwareKeyboard": true [debug] [BaseDriver] } [warn] [BaseDriver] The following capabilities were provided, but are not recognized by Appium: [warn] [BaseDriver] connectHardwareKeyboard [info] [BaseDriver] Session created with session id: a7def776-063b-41be-b908-d8c598571316 [info] [UiAutomator2] Neither 'app' nor 'appPackage' was set. Starting UiAutomator2 without the target application[debug] [UiAutomator2] Deleting UiAutomator2 session [debug] [BaseDriver] Event 'newSessionStarted' logged at 1750921458808 (15:04:18 GMT+0800 (中国标准时间)) [debug] [MJSONWP] Encountered internal error running command: Error: Could not find 'adb.exe' in ["D:\\android-sdk-windows\\platform-tools\\adb.exe","D:\\android-sdk-windows\\emulator\\adb.exe","D:\\android-sdk-windows\\cmdline-tools\\latest\\bin\\adb.exe","D:\\android-sdk-windows\\tools\\adb.exe","D:\\android-sdk-windows\\tools\\bin\\adb.exe","D:\\android-sdk-windows\\adb.exe"]. Do you have Android Build Tools installed at 'D:\android-sdk-windows'? [debug] [MJSONWP] at ADB.getBinaryFromSdkRoot (D:\Appium-windows-1.20.2\resources\app\node_modules\appium\node_modules\appium-adb\lib\tools\system-calls.js:125:11) [debug] [MJSONWP] at ADB.getSdkBinaryPath (D:\Appium-windows-1.20.2\resources\app\node_modules\appium\node_modules\appium-adb\lib\tools\system-calls.js:44:10) [debug] [MJSONWP] at ADB.getAdbWithCorrectAdbPath (D:\Appium-windows-1.20.2\resources\app\node_modules\appium\node_modules\appium-adb\lib\tools\adb-commands.js:89:26) [debug] [MJSONWP] at Function.createADB (D:\Appium-windows-1.20.2\resources\app\node_modules\appium\node_modules\appium-adb\lib\adb.js:56:3) [debug] [MJSONWP] at Object.createBaseADB (D:\Appium-windows-1.20.2\resources\app\node_modules\appium\node_modules\appium-android-driver\lib\android-helpers.js:108:10) [debug] [MJSONWP] at Object.getDeviceInfoFromCaps (D:\Appium-windows-1.20.2\resources\app\node_modules\appium\node_modules\appium-android-driver\lib\android-helpers.js:193:15) [debug] [MJSONWP] at AndroidUiautomator2Driver.startUiAutomator2Session (D:\Appium-windows-1.20.2\resources\app\node_modules\appium\node_modules\appium-uiautomator2-driver\lib\driver.js:327:26) [debug] [MJSONWP] at AndroidUiautomator2Driver.createSession (D:\Appium-windows-1.20.2\resources\app\node_modules\appium\node_modules\appium-uiautomator2-driver\lib\driver.js:224:7) [debug] [MJSONWP] at AppiumDriver.createSession (D:\Appium-windows-1.20.2\resources\app\node_modules\appium\lib\appium.js:371:35) [info] [HTTP] <-- POST /wd/hub/session 500 258 ms - 574 [info] [HTTP]  [info] [HTTP] --> DELETE /wd/hub/session [info] [HTTP] {} [debug] [HTTP] No route found for /wd/hub/session [info] [HTTP] <-- DELETE /wd/hub/session 404 0 ms - 211 [info] [HTTP] 
最新发布
06-27
<think>我们正在解决Appium启动Android会话时因缺少platformName能力或相关配置错误导致的500内部错误。根据错误日志,我们看到一个500错误发生在创建会话时,同时后续有一个404错误(因为会话未创建成功,所以删除会话时找不到路由)。用户明确提到错误信息:"Error:YoumustincludeaplatformNamecapabilitywhenstartingAndroidsession"这意味着在创建会话时,desiredcapabilities中没有包含必需的platformName。然而,从用户提供的引用[2]中,我们可以看到在调用createSession时,实际上是包含了platformName的:"platformName":"Android"因此,问题可能不是缺少platformName,而是其他原因导致Appium服务器在解析capabilities时出现问题,或者环境配置问题。结合引用[1]中提到的卸载uiautomator2相关包的方法,我们推测可能是设备上残留的旧版本Appium服务导致冲突。解决方案步骤:1.检查desiredcapabilities:确保在代码中正确设置了platformName,并且值正确(注意大小写,通常首字母大写,如"Android"或"iOS")。例如,在Java中:DesiredCapabilitiescaps=newDesiredCapabilities();caps.setCapability("platformName","Android");2.清理设备上的Appium残留:使用以下命令卸载设备上可能存在的旧版本Appium服务:adbuninstallio.appium.uiautomator2.serveradbuninstallio.appium.uiautomator2.server.testadbuninstallio.appium.uiautomator2adbuninstallio.appium.settings#这个也可能需要3.重启Appium服务器:清理后重新启动Appium服务器,并再次运行测试。4.如果问题依旧,尝试更新或降级Appium版本:升级:npminstall-gappium@latest降级:npminstall-gappium@1.19.1#选择一个稳定版本5.检查环境:运行`appium-doctor`来检查环境配置是否正确,特别是AndroidSDK的环境变量。6.确保设备连接正常:使用`adbdevices`确认设备已连接。7.如果使用真机,确保USB调试已开启,并且电脑已授权。8.如果使用模拟器,确保模拟器已启动。9.查看Appium日志:在启动Appium时添加日志参数(例如`appium--logappium.log`),然后运行测试,查看详细的错误信息。10.尝试在capabilities中明确指定automationName为UiAutomator2(对于Android5.0以上):caps.setCapability("automationName","UiAutomator2");由于用户使用的是Appium1.20.2,该版本默认使用UiAutomator2,但有时需要显式指定。根据上述分析,我们给出具体步骤:步骤1:清理设备上的Appium残留在命令行中执行:adbuninstallio.appium.uiautomator2.serveradbuninstallio.appium.uiautomator2.server.testadbuninstallio.appium.uiautomator2adbuninstallio.appium.settings如果这些包不存在,会提示失败,忽略即可。步骤2:在capabilities中显式指定automationName例如:"platformName":"Android","automationName":"UiAutomator2",...其他能力...步骤3:重启设备(有时需要重启设备使卸载生效)步骤4:重启Appium服务器和测试脚本如果问题解决,则完成;否则,继续以下步骤:步骤5:检查platformName的拼写和大小写确保没有拼写错误,例如"platformname"(小写)是不行的,必须是"platformName"。步骤6:使用appium-doctor检查环境安装appium-doctor:npminstall-gappium-doctor运行:appium-doctor--android步骤7:查看Appium日志在启动Appium时,使用`appium--logappium.log`,然后运行测试,查看appium.log中的错误堆栈。如果以上步骤都无法解决,考虑升级或降级Appium版本。示例代码(Java):DesiredCapabilitiescapabilities=newDesiredCapabilities();capabilities.setCapability("platformName","Android");capabilities.setCapability("automationName","UiAutomator2");capabilities.setCapability("deviceName","your_device_name");capabilities.setCapability("app","/path/to/app.apk");//其他必要的能力driver=newAndroidDriver(newURL("http://127.0.0.1:4723/wd/hub"),capabilities);注意:URL中的路径必须是`/wd/hub`。最后,根据用户提供的引用[1]中的经验,卸载设备上的残留Appium服务包通常能解决类似问题[^1]。§§相关问题§§1.如何解决Appium中UiAutomator2的安装失败问题?2.如何正确配置Appium所需的Android环境变量?3.Appium的desiredcapabilities中哪些是必需的?</think>### 解决 Appium 启动 Android 会话时的 `500` 错误:缺少 `platformName` 能力问题 #### 错误分析 您遇到的 `500` 内部错误和 `Error: You must include a platformName capability` 提示表明: 1. **核心问题**:Appium 在创建会话时未检测到必需的 `platformName` 能力(即使日志显示已包含) 2. **深层原因**: - Appium 服务端未正确解析客户端传递的 capabilities(常见于版本兼容性问题) - 设备残留旧版本 Appium 组件导致冲突(如 `uiautomator2` 服务包)[^1] - 能力参数格式错误(如大小写不一致、值类型错误) #### 完整解决方案(逐步操作) ##### 步骤 1:验证并修复 capabilities 配置 ```python # 正确示例(Python) desired_caps = { 'platformName': 'Android', # 必须首字母大写 'platformVersion': '7.0', # 字符串类型 'deviceName': 'PBV7N16C29005298', 'appPackage': 'com.xiaochang.easylive', 'appActivity': 'com.xiaochang.easylive.pages.main.activitys.WelcomeActivity', 'automationName': 'UiAutomator2' # 显式指定引擎 } driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps) ``` **关键检查点**: - `platformName` 值必须为 **`Android`**(首字母大写) - 所有键名使用**小写蛇形命名**(如 `appPackage` 而非 `appPackageName`) - 数值类型参数(如 `platformVersion`)需转为**字符串** ##### 步骤 2:清理设备残留组件(解决冲突) 执行以下 ADB 命令卸载冲突包: ```bash adb uninstall io.appium.uiautomator2.server adb uninstall io.appium.uiautomator2.server.test adb uninstall io.appium.settings adb uninstall io.appium.uiautomator2 ``` 重启设备后重试会话创建,Appium 会自动安装新版组件[^1]。 ##### 步骤 3:显式指定自动化引擎 在 capabilities 中添加: ```json { "automationName": "UiAutomator2" // 强制使用 UIA2 引擎 } ``` > **为何有效**:Appium 1.20.2 默认引擎可能因设备 Android 版本切换失败,显式指定可避免路由解析错误。 ##### 步骤 4:环境验证与修复 运行诊断命令: ```bash appium-doctor --android ``` 修复所有 ❌ 项,重点关注: 1. `ANDROID_HOME` 环境变量是否指向 SDK 路径 2. `adb` 工具是否在系统 PATH 中 3. Java JDK 版本 ≥ 8 ##### 步骤 5:版本兼容性处理 若问题持续,尝试: ```bash # 降级到稳定版本 npm uninstall -g appium npm install -g appium@1.19.1 # 或升级到新版 npm install -g appium@latest ``` #### 验证成功的日志特征 成功会话会显示: ``` [Appium] Creating new AndroidUiautomator2Driver session [BaseDriver] Session created with session id: 3a1b2c3d-4e5f-6a7b-8c9d0e1f2a3b ``` #### 预防措施 1. 每次测试前清理设备残留:`adb shell pm list packages | grep appium | xargs -n1 adb uninstall` 2. 在 capabilities 中始终包含: ```json { "platformName": "Android", "automationName": "UiAutomator2" } ``` 3. 使用 `appium:capabilities` 前缀避免歧义: ```python caps = { 'appium:platformName': 'Android', 'appium:appPackage': 'com.example.app' } ``` 通过以上步骤,可解决因 `platformName` 解析失败导致的 500 错误。若问题依旧,请提供 `appium --log` 的完整输出进一步分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值