@appium/mcp-documentation 1.0.3 → 1.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -0
- package/package.json +4 -7
- package/src/resources/submodules/appium/.github/PULL_REQUEST_TEMPLATE.md +28 -0
- package/src/resources/submodules/appium/.github/copilot-instructions.md +9 -0
- package/src/resources/submodules/appium/CHANGELOG.md +45 -0
- package/src/resources/submodules/appium/GOVERNANCE.md +189 -0
- package/src/resources/submodules/appium/README.md +221 -0
- package/src/resources/submodules/appium/ROADMAP.md +30 -0
- package/src/resources/submodules/appium/SPONSORS.md +3 -0
- package/src/resources/submodules/appium/docs/README.md +6 -0
- package/src/resources/submodules/appium/docs/payout.md +35 -0
- package/src/resources/submodules/appium/packages/appium/CHANGELOG.md +1547 -0
- package/src/resources/submodules/appium/packages/appium/README.md +221 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/blog/index.md +2 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-appiumconf2024.md +45 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-browserstack-as-strategic-partner.md +46 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-headspin-as-development-partner.md +47 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-lambdatest-as-development-partner.md +36 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-lambdatest-as-strategic-partner.md +42 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-sauce-labs-as-strategic-partner.md +36 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-sponsorship-program.md +48 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/appium3.md +40 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/hello-world.md +15 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/contributing/index.md +150 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/developing/build-docs.md +86 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/developing/build-doctor-checks.md +141 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/developing/build-drivers.md +1002 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/developing/build-plugins.md +523 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/developing/config-system.md +451 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/developing/index.md +18 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/developing/sensitive.md +49 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/ecosystem/clients.md +132 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/ecosystem/drivers.md +207 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/ecosystem/index.md +45 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/ecosystem/plugins.md +138 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/ecosystem/tools.md +106 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/branch-testing.md +57 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/caching.md +76 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/caps.md +271 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/config.md +98 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/context.md +44 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/event-timing.md +73 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/execute-methods.md +122 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/grid.md +178 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/headers.md +17 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/log-filters.md +86 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/managing-exts.md +87 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/migrating-1-to-2.md +368 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/migrating-2-to-3.md +464 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/security.md +87 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/settings.md +68 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/tls.md +42 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/index.md +59 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/intro/appium.md +202 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/intro/clients.md +127 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/intro/drivers.md +188 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/intro/history.md +196 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/intro/index.md +39 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/index.md +29 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/install.md +50 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/next-steps.md +23 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/requirements.md +29 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/test-dotnet.md +105 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/test-java.md +23 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/test-js.md +75 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/test-py.md +60 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/test-rb.md +83 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/uiauto2-driver.md +144 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/appium.md +394 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/bidi.md +70 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/index.md +30 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/jsonwp.md +214 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/mjsonwp.md +151 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/others.md +736 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/plugins.md +289 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/webdriver.md +1114 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/cli/env-vars.md +31 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/cli/extensions.md +246 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/cli/index.md +36 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/cli/insecure-features.md +24 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/cli/server.md +78 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/cli/setup.md +76 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/index.md +31 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/session/caps.md +56 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/session/index.md +23 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/resources/index.md +28 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/sponsors/index.md +69 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/blog/index.md +2 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-appiumconf2024.md +45 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-browserstack-as-strategic-partner.md +46 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-headspin-as-development-partner.md +47 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-lambdatest-as-development-partner.md +34 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-lambdatest-as-strategic-partner.md +41 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-sauce-labs-as-strategic-partner.md +36 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-sponsorship-program.md +48 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/appium3.md +40 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/hello-world.md +15 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/contributing/index.md +158 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/developing/build-docs.md +86 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/developing/build-doctor-checks.md +141 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/developing/build-drivers.md +1010 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/developing/build-plugins.md +529 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/developing/config-system.md +468 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/developing/index.md +18 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/developing/sensitive.md +49 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/ecosystem/clients.md +143 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/ecosystem/drivers.md +219 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/ecosystem/index.md +45 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/ecosystem/plugins.md +140 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/ecosystem/tools.md +115 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/branch-testing.md +57 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/caching.md +78 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/caps.md +276 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/config.md +102 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/context.md +44 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/event-timing.md +75 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/execute-methods.md +142 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/grid.md +178 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/headers.md +17 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/log-filters.md +86 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/managing-exts.md +89 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/migrating-1-to-2.md +402 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/migrating-2-to-3.md +458 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/security.md +89 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/settings.md +70 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/tls.md +43 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/index.md +55 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/intro/appium.md +191 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/intro/clients.md +139 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/intro/drivers.md +188 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/intro/history.md +196 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/intro/index.md +39 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/index.md +23 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/install.md +47 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/next-steps.md +19 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/requirements.md +29 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/test-dotnet.md +107 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/test-java.md +23 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/test-js.md +77 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/test-py.md +63 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/test-rb.md +85 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/uiauto2-driver.md +148 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/appium.md +395 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/bidi.md +71 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/index.md +30 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/jsonwp.md +215 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/mjsonwp.md +152 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/others.md +737 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/plugins.md +291 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/webdriver.md +1114 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/cli/env-vars.md +31 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/cli/extensions.md +247 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/cli/index.md +36 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/cli/insecure-features.md +23 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/cli/server.md +78 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/cli/setup.md +78 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/index.md +31 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/session/caps.md +56 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/session/index.md +23 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/resources/index.md +28 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/sponsors/index.md +66 -0
- package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/appium-logo-horiz-white.png +0 -0
- package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/appium-logo-horiz.png +0 -0
- package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/appium-logo-white.png +0 -0
- package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/appium-logo.png +0 -0
- package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/sponsor-logo-browserstack-dark.png +0 -0
- package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/sponsor-logo-browserstack-light.png +0 -0
- package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/sponsor-logo-lambdatest-dark.png +0 -0
- package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/sponsor-logo-lambdatest-light.png +0 -0
- package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/sponsor-logo-sauce.png +0 -0
- package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/sponsor-logo-testmuai-dark.png +0 -0
- package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/sponsor-logo-testmuai-light.png +0 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/blog/index.md +2 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-appiumconf2024.md +45 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-browserstack-as-strategic-partner.md +46 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-headspin-as-development-partner.md +47 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-lambdatest-as-development-partner.md +34 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-lambdatest-as-strategic-partner.md +41 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-sauce-labs-as-strategic-partner.md +36 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-sponsorship-program.md +48 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/appium3.md +40 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/hello-world.md +15 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/contributing/index.md +132 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/developing/build-docs.md +86 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/developing/build-doctor-checks.md +141 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/developing/build-drivers.md +1010 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/developing/build-plugins.md +529 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/developing/config-system.md +468 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/developing/index.md +18 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/developing/sensitive.md +49 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/ecosystem/clients.md +143 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/ecosystem/drivers.md +219 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/ecosystem/index.md +45 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/ecosystem/plugins.md +140 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/ecosystem/tools.md +115 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/branch-testing.md +57 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/caching.md +78 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/caps.md +279 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/config.md +102 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/context.md +44 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/event-timing.md +75 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/execute-methods.md +142 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/grid.md +178 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/headers.md +17 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/log-filters.md +86 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/managing-exts.md +89 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/migrating-1-to-2.md +410 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/migrating-2-to-3.md +459 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/security.md +89 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/settings.md +70 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/tls.md +43 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/index.md +54 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/intro/appium.md +91 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/intro/clients.md +100 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/intro/drivers.md +101 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/intro/history.md +72 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/intro/index.md +36 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/index.md +23 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/install.md +47 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/next-steps.md +19 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/requirements.md +21 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/test-dotnet.md +99 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/test-java.md +20 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/test-js.md +62 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/test-py.md +57 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/test-rb.md +80 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/uiauto2-driver.md +119 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/appium.md +395 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/bidi.md +71 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/index.md +30 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/jsonwp.md +215 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/mjsonwp.md +152 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/others.md +737 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/plugins.md +291 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/webdriver.md +1114 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/cli/env-vars.md +31 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/cli/extensions.md +247 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/cli/index.md +36 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/cli/insecure-features.md +23 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/cli/server.md +78 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/cli/setup.md +78 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/index.md +31 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/session/caps.md +56 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/session/index.md +23 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/resources/index.md +28 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/sponsors/index.md +66 -0
- package/src/resources/submodules/appium/packages/appium/types/manifest/README.md +30 -0
- package/src/resources/submodules/appium/packages/base-driver/CHANGELOG.md +1244 -0
- package/src/resources/submodules/appium/packages/base-driver/README.md +15 -0
- package/src/resources/submodules/appium/packages/base-driver/docs/mjsonwp/errors.md +82 -0
- package/src/resources/submodules/appium/packages/base-driver/docs/mjsonwp/protocol-methods.md +182 -0
- package/src/resources/submodules/appium/packages/base-driver/static/appium.png +0 -0
- package/src/resources/submodules/appium/packages/base-plugin/CHANGELOG.md +764 -0
- package/src/resources/submodules/appium/packages/base-plugin/README.md +15 -0
- package/src/resources/submodules/appium/packages/docutils/CHANGELOG.md +1038 -0
- package/src/resources/submodules/appium/packages/docutils/README.md +27 -0
- package/src/resources/submodules/appium/packages/driver-test-support/CHANGELOG.md +790 -0
- package/src/resources/submodules/appium/packages/driver-test-support/README.md +103 -0
- package/src/resources/submodules/appium/packages/eslint-config-appium-ts/CHANGELOG.md +256 -0
- package/src/resources/submodules/appium/packages/eslint-config-appium-ts/README.md +47 -0
- package/src/resources/submodules/appium/packages/execute-driver-plugin/CHANGELOG.md +671 -0
- package/src/resources/submodules/appium/packages/execute-driver-plugin/README.md +55 -0
- package/src/resources/submodules/appium/packages/fake-driver/CHANGELOG.md +603 -0
- package/src/resources/submodules/appium/packages/fake-driver/README.md +7 -0
- package/src/resources/submodules/appium/packages/fake-driver/lib/screen.png +0 -0
- package/src/resources/submodules/appium/packages/fake-plugin/CHANGELOG.md +780 -0
- package/src/resources/submodules/appium/packages/fake-plugin/README.md +7 -0
- package/src/resources/submodules/appium/packages/images-plugin/CHANGELOG.md +691 -0
- package/src/resources/submodules/appium/packages/images-plugin/README.md +27 -0
- package/src/resources/submodules/appium/packages/images-plugin/docs/find-by-image.md +65 -0
- package/src/resources/submodules/appium/packages/images-plugin/docs/image-comparison.md +203 -0
- package/src/resources/submodules/appium/packages/images-plugin/test/fixtures/appstore.png +0 -0
- package/src/resources/submodules/appium/packages/images-plugin/test/fixtures/img1.png +0 -0
- package/src/resources/submodules/appium/packages/images-plugin/test/fixtures/img2.png +0 -0
- package/src/resources/submodules/appium/packages/images-plugin/test/fixtures/img2_part.png +0 -0
- package/src/resources/submodules/appium/packages/logger/CHANGELOG.md +212 -0
- package/src/resources/submodules/appium/packages/logger/README.md +31 -0
- package/src/resources/submodules/appium/packages/opencv/CHANGELOG.md +446 -0
- package/src/resources/submodules/appium/packages/opencv/README.md +68 -0
- package/src/resources/submodules/appium/packages/opencv/test/e2e/images/appium-diagram.jpg +0 -0
- package/src/resources/submodules/appium/packages/opencv/test/e2e/images/cc1.png +0 -0
- package/src/resources/submodules/appium/packages/opencv/test/e2e/images/cc2.png +0 -0
- package/src/resources/submodules/appium/packages/opencv/test/e2e/images/cc_rotated.png +0 -0
- package/src/resources/submodules/appium/packages/opencv/test/e2e/images/findwaldo.jpg +0 -0
- package/src/resources/submodules/appium/packages/opencv/test/e2e/images/number5.png +0 -0
- package/src/resources/submodules/appium/packages/opencv/test/e2e/images/waldo.jpg +0 -0
- package/src/resources/submodules/appium/packages/plugin-test-support/CHANGELOG.md +610 -0
- package/src/resources/submodules/appium/packages/plugin-test-support/README.md +49 -0
- package/src/resources/submodules/appium/packages/relaxed-caps-plugin/CHANGELOG.md +209 -0
- package/src/resources/submodules/appium/packages/relaxed-caps-plugin/README.md +35 -0
- package/src/resources/submodules/appium/packages/schema/CHANGELOG.md +308 -0
- package/src/resources/submodules/appium/packages/schema/README.md +50 -0
- package/src/resources/submodules/appium/packages/storage-plugin/CHANGELOG.md +157 -0
- package/src/resources/submodules/appium/packages/storage-plugin/README.md +83 -0
- package/src/resources/submodules/appium/packages/strongbox/CHANGELOG.md +129 -0
- package/src/resources/submodules/appium/packages/strongbox/README.md +110 -0
- package/src/resources/submodules/appium/packages/support/CHANGELOG.md +1147 -0
- package/src/resources/submodules/appium/packages/support/README.md +161 -0
- package/src/resources/submodules/appium/packages/tsconfig/CHANGELOG.md +147 -0
- package/src/resources/submodules/appium/packages/tsconfig/README.md +19 -0
- package/src/resources/submodules/appium/packages/types/CHANGELOG.md +871 -0
- package/src/resources/submodules/appium/packages/types/README.md +21 -0
- package/src/resources/submodules/appium/packages/universal-xml-plugin/CHANGELOG.md +502 -0
- package/src/resources/submodules/appium/packages/universal-xml-plugin/README.md +53 -0
- package/src/resources/submodules/appium/renovate/README.md +55 -0
- package/src/resources/submodules/appium-skills/.github/dependabot.yml +11 -0
- package/src/resources/submodules/appium-skills/.github/workflows/pr-title.yml +10 -0
- package/src/resources/submodules/appium-skills/AGENTS.md +214 -0
- package/src/resources/submodules/appium-skills/LICENSE +201 -0
- package/src/resources/submodules/appium-skills/README.md +33 -0
- package/src/resources/submodules/appium-skills/skills/appium-troubleshooting/SKILL.md +66 -0
- package/src/resources/submodules/appium-skills/skills/appium-troubleshooting/references/community-search.md +51 -0
- package/src/resources/submodules/appium-skills/skills/appium-troubleshooting/references/uiautomator2-locators.md +34 -0
- package/src/resources/submodules/appium-skills/skills/appium-troubleshooting/references/uiautomator2-session-startup.md +53 -0
- package/src/resources/submodules/appium-skills/skills/appium-troubleshooting/references/xcuitest-element-lookup.md +23 -0
- package/src/resources/submodules/appium-skills/skills/appium-troubleshooting/references/xcuitest-locators.md +16 -0
- package/src/resources/submodules/appium-skills/skills/appium-troubleshooting/references/xcuitest-troubleshooting.md +52 -0
- package/src/resources/submodules/appium-skills/skills/environment-setup-android/SKILL.md +346 -0
- package/src/resources/submodules/appium-skills/skills/environment-setup-bundletool/SKILL.md +91 -0
- package/src/resources/submodules/appium-skills/skills/environment-setup-chromium/SKILL.md +260 -0
- package/src/resources/submodules/appium-skills/skills/environment-setup-espresso/SKILL.md +216 -0
- package/src/resources/submodules/appium-skills/skills/environment-setup-ffmpeg/SKILL.md +91 -0
- package/src/resources/submodules/appium-skills/skills/environment-setup-node/SKILL.md +128 -0
- package/src/resources/submodules/appium-skills/skills/environment-setup-uiautomator2/SKILL.md +225 -0
- package/src/resources/submodules/appium-skills/skills/environment-setup-xcuitest/SKILL.md +153 -0
- package/src/resources/submodules/appium-skills/skills/xcuitest-real-device-config/SKILL.md +488 -0
- package/src/resources/submodules/appium-uiautomator2-driver/CHANGELOG.md +1506 -0
- package/src/resources/submodules/appium-uiautomator2-driver/README.md +2253 -0
- package/src/resources/submodules/appium-uiautomator2-driver/docs/actions.md +72 -0
- package/src/resources/submodules/appium-uiautomator2-driver/docs/activity-startup.md +47 -0
- package/src/resources/submodules/appium-uiautomator2-driver/docs/android-appbundle.md +69 -0
- package/src/resources/submodules/appium-uiautomator2-driver/docs/android-mobile-gestures.md +352 -0
- package/src/resources/submodules/appium-uiautomator2-driver/docs/android-multiwindow.md +872 -0
- package/src/resources/submodules/appium-uiautomator2-driver/docs/architecture.md +34 -0
- package/src/resources/submodules/appium-uiautomator2-driver/docs/bidi.md +50 -0
- package/src/resources/submodules/appium-uiautomator2-driver/docs/capability-sets.md +136 -0
- package/src/resources/submodules/appium-uiautomator2-driver/docs/mjpeg.md +111 -0
- package/src/resources/submodules/appium-uiautomator2-driver/docs/scheduled-actions.md +155 -0
- package/src/resources/submodules/appium-uiautomator2-driver/docs/uiautomator-uiselector.md +51 -0
- package/src/resources/submodules/appium-uiautomator2-driver/docs/unlock/main.md +95 -0
- package/src/resources/submodules/appium-uiautomator2-driver/docs/unlock/screen1.png +0 -0
- package/src/resources/submodules/appium-uiautomator2-driver/docs/unlock/screen2.png +0 -0
- package/src/resources/submodules/appium-uiautomator2-driver/test/functional/assets/checkered-squares.png +0 -0
- package/src/resources/submodules/appium-uiautomator2-driver/test/functional/assets/start-button.png +0 -0
- package/src/resources/submodules/appium-uiautomator2-driver/test/functional/assets/stop-button.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/.github/ISSUE_TEMPLATE.md +4 -0
- package/src/resources/submodules/appium-xcuitest-driver/CHANGELOG.md +3373 -0
- package/src/resources/submodules/appium-xcuitest-driver/README.md +55 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/assets/images/appium-logo-white.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/assets/images/appium-logo.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/assets/images/appium-plus-xctest.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/contributing.md +45 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/endpoints-wda.md +61 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/endpoints.md +95 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/getting-started/device-setup.md +81 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/getting-started/index.md +36 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/getting-started/installation.md +38 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/getting-started/provisioning-profile/assets/images/check-prov-prof.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/getting-started/provisioning-profile/assets/images/create-new-project.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/getting-started/provisioning-profile/assets/images/create-single-page.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/getting-started/provisioning-profile/assets/images/no-prov-prof.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/getting-started/provisioning-profile/assets/images/project-prov-prof.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/getting-started/provisioning-profile/assets/images/set-up-bundle.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/getting-started/provisioning-profile/assets/images/untrusted-dev.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/getting-started/provisioning-profile/assets/images/xcode-bundle-id.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/getting-started/provisioning-profile/assets/images/xcode-config.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/getting-started/provisioning-profile/assets/images/xcode-facebook-fail.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/getting-started/provisioning-profile/assets/images/xcode-facebook-succeed.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/getting-started/provisioning-profile/auto-config.md +54 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/getting-started/provisioning-profile/basic-manual-config.md +40 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/getting-started/provisioning-profile/full-manual-config.md +49 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/getting-started/provisioning-profile/generic-device-config.md +75 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/getting-started/provisioning-profile/index.md +117 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/getting-started/system-requirements.md +131 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/assets/images/ios-xctest-file-movement/keynote.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/assets/images/ios-xctest-file-movement/on_my_iphone.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/assets/images/ios-xctest-file-movement/top_files.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/attach-to-running-wda.md +43 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/audio-capture.md +78 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/biometric-auth.md +29 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/capability-sets.md +169 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/ci-setup.md +47 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/clipboard.md +47 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/file-transfer.md +147 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/gestures.md +55 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/hybrid.md +137 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/input-events.md +67 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/install-certificate.md +20 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/mjpeg.md +98 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/multiple-xcode-versions.md +37 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/parallel-tests.md +39 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/remotexpc-tunnels-real-devices.md +148 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/run-prebuilt-wda.md +147 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/run-preinstalled-wda.md +177 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/tvos.md +246 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/wda-custom-server.md +283 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/index.md +36 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/overview.md +137 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/reference/assets/images/useXctestrunFile.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/reference/bidi.md +192 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/reference/capabilities.md +164 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/reference/commands.md +468 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/reference/element-attributes.md +157 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/reference/env-vars.md +18 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/reference/execute-methods.md +2269 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/reference/ios-predicate.md +196 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/reference/locator-strategies.md +107 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/reference/scripts.md +555 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/reference/security-flags.md +28 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/reference/server-args.md +19 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/reference/settings.md +467 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/reference/xpath-extensions.md +167 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/troubleshooting/element-lookup.md +202 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/troubleshooting/index.md +204 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/troubleshooting/wda-slowness.md +206 -0
- package/src/resources/submodules/appium-xcuitest-driver/test/assets/test.png +0 -0
- package/src/resources/submodules.zip +0 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# XCUITest Element Lookup Troubleshooting
|
|
2
|
+
|
|
3
|
+
## Official Reference
|
|
4
|
+
- `https://appium.github.io/appium-xcuitest-driver/latest/guides/elements-lookup-troubleshooting/`
|
|
5
|
+
|
|
6
|
+
## When To Read This
|
|
7
|
+
- elements visible to a human are missing in Appium Inspector
|
|
8
|
+
- source dumps look incomplete
|
|
9
|
+
- an iOS locator works intermittently
|
|
10
|
+
- lookup is unexpectedly slow
|
|
11
|
+
|
|
12
|
+
Use the official guide for the full symptom matrix. This page keeps only the local checks that are easiest to miss.
|
|
13
|
+
|
|
14
|
+
## Local Triage
|
|
15
|
+
1. Collect source from the same environment as the failing test: same simulator or device, OS version, app build, orientation, and permission state.
|
|
16
|
+
2. Confirm the element exists in the current source dump before changing selector syntax.
|
|
17
|
+
3. Inspect the attributes the element actually exposes: `name`, `label`, `value`, type, visibility, and enabled state.
|
|
18
|
+
4. Verify the active application and window in WebDriverAgent. System alerts, share sheets, and other overlays may belong to a different active app.
|
|
19
|
+
5. Change snapshot-related settings only after confirming a deep or incomplete tree problem, then compare the same single lookup before and after.
|
|
20
|
+
|
|
21
|
+
## Notes
|
|
22
|
+
- A missing element in source is usually an accessibility, app-state, or active-application problem first, not a locator problem.
|
|
23
|
+
- If the app uses web content, confirm the current context before continuing native lookup debugging.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# XCUITest Locators
|
|
2
|
+
|
|
3
|
+
## Official Reference
|
|
4
|
+
- `https://appium.github.io/appium-xcuitest-driver/latest/reference/locator-strategies/`
|
|
5
|
+
|
|
6
|
+
Use the driver docs for the full strategy ordering and syntax. This page keeps only the local debugging notes that help choose among them.
|
|
7
|
+
|
|
8
|
+
## Local Guidance
|
|
9
|
+
- On XCUITest, `id`, `name`, and `accessibility id` are treated as synonyms over the element `name` attribute. Check the current source before assuming that attribute is stable in this app.
|
|
10
|
+
- Use `-ios predicate string` or `-ios class chain` when you need native filtering or hierarchy scoping; keep the query tied to attributes that are visible in source.
|
|
11
|
+
- Treat `xpath` as a fallback for cases where the source does not expose a simpler native path. If `xpath` is the first thing that works, use it to learn the tree and then replace it if a native selector is available.
|
|
12
|
+
- If the element is absent from source, stop iterating locator syntax and switch to the element-lookup troubleshooting flow.
|
|
13
|
+
|
|
14
|
+
## Validation
|
|
15
|
+
- Re-run the exact failing lookup against the same screen.
|
|
16
|
+
- Prefer the simplest native selector that still uniquely identifies the element.
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# XCUITest Troubleshooting
|
|
2
|
+
|
|
3
|
+
## Official References
|
|
4
|
+
- `https://appium.github.io/appium-xcuitest-driver/latest/guides/troubleshooting/`
|
|
5
|
+
- `https://github.com/appium/appium-xcuitest-driver`
|
|
6
|
+
|
|
7
|
+
## When To Read This
|
|
8
|
+
- WebDriverAgent does not build, install, or stay reachable
|
|
9
|
+
- session startup stalls or fails on simulator or real device
|
|
10
|
+
- app install or launch fails on iOS
|
|
11
|
+
- system alerts block automation
|
|
12
|
+
- simulator or real-device state looks corrupted
|
|
13
|
+
|
|
14
|
+
This page is a compact entry point into the official XCUITest troubleshooting guide.
|
|
15
|
+
|
|
16
|
+
## Local Triage Map
|
|
17
|
+
| Symptom | Verify First | Avoid Until Confirmed |
|
|
18
|
+
|---|---|---|
|
|
19
|
+
| WDA build or signing failure | `xcode-select`, `xcodebuild -version`, `appium driver doctor xcuitest`, and real-device signing setup | changing unrelated test capabilities |
|
|
20
|
+
| Proxy timeout or connection reset right after session start | fresh Appium logs, WDA reachability, and real-device unlock/trust/Developer Mode state | blaming locators or app logic |
|
|
21
|
+
| App install or launch fails | app binary compatibility with the target runtime or device | treating it as a generic WDA failure |
|
|
22
|
+
| System alert blocks the test | whether the alert should be explicitly handled or automatically accepted/dismissed | enabling auto-alert handling without matching test intent |
|
|
23
|
+
| One simulator behaves differently from others | one clean shutdown and retry | erase/reset before confirming corruption |
|
|
24
|
+
|
|
25
|
+
## Useful Checks
|
|
26
|
+
```bash
|
|
27
|
+
xcodebuild -version
|
|
28
|
+
xcode-select -p
|
|
29
|
+
appium driver doctor xcuitest
|
|
30
|
+
xcrun simctl list devices
|
|
31
|
+
xcrun simctl list runtimes
|
|
32
|
+
grep -i "WebDriverAgent\|Proxying\|timed out" <appium-server-log-file>
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Real Device WDA Reachability
|
|
36
|
+
- If WDA builds but commands time out right after session start on a real device, verify that the Appium log is actually proxying to a reachable WDA URL, typically `http://localhost:8100` when port forwarding is active.
|
|
37
|
+
- If you manage WDA yourself, confirm the `appium:webDriverAgentUrl` value points to the actual reachable WDA endpoint, and supply `appium:wdaRemotePort` when the remote device port differs from the local forwarded port.
|
|
38
|
+
- Prefer this real-device check before simulator-only recovery steps.
|
|
39
|
+
|
|
40
|
+
## Real Device WDA Reachability Sequence
|
|
41
|
+
1. Capture the Appium server log lines around the first timed out command and confirm which WDA URL Appium is proxying to.
|
|
42
|
+
2. If the environment forwards the device port locally, run:
|
|
43
|
+
```bash
|
|
44
|
+
curl -sf http://localhost:8100/status
|
|
45
|
+
```
|
|
46
|
+
A healthy response means the forwarded WDA endpoint is reachable from the host.
|
|
47
|
+
3. If you set `appium:webDriverAgentUrl`, compare it directly with the reachable endpoint. If the device-side port is not the default `8100`, set `appium:wdaRemotePort` to the device-side port that WDA actually listens on.
|
|
48
|
+
4. Only after the reachability check passes should you move on to deeper app or locator troubleshooting.
|
|
49
|
+
|
|
50
|
+
## Notes
|
|
51
|
+
- Do not treat every iOS launch failure as a locator issue; many are WDA or device-state problems.
|
|
52
|
+
- If the issue only happens on one real device or one simulator runtime, include that environment detail in the root-cause summary.
|
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "environment-setup-android"
|
|
3
|
+
description: "Prepare and validate Android SDK, Java, and device tooling for Appium Android drivers"
|
|
4
|
+
metadata:
|
|
5
|
+
last_modified: "Mon, 27 Apr 2026 22:00:00 GMT"
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
# environment-setup-android
|
|
9
|
+
|
|
10
|
+
## Goal
|
|
11
|
+
Prepares a working Android automation environment for Appium by validating Java, Android SDK command-line tools, required SDK packages, environment variables, and ADB device visibility, with a verify-and-fix loop until all mandatory checks pass.
|
|
12
|
+
|
|
13
|
+
## Decision Logic
|
|
14
|
+
- If host OS is unsupported for Android SDK setup: stop and ask the user to switch to macOS, Linux, or Windows.
|
|
15
|
+
- If `java -version` and `javac -version` already succeed: keep the existing Java setup and do not reconfigure `JAVA_HOME`.
|
|
16
|
+
- If host OS is macOS and Java setup is needed (fresh environment): use Android Studio app setup as the primary method for both `ANDROID_HOME` (`$HOME/Library/Android/sdk`) and `JAVA_HOME` (Android Studio JBR). Check both `/Applications/Android Studio.app` and `$HOME/Applications/Android Studio.app`, and prefer the official direct download flow before Homebrew.
|
|
17
|
+
- If host OS is Linux and Java setup is needed (fresh environment): use Android Studio bundled JBR as the primary method when Android Studio is installed, then fallback to distro/package-manager OpenJDK.
|
|
18
|
+
- If host OS is Windows and Java setup is needed (fresh environment): use Android Studio bundled JBR as the primary method when Android Studio is installed, then fallback to Microsoft OpenJDK package install.
|
|
19
|
+
- If host OS is Linux: use package manager + `$HOME/Android/Sdk` conventions.
|
|
20
|
+
- If host OS is Windows: use Android SDK tools with persistent user environment variables.
|
|
21
|
+
- If `java` or `javac` is missing: run step 3 to install/configure Java.
|
|
22
|
+
- If the user wants official Android tooling setup flow: download Android Studio from the official site first, use its bundled JBR for Java, then bootstrap the SDK with the official `sdkmanager`.
|
|
23
|
+
- If `ANDROID_HOME` is unset/empty or the `ANDROID_HOME` path does not exist: run step 2 to install command-line tools and create the SDK path.
|
|
24
|
+
- If Java tooling is missing or broken (`java`/`javac` checks fail): run step 3 before Android SDK package/license commands.
|
|
25
|
+
- If `adb` is missing: install `platform-tools` via `sdkmanager`.
|
|
26
|
+
- If emulator binary is missing under `ANDROID_HOME/emulator/emulator` (or Windows equivalent): install emulator packages.
|
|
27
|
+
- Prepare emulator instances using the latest stable system-image version by default.
|
|
28
|
+
- Use host-optimized emulator architecture (native architecture first, then fallback architecture).
|
|
29
|
+
- Skip step 7 emulator preparation if at least one device is already connected or at least one emulator instance already exists.
|
|
30
|
+
- If required SDK packages are missing: install them and re-run checks.
|
|
31
|
+
|
|
32
|
+
## Instructions
|
|
33
|
+
1. **Detect OS and validate Java/base tooling**
|
|
34
|
+
macOS/Linux:
|
|
35
|
+
```bash
|
|
36
|
+
uname -s
|
|
37
|
+
java -version
|
|
38
|
+
javac -version
|
|
39
|
+
echo "$JAVA_HOME"
|
|
40
|
+
command -v adb
|
|
41
|
+
ls "$ANDROID_HOME/emulator/emulator"
|
|
42
|
+
test -x "$ANDROID_HOME/emulator/emulator" && echo "emulator binary: OK"
|
|
43
|
+
```
|
|
44
|
+
Windows PowerShell:
|
|
45
|
+
```powershell
|
|
46
|
+
[System.Environment]::OSVersion.VersionString
|
|
47
|
+
java -version
|
|
48
|
+
javac -version
|
|
49
|
+
$env:JAVA_HOME
|
|
50
|
+
Get-Command adb.exe -ErrorAction SilentlyContinue
|
|
51
|
+
Test-Path "$env:ANDROID_HOME\emulator\emulator.exe"
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
2. **Install Android SDK tooling when `ANDROID_HOME` path is missing**
|
|
55
|
+
Trigger checks:
|
|
56
|
+
- macOS/Linux:
|
|
57
|
+
```bash
|
|
58
|
+
[ -n "$ANDROID_HOME" ] && [ -d "$ANDROID_HOME" ] || echo "run step 2"
|
|
59
|
+
```
|
|
60
|
+
- Windows PowerShell:
|
|
61
|
+
```powershell
|
|
62
|
+
if (-not $env:ANDROID_HOME -or -not (Test-Path $env:ANDROID_HOME)) { "run step 2" }
|
|
63
|
+
```
|
|
64
|
+
Option A (Android Studio app path; macOS priority when app exists):
|
|
65
|
+
- Download Android Studio from `https://developer.android.com/studio`.
|
|
66
|
+
- On macOS, check for the app in both `/Applications/Android Studio.app` and `$HOME/Applications/Android Studio.app`.
|
|
67
|
+
- You may either complete first launch and install SDK components from SDK Manager, or use the bundled JBR plus the official command-line tools zip to bootstrap the SDK non-interactively with `sdkmanager`.
|
|
68
|
+
- Use platform default SDK path after setup:
|
|
69
|
+
- macOS: `$HOME/Library/Android/sdk`
|
|
70
|
+
- Linux: `$HOME/Android/Sdk`
|
|
71
|
+
- Windows: `%LOCALAPPDATA%\Android\Sdk`
|
|
72
|
+
|
|
73
|
+
Option B (CLI tools only):
|
|
74
|
+
- macOS official command-line tools example:
|
|
75
|
+
```bash
|
|
76
|
+
curl -L -o /tmp/commandlinetools-mac-latest.zip https://dl.google.com/android/repository/commandlinetools-mac-14742923_latest.zip
|
|
77
|
+
unzip -q /tmp/commandlinetools-mac-latest.zip -d /tmp/android-cmdline-tools
|
|
78
|
+
export JAVA_HOME="$HOME/Applications/Android Studio.app/Contents/jbr/Contents/Home"
|
|
79
|
+
if [ ! -d "$JAVA_HOME" ]; then
|
|
80
|
+
export JAVA_HOME="/Applications/Android Studio.app/Contents/jbr/Contents/Home"
|
|
81
|
+
fi
|
|
82
|
+
export PATH="$JAVA_HOME/bin:$PATH"
|
|
83
|
+
/tmp/android-cmdline-tools/cmdline-tools/bin/sdkmanager --sdk_root="$HOME/Library/Android/sdk" "cmdline-tools;latest"
|
|
84
|
+
```
|
|
85
|
+
- macOS/Homebrew fallback example:
|
|
86
|
+
```bash
|
|
87
|
+
[ -d "/Applications/Android Studio.app" ] || brew install --cask android-commandlinetools
|
|
88
|
+
mkdir -p "$HOME/Library/Android/sdk/cmdline-tools/latest"
|
|
89
|
+
cp -R /opt/homebrew/share/android-commandlinetools/* "$HOME/Library/Android/sdk/cmdline-tools/latest/"
|
|
90
|
+
```
|
|
91
|
+
- Linux example (Debian/Ubuntu-style prerequisites + cmdline tools placement):
|
|
92
|
+
```bash
|
|
93
|
+
sudo apt-get update
|
|
94
|
+
sudo apt-get install -y unzip wget openjdk-21-jdk
|
|
95
|
+
mkdir -p "$HOME/Android/Sdk/cmdline-tools/latest"
|
|
96
|
+
```
|
|
97
|
+
- Windows example (PowerShell, after extracting Android command-line tools zip):
|
|
98
|
+
```powershell
|
|
99
|
+
New-Item -ItemType Directory -Force "$env:LOCALAPPDATA\Android\Sdk\cmdline-tools\latest"
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
3. **Configure Java for fresh environments (skip if Java already works)**
|
|
103
|
+
Trigger checks:
|
|
104
|
+
- macOS/Linux:
|
|
105
|
+
```bash
|
|
106
|
+
if command -v java >/dev/null 2>&1 && command -v javac >/dev/null 2>&1; then
|
|
107
|
+
java -version >/dev/null 2>&1 && javac -version >/dev/null 2>&1 && echo "Java already available; skip step 3" || echo "run step 3"
|
|
108
|
+
else
|
|
109
|
+
echo "run step 3"
|
|
110
|
+
fi
|
|
111
|
+
```
|
|
112
|
+
- Windows PowerShell:
|
|
113
|
+
```powershell
|
|
114
|
+
if ((Get-Command java.exe -ErrorAction SilentlyContinue) -and (Get-Command javac.exe -ErrorAction SilentlyContinue)) {
|
|
115
|
+
java -version *> $null
|
|
116
|
+
if ($LASTEXITCODE -eq 0) {
|
|
117
|
+
javac -version *> $null
|
|
118
|
+
if ($LASTEXITCODE -eq 0) { "Java already available; skip step 3" } else { "run step 3" }
|
|
119
|
+
} else { "run step 3" }
|
|
120
|
+
} else { "run step 3" }
|
|
121
|
+
```
|
|
122
|
+
macOS primary method for fresh setup (Android Studio bundled JBR):
|
|
123
|
+
```bash
|
|
124
|
+
if [ -d "$HOME/Applications/Android Studio.app/Contents/jbr/Contents/Home" ]; then
|
|
125
|
+
export JAVA_HOME="$HOME/Applications/Android Studio.app/Contents/jbr/Contents/Home"
|
|
126
|
+
export PATH="$JAVA_HOME/bin:$PATH"
|
|
127
|
+
java -version
|
|
128
|
+
javac -version
|
|
129
|
+
elif [ -d "/Applications/Android Studio.app/Contents/jbr/Contents/Home" ]; then
|
|
130
|
+
export JAVA_HOME="/Applications/Android Studio.app/Contents/jbr/Contents/Home"
|
|
131
|
+
export PATH="$JAVA_HOME/bin:$PATH"
|
|
132
|
+
java -version
|
|
133
|
+
javac -version
|
|
134
|
+
else
|
|
135
|
+
echo "Android Studio JBR not found; use fallback method below"
|
|
136
|
+
fi
|
|
137
|
+
```
|
|
138
|
+
macOS fallback method (only when Android Studio is not installed):
|
|
139
|
+
```bash
|
|
140
|
+
brew install --cask temurin
|
|
141
|
+
export JAVA_HOME="$(/usr/libexec/java_home -v 21)"
|
|
142
|
+
export PATH="$JAVA_HOME/bin:$PATH"
|
|
143
|
+
java -version
|
|
144
|
+
javac -version
|
|
145
|
+
```
|
|
146
|
+
Linux primary method for fresh setup (Android Studio bundled JBR):
|
|
147
|
+
```bash
|
|
148
|
+
if [ -d "$HOME/android-studio/jbr" ]; then
|
|
149
|
+
export JAVA_HOME="$HOME/android-studio/jbr"
|
|
150
|
+
elif [ -d "/opt/android-studio/jbr" ]; then
|
|
151
|
+
export JAVA_HOME="/opt/android-studio/jbr"
|
|
152
|
+
elif [ -d "/usr/local/android-studio/jbr" ]; then
|
|
153
|
+
export JAVA_HOME="/usr/local/android-studio/jbr"
|
|
154
|
+
else
|
|
155
|
+
echo "Android Studio JBR not found; use fallback method below"
|
|
156
|
+
fi
|
|
157
|
+
if [ -n "$JAVA_HOME" ] && [ -d "$JAVA_HOME" ]; then
|
|
158
|
+
export PATH="$JAVA_HOME/bin:$PATH"
|
|
159
|
+
java -version
|
|
160
|
+
javac -version
|
|
161
|
+
fi
|
|
162
|
+
```
|
|
163
|
+
Linux fallback method (OpenJDK 21 example):
|
|
164
|
+
```bash
|
|
165
|
+
export JAVA_HOME="/usr/lib/jvm/java-21-openjdk-amd64"
|
|
166
|
+
export PATH="$JAVA_HOME/bin:$PATH"
|
|
167
|
+
java -version
|
|
168
|
+
javac -version
|
|
169
|
+
```
|
|
170
|
+
Windows primary method for fresh setup (Android Studio bundled JBR, persist for current user):
|
|
171
|
+
```powershell
|
|
172
|
+
$studioJbrCandidates = @(
|
|
173
|
+
"$env:LOCALAPPDATA\Programs\Android Studio\jbr",
|
|
174
|
+
"C:\Program Files\Android\Android Studio\jbr"
|
|
175
|
+
)
|
|
176
|
+
$studioJbr = $studioJbrCandidates | Where-Object { Test-Path $_ } | Select-Object -First 1
|
|
177
|
+
if ($studioJbr) {
|
|
178
|
+
[Environment]::SetEnvironmentVariable('JAVA_HOME', $studioJbr, 'User')
|
|
179
|
+
$currentPath = [Environment]::GetEnvironmentVariable('Path', 'User')
|
|
180
|
+
if ($currentPath -notlike "*$studioJbr\bin*") {
|
|
181
|
+
[Environment]::SetEnvironmentVariable('Path', "$currentPath;$studioJbr\bin", 'User')
|
|
182
|
+
}
|
|
183
|
+
$env:JAVA_HOME = [Environment]::GetEnvironmentVariable('JAVA_HOME', 'User')
|
|
184
|
+
$env:PATH = "$studioJbr\bin;$env:PATH"
|
|
185
|
+
java -version
|
|
186
|
+
javac -version
|
|
187
|
+
} else {
|
|
188
|
+
"Android Studio JBR not found; use fallback method below"
|
|
189
|
+
}
|
|
190
|
+
```
|
|
191
|
+
Windows fallback method (only when Android Studio is not installed):
|
|
192
|
+
```powershell
|
|
193
|
+
winget install -e --id Microsoft.OpenJDK.17 --accept-source-agreements --accept-package-agreements
|
|
194
|
+
$jdkRoot = Get-ChildItem "C:\Program Files\Microsoft" -Directory -ErrorAction SilentlyContinue | Where-Object { $_.Name -like 'jdk-*' } | Sort-Object Name -Descending | Select-Object -First 1
|
|
195
|
+
if ($jdkRoot) {
|
|
196
|
+
[Environment]::SetEnvironmentVariable('JAVA_HOME', $jdkRoot.FullName, 'User')
|
|
197
|
+
$currentPath = [Environment]::GetEnvironmentVariable('Path', 'User')
|
|
198
|
+
if ($currentPath -notlike "*$($jdkRoot.FullName)\\bin*") {
|
|
199
|
+
[Environment]::SetEnvironmentVariable('Path', "$currentPath;$($jdkRoot.FullName)\\bin", 'User')
|
|
200
|
+
}
|
|
201
|
+
$env:JAVA_HOME = [Environment]::GetEnvironmentVariable('JAVA_HOME', 'User')
|
|
202
|
+
$env:PATH = "$env:JAVA_HOME\\bin;$env:PATH"
|
|
203
|
+
}
|
|
204
|
+
java -version
|
|
205
|
+
javac -version
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
4. **Configure Android environment variables and PATH**
|
|
209
|
+
macOS (priority: Android Studio SDK path):
|
|
210
|
+
```bash
|
|
211
|
+
export ANDROID_HOME="$HOME/Library/Android/sdk"
|
|
212
|
+
export PATH="$ANDROID_HOME/platform-tools:$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/emulator:$PATH"
|
|
213
|
+
echo "$ANDROID_HOME"
|
|
214
|
+
command -v adb
|
|
215
|
+
ls "$ANDROID_HOME/emulator/emulator"
|
|
216
|
+
```
|
|
217
|
+
Linux:
|
|
218
|
+
```bash
|
|
219
|
+
export ANDROID_HOME="$HOME/Android/Sdk"
|
|
220
|
+
export PATH="$ANDROID_HOME/platform-tools:$ANDROID_HOME/cmdline-tools/latest/bin:$PATH"
|
|
221
|
+
echo "$ANDROID_HOME"
|
|
222
|
+
command -v adb
|
|
223
|
+
ls "$ANDROID_HOME/emulator/emulator"
|
|
224
|
+
```
|
|
225
|
+
Windows PowerShell (persist for current user):
|
|
226
|
+
```powershell
|
|
227
|
+
[Environment]::SetEnvironmentVariable('ANDROID_HOME', "$env:LOCALAPPDATA\Android\Sdk", 'User')
|
|
228
|
+
$androidPaths = "$env:LOCALAPPDATA\Android\Sdk\platform-tools;$env:LOCALAPPDATA\Android\Sdk\cmdline-tools\latest\bin"
|
|
229
|
+
$currentPath = [Environment]::GetEnvironmentVariable('Path', 'User')
|
|
230
|
+
if ($currentPath -notlike "*$androidPaths*") {
|
|
231
|
+
[Environment]::SetEnvironmentVariable('Path', "$currentPath;$androidPaths", 'User')
|
|
232
|
+
}
|
|
233
|
+
$env:ANDROID_HOME = [Environment]::GetEnvironmentVariable('ANDROID_HOME', 'User')
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
5. **Accept SDK licenses and install required packages**
|
|
237
|
+
macOS/Linux:
|
|
238
|
+
```bash
|
|
239
|
+
if command -v sdkmanager >/dev/null 2>&1; then yes | sdkmanager --sdk_root="$ANDROID_HOME" --licenses; fi
|
|
240
|
+
if command -v sdkmanager >/dev/null 2>&1; then sdkmanager --sdk_root="$ANDROID_HOME" "platform-tools" "build-tools;34.0.0" "platforms;android-34" "emulator"; fi
|
|
241
|
+
```
|
|
242
|
+
Windows PowerShell:
|
|
243
|
+
```powershell
|
|
244
|
+
if (Get-Command sdkmanager.bat -ErrorAction SilentlyContinue) { cmd /c "(for /l %i in (1,1,200) do @echo y)| sdkmanager.bat --licenses" }
|
|
245
|
+
if (Get-Command sdkmanager.bat -ErrorAction SilentlyContinue) { sdkmanager.bat "platform-tools" "build-tools;34.0.0" "platforms;android-34" "emulator" }
|
|
246
|
+
```
|
|
247
|
+
If license acceptance still fails in headless CI-like runs, pre-seed license hashes and retry package install:
|
|
248
|
+
```powershell
|
|
249
|
+
$licensesDir = "$env:ANDROID_HOME\licenses"
|
|
250
|
+
New-Item -ItemType Directory -Force $licensesDir | Out-Null
|
|
251
|
+
Set-Content -Path "$licensesDir\android-sdk-license" -Value "24333f8a63b6825ea9c5514f83c2829b004d1fee`n8933bad161af4178b1185d1a37fbf41ea5269c55`nd56f5187479451eabf01fb78af6dfcb131a6481e"
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
6. **Verify Android SDK and ADB state**
|
|
255
|
+
macOS/Linux:
|
|
256
|
+
```bash
|
|
257
|
+
if command -v sdkmanager >/dev/null 2>&1; then sdkmanager --list | head -n 80; fi
|
|
258
|
+
adb version
|
|
259
|
+
command -v emulator
|
|
260
|
+
ls "$ANDROID_HOME/emulator/emulator"
|
|
261
|
+
test -x "$ANDROID_HOME/emulator/emulator" && echo "emulator binary: OK"
|
|
262
|
+
```
|
|
263
|
+
Windows PowerShell:
|
|
264
|
+
```powershell
|
|
265
|
+
if (Get-Command sdkmanager.bat -ErrorAction SilentlyContinue) { sdkmanager.bat --list }
|
|
266
|
+
adb.exe version
|
|
267
|
+
Test-Path "$env:ANDROID_HOME\emulator\emulator.exe"
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
7. **Optional emulator instance preparation (if no physical device is connected and no emulator exists)**
|
|
271
|
+
Skip step 7 when either of the following is true:
|
|
272
|
+
- At least one device is already connected (`adb devices` shows a `device` entry)
|
|
273
|
+
- At least one emulator instance already exists (`emulator -list-avds` is non-empty)
|
|
274
|
+
|
|
275
|
+
Prepare an emulator instance using the latest stable system-image version and host-optimized architecture only when both are false.
|
|
276
|
+
macOS/Linux (prefer native architecture first, then fallback):
|
|
277
|
+
```bash
|
|
278
|
+
ARCH=$(uname -m)
|
|
279
|
+
if [ "$ARCH" = "arm64" ] || [ "$ARCH" = "aarch64" ]; then
|
|
280
|
+
PRIMARY_ARCH="arm64-v8a"
|
|
281
|
+
FALLBACK_ARCH="x86_64"
|
|
282
|
+
else
|
|
283
|
+
PRIMARY_ARCH="x86_64"
|
|
284
|
+
FALLBACK_ARCH="arm64-v8a"
|
|
285
|
+
fi
|
|
286
|
+
LATEST_API=$(sdkmanager --list | grep -o "system-images;android-[0-9]\+;google_apis;${PRIMARY_ARCH}" | sed 's/.*android-\([0-9]\+\).*/\1/' | sort -n | tail -1)
|
|
287
|
+
IMAGE_ARCH="$PRIMARY_ARCH"
|
|
288
|
+
if [ -z "$LATEST_API" ]; then
|
|
289
|
+
LATEST_API=$(sdkmanager --list | grep -o "system-images;android-[0-9]\+;google_apis;${FALLBACK_ARCH}" | sed 's/.*android-\([0-9]\+\).*/\1/' | sort -n | tail -1)
|
|
290
|
+
IMAGE_ARCH="$FALLBACK_ARCH"
|
|
291
|
+
fi
|
|
292
|
+
IMAGE="system-images;android-${LATEST_API};google_apis;${IMAGE_ARCH}"
|
|
293
|
+
sdkmanager "$IMAGE"
|
|
294
|
+
echo "no" | avdmanager create avd -n "api${LATEST_API}-google-${IMAGE_ARCH}" -k "$IMAGE"
|
|
295
|
+
emulator -list-avds
|
|
296
|
+
```
|
|
297
|
+
Windows PowerShell (prefer x86_64, fallback arm64-v8a):
|
|
298
|
+
```powershell
|
|
299
|
+
$primaryArch = "x86_64"
|
|
300
|
+
$fallbackArch = "arm64-v8a"
|
|
301
|
+
$matches = sdkmanager.bat --list | Select-String "system-images;android-[0-9]+;google_apis;$primaryArch"
|
|
302
|
+
$imageArch = $primaryArch
|
|
303
|
+
if (-not $matches) {
|
|
304
|
+
$matches = sdkmanager.bat --list | Select-String "system-images;android-[0-9]+;google_apis;$fallbackArch"
|
|
305
|
+
$imageArch = $fallbackArch
|
|
306
|
+
}
|
|
307
|
+
$latestApi = ($matches | ForEach-Object { [int]([regex]::Match($_.Line, 'android-(\d+)').Groups[1].Value) } | Sort-Object)[-1]
|
|
308
|
+
$image = "system-images;android-$latestApi;google_apis;$imageArch"
|
|
309
|
+
sdkmanager.bat $image
|
|
310
|
+
cmd /c "echo no| avdmanager.bat create avd -n api$latestApi-google-$imageArch -k $image"
|
|
311
|
+
emulator.exe -list-avds
|
|
312
|
+
```
|
|
313
|
+
Report version details in the task result:
|
|
314
|
+
- macOS/Linux:
|
|
315
|
+
```bash
|
|
316
|
+
emulator -version
|
|
317
|
+
emulator -list-avds
|
|
318
|
+
if command -v sdkmanager >/dev/null 2>&1; then sdkmanager --list | grep "system-images;android-" | head -n 20; fi
|
|
319
|
+
```
|
|
320
|
+
- Windows PowerShell:
|
|
321
|
+
```powershell
|
|
322
|
+
emulator.exe -version
|
|
323
|
+
emulator.exe -list-avds
|
|
324
|
+
if (Get-Command sdkmanager.bat -ErrorAction SilentlyContinue) { sdkmanager.bat --list | Select-String "system-images;android-" | Select-Object -First 20 }
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
8. **Completion criteria**
|
|
328
|
+
Mark complete only when all are true:
|
|
329
|
+
- `java -version` and `javac -version` succeed
|
|
330
|
+
- `adb` is executable from `PATH`
|
|
331
|
+
- Emulator binary exists under `ANDROID_HOME/emulator/emulator` (or `%ANDROID_HOME%\emulator\emulator.exe` on Windows)
|
|
332
|
+
- Required SDK packages are installed (`platform-tools`, one platform, one build-tools version)
|
|
333
|
+
- Existing Java setup is preserved when Java already works (no forced reconfiguration)
|
|
334
|
+
- On fresh setup, Android Studio bundled JBR is used as `JAVA_HOME` when Android Studio is present (macOS/Linux/Windows)
|
|
335
|
+
- Android environment checks pass without requiring a connected device
|
|
336
|
+
- Latest stable emulator/system-image version is prepared with host-optimized architecture only when no connected devices and no existing emulators are present; otherwise step 7 is skipped and current version details are reported in the task result
|
|
337
|
+
|
|
338
|
+
## Constraints
|
|
339
|
+
- Always use detect-first behavior and install only missing components.
|
|
340
|
+
- Re-run validation commands after each install/config change.
|
|
341
|
+
- Do not report success if `adb` is unavailable or emulator binary check fails.
|
|
342
|
+
- Treat optional dependencies and optional doctor warnings as non-blocking unless the user requests those features.
|
|
343
|
+
- Ask the user before installing optional dependencies; do not install them by default.
|
|
344
|
+
- If privileged commands are needed, pause and provide exact commands for user execution.
|
|
345
|
+
- Keep Android setup independent from Appium driver installation steps.
|
|
346
|
+
- Use shell-appropriate commands (`bash` for macOS/Linux, PowerShell/cmd for Windows).
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "environment-setup-bundletool"
|
|
3
|
+
description: "Install and validate bundletool.jar from GitHub releases for optional UiAutomator2/Espresso capabilities"
|
|
4
|
+
metadata:
|
|
5
|
+
last_modified: "Thu, 12 Mar 2026 03:25:00 GMT"
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
# environment-setup-bundletool
|
|
9
|
+
|
|
10
|
+
## Goal
|
|
11
|
+
Installs and validates `bundletool.jar` from official GitHub releases so Android App Bundle tooling is available when explicitly requested for UiAutomator2 or Espresso setup.
|
|
12
|
+
|
|
13
|
+
## Decision Logic
|
|
14
|
+
- If host OS is unsupported: stop and ask the user to run on macOS, Linux, or Windows.
|
|
15
|
+
- If user did not explicitly request bundletool setup: skip this skill.
|
|
16
|
+
- If `bundletool.jar` is already resolvable via `PATH`: do not reinstall; validate and report current version.
|
|
17
|
+
- If `bundletool.jar` is not present in `PATH`: download the latest release asset (`bundletool-all-*.jar`) from `https://github.com/google/bundletool/releases` and place it in a `PATH` directory.
|
|
18
|
+
|
|
19
|
+
## Instructions
|
|
20
|
+
1. **Detect OS and current bundletool availability**
|
|
21
|
+
macOS/Linux:
|
|
22
|
+
```bash
|
|
23
|
+
uname -s
|
|
24
|
+
command -v bundletool.jar || echo "bundletool.jar not found"
|
|
25
|
+
if command -v bundletool.jar >/dev/null 2>&1; then java -jar "$(command -v bundletool.jar)" version; fi
|
|
26
|
+
```
|
|
27
|
+
Windows PowerShell:
|
|
28
|
+
```powershell
|
|
29
|
+
[System.Environment]::OSVersion.VersionString
|
|
30
|
+
$btPath = ($env:Path -split ';' | Where-Object { $_ -and (Test-Path (Join-Path $_ 'bundletool.jar')) } | ForEach-Object { Join-Path $_ 'bundletool.jar' } | Select-Object -First 1)
|
|
31
|
+
$btPath
|
|
32
|
+
if ($btPath) { java -jar $btPath version }
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
2. **Download latest `bundletool-all-*.jar` when missing**
|
|
36
|
+
macOS/Linux:
|
|
37
|
+
```bash
|
|
38
|
+
mkdir -p "$HOME/bin"
|
|
39
|
+
RELEASE_API="https://api.github.com/repos/google/bundletool/releases/latest"
|
|
40
|
+
DOWNLOAD_URL=$(curl -fsSL "$RELEASE_API" | grep -Eo 'https://github.com/google/bundletool/releases/download/[^\"]+/bundletool-all-[^\"]+\.jar' | head -n 1)
|
|
41
|
+
test -n "$DOWNLOAD_URL"
|
|
42
|
+
curl -fL "$DOWNLOAD_URL" -o "$HOME/bin/bundletool.jar"
|
|
43
|
+
chmod +x "$HOME/bin/bundletool.jar"
|
|
44
|
+
export PATH="$HOME/bin:$PATH"
|
|
45
|
+
```
|
|
46
|
+
Windows PowerShell:
|
|
47
|
+
```powershell
|
|
48
|
+
$targetDir = "$HOME\bin"
|
|
49
|
+
New-Item -ItemType Directory -Force $targetDir | Out-Null
|
|
50
|
+
$release = Invoke-RestMethod "https://api.github.com/repos/google/bundletool/releases/latest"
|
|
51
|
+
$asset = $release.assets | Where-Object { $_.name -match '^bundletool-all-.*\.jar$' } | Select-Object -First 1
|
|
52
|
+
if (-not $asset) { throw "bundletool release asset not found" }
|
|
53
|
+
Invoke-WebRequest -Uri $asset.browser_download_url -OutFile "$targetDir\bundletool.jar"
|
|
54
|
+
$currentPath = [Environment]::GetEnvironmentVariable('Path', 'User')
|
|
55
|
+
if ($currentPath -notlike "*$targetDir*") {
|
|
56
|
+
[Environment]::SetEnvironmentVariable('Path', "$currentPath;$targetDir", 'User')
|
|
57
|
+
}
|
|
58
|
+
$env:Path = [Environment]::GetEnvironmentVariable('Path', 'User')
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
3. **Validate installation**
|
|
62
|
+
macOS/Linux:
|
|
63
|
+
```bash
|
|
64
|
+
command -v bundletool.jar
|
|
65
|
+
java -jar "$(command -v bundletool.jar)" version
|
|
66
|
+
```
|
|
67
|
+
Windows PowerShell:
|
|
68
|
+
```powershell
|
|
69
|
+
$btPath = ($env:Path -split ';' | Where-Object { $_ -and (Test-Path (Join-Path $_ 'bundletool.jar')) } | ForEach-Object { Join-Path $_ 'bundletool.jar' } | Select-Object -First 1)
|
|
70
|
+
if (-not $btPath) { throw "bundletool.jar not found in PATH directories" }
|
|
71
|
+
$btPath
|
|
72
|
+
java -jar $btPath version
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
4. **Report task result**
|
|
76
|
+
Include:
|
|
77
|
+
- resolved `bundletool.jar` path
|
|
78
|
+
- `bundletool` version output
|
|
79
|
+
- whether installation was skipped because bundletool was already present
|
|
80
|
+
|
|
81
|
+
## Completion criteria
|
|
82
|
+
Mark complete only when all are true:
|
|
83
|
+
- `bundletool.jar` is resolvable from `PATH`
|
|
84
|
+
- `java -jar <bundletool.jar> version` succeeds
|
|
85
|
+
- result summary states whether install was performed or skipped
|
|
86
|
+
|
|
87
|
+
## Constraints
|
|
88
|
+
- This is an optional skill; run only when the user explicitly requests bundletool setup.
|
|
89
|
+
- Ask the user before installing optional dependencies.
|
|
90
|
+
- If privileged commands are required, pause and provide exact commands for user execution.
|
|
91
|
+
- Do not modify unrelated Appium, Android SDK, Java, or Xcode configuration in this skill.
|