Install apk
Custom Cursor AI agent skills for mobile QA workflows — bug creation, JIRA refinement, RC revalidation, crash analysis, and build installation. Built for a large consumer mobile app (iOS/Android).
npx -y skills add vikenpatel14/cursor-qa-skills --skill install-apkAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Install APK builds to a connected Android device via adb. Scans the local builds folder for RC, Preview, and Feature Branch APKs. Can also fetch build links from Slack release channels. Use when the user wants to install an APK, sideload an app, install a build, push an APK to a device, mentions RC/Preview/feature branch builds, uses shorthand like "26.21 R W" or "26.21 P C", provides a .apk filename, or asks for builds from Slack (e.g. "26.21 slack").
SKILL.md
6.9 KB, as published. Nobody here has run it
Install APK to Device
Build Folders
APK files are stored locally in these locations — never in ~/Downloads/:
- RC & Preview builds:
/path/to/your/builds/ - Feature branch builds:
/path/to/your/builds/Feature branch/
Scan & Table Output
On every install request, ALWAYS do the following before installing:
- Scan both folders (and any subfolders) for all
.apkfiles:
find "/path/to/your/builds" -name "*.apk" -type f
-
Parse each filename to determine type, version, and region:
- RC builds: filename starts with
[Company]-, containsReleaseandRC(e.g.App-26.21.0-2022211953-157-Release-RegionA-RC-Signed.apk) - Preview builds: filename starts with
MyApp-, containsDebug(e.g.MyApp-26.21.0-26040118-157-RegionA-Debug-Signed.apk) - Feature branch builds: any
.apkinside theFeature branch/subfolder
- RC builds: filename starts with
-
Display the results in a compact table sorted in ascending order by version:
- One row per version with four columns for each build type/region.
- Each cell shows the shorthand the user would type to install it, or
—if not available. - Only show the Feature Branch table if feature branch APKs exist.
RC & Preview Builds
| # | Version | RC Region A | RC Region B | Preview Region A | Preview Region B |
|---|---|---|---|---|---|
| 1 | 26.18.0 | 26.18 W | — | — | — |
| 2 | 26.21.0 | 26.21 W | 26.21 C | 26.21 P W | 26.21 P C |
Feature Branch Builds (only shown if feature branch APKs exist)
| # | Name | Filename |
|---|---|---|
| 1 | EXAMPLE-PROJ-1234 | some-feature-build.apk |
Shorthand Quick Install
The user will use shorthand to request installs. Match as follows:
| User says | Type | Region | Match filename containing |
|---|---|---|---|
26.21 R W or 26.21 W | RC | Region A | App-26.21.*Release-RegionA-RC |
26.21 R C or 26.21 C | RC | Region B | App-26.21.*Release-RegionB-RC |
26.21 P W | Preview | Region A | MyApp-26.21.*RegionA-Debug |
26.21 P C | Preview | Region B | MyApp-26.21.*RegionB-Debug |
feature branch <name> | Feature | — | Match <name> against filenames in Feature branch/ folder |
Default rule: If the user only says a version + region without specifying R or P (e.g. 26.21 W or 26.21 C), always default to RC (R).
The user may also provide a full filename — match it against scanned results.
Install Command
Run immediately — no confirmation needed:
~/Library/Android/sdk/platform-tools/adb install "<FULL_PATH_TO_APK>"
If the app is already installed and the user is updating, use -r to replace:
~/Library/Android/sdk/platform-tools/adb install -r "<FULL_PATH_TO_APK>"
Always quote the path (filenames and folders contain spaces).
Handling Errors
Do NOT ask the user for confirmation on recoverable errors. Fix them automatically.
| Error | Action |
|---|---|
INSTALL_FAILED_ALREADY_EXISTS | Re-run with -r flag |
INSTALL_FAILED_UPDATE_INCOMPATIBLE or INSTALL_FAILED_CONFLICTING_PROVIDER | Automatically uninstall the conflicting package, then install the new APK. Do NOT ask — just do it. |
INSTALL_FAILED_VERSION_DOWNGRADE | Re-run with -d flag to allow downgrade: adb install -r -d <apk> |
error: no devices/emulators found | Ask the user to connect their device via USB and enable USB Debugging |
INSTALL_FAILED_INSUFFICIENT_STORAGE | Tell the user to free up space on the device |
Examples
User says: "26.21 R W"
Action:
- Scan folder, show table of all available builds.
- Match
26.21 R W→ findApp-26.21.0-2022211953-157-Release-RegionA-RC-Signed.apk - Install immediately:
~/Library/Android/sdk/platform-tools/adb install "/path/to/your/builds/App-26.21.0-2022211953-157-Release-RegionA-RC-Signed.apk"
User says: "26.21 P C"
Action:
- Scan folder, show table of all available builds.
- Match
26.21 P C→ findMyApp-26.21.0-26040118-157-RegionB-Debug-Signed.apk - Install immediately:
~/Library/Android/sdk/platform-tools/adb install "/path/to/your/builds/MyApp-26.21.0-26040118-157-RegionB-Debug-Signed.apk"
User says: "install feature branch EXAMPLE-PROJ-1234"
Action:
- Scan
Feature branch/subfolder, show feature branch table. - Match filename containing
EXAMPLE-PROJ-1234or the card name. - Install immediately.
Slack Build Lookup
Slack release channels follow the naming pattern: yourapp-release-XX-XX (dashes, not dots).
Trigger
When the user mentions a version + "slack" (e.g. 26.21 slack), use the dis-slack agent to read the channel and extract build links.
| User says | Action |
|---|---|
26.21 slack | Read #yourapp-release-26-21, list latest Android build links |
26.21 slack ios | Read #yourapp-release-26-21, list latest iOS build links |
Steps
- Use the
dev-integration-serverMCP tools (preferred) or fall back to CLI (dis call):slack_channelswith{"query": "yourapp-release-XX-XX"}to find the channel IDslack_historywith{"channel": "<CHANNEL_ID>", "limit": 20}to get messages
- Parse messages for build links (TestFairy URLs). iOS builds come from one message, Android from another.
- Display the results with full build details extracted from the Slack messages:
Android Builds — #yourapp-release-26-21
| # | Build | Version | Build Code | Link |
|---|---|---|---|---|
| 1 | RC Region A | 26.21.0 | 2022211953 | Download |
| 2 | RC Region B | 26.21.0 | 2022211953 | Download |
| 3 | Preview Region A | 26.21.0 | 26040118 | Download |
| 4 | Preview Region B | 26.21.0 | 26040118 | Download |
Always include: version, build code, download link, and who posted it with date/time. Add a "Open in Slack" permalink at the end so the user can jump directly to the message. Do NOT include package name column or rollout schedule — keep it clean.
Example footer:
Posted by John Releaser — April 8, 2026, 9:33 PM UTC | [Open in Slack](slack://channel?team=TEAM_ID&id=CHANNEL_ID&message=MESSAGE_TS)
Always use the slack:// deep link format so it opens directly in the Slack desktop app — never use https://your-org.slack.com/... browser links.
Adaptive Parsing
Build links are typically posted by devs in a consistent format. If the format changes over time, adapt by learning the new pattern from the messages.