# Clone App Skill — Design Spec **Date:** 2026-06-21 **Status:** Approved **Repo:** fork of `masa2146/android-reverse-engineering-skill` --- ## Overview A Claude Code skill (`/clone-app`) that takes a Google Play URL, downloads the APK, reverse engineers it, analyzes the app store presence, estimates clone effort with AI-assisted tooling, evaluates market viability, and optionally generates a full implementation plan. **Trigger:** ``` /clone-app https://play.google.com/store/apps/details?id=com.example.app ``` --- ## Repository Structure The skill lives inside the fork of `android-reverse-engineering-skill` as a separate plugin — upstream files are never modified. ``` masa2146/android-reverse-engineering-skill/ ├── plugins/ │ ├── android-reverse-engineering/ ← upstream, untouched │ │ └── skills/android-reverse-engineering/ │ │ ├── SKILL.md │ │ └── scripts/ ← called directly by clone-app │ └── clone-app/ ← new skill │ ├── .claude-plugin/ │ │ └── plugin.json │ ├── skills/ │ │ └── clone-app/ │ │ └── SKILL.md │ └── commands/ │ └── clone-app.md ``` **Upstream sync:** ```bash git remote add upstream https://github.com/SimoneAvogadro/android-reverse-engineering-skill.git git pull upstream master ``` Conflict risk is low — upstream only modifies `plugins/android-reverse-engineering/` and root files (README, LICENSE). --- ## Architecture ### Approach: Orchestrator Skill (Option B) `clone-app` SKILL.md orchestrates all phases sequentially. RE bash scripts are called directly via relative path from within the same repo — no cross-plugin tool invocation needed. RE script path pattern: ```bash RE_SCRIPTS="$(dirname "$CLAUDE_PLUGIN_ROOT")/../android-reverse-engineering/skills/android-reverse-engineering/scripts" bash "$RE_SCRIPTS/fingerprint.sh" app.xapk bash "$RE_SCRIPTS/decompile.sh" app.xapk bash "$RE_SCRIPTS/find-api-calls.sh" output/sources/ ``` --- ## Phase Workflow ### Phase 0: Input Validation - Extract package name from URL via regex: `id=([a-zA-Z0-9._]+)` - If extraction fails → ask user to provide package name directly - Create working directory: `./work/{package}/` ### Phase 1: APK Download ```bash curl -L "https://d.apkpure.com/b/APK/{PACKAGE}?version=latest" --output work/{package}/app.xapk ``` - 3 retries on failure - Detect file type (APK vs XAPK) from magic bytes - If download fails after retries → ask user for local APK path ### Phase 2: Reverse Engineering Calls RE skill scripts in order: 1. `fingerprint.sh` — framework detection (Flutter/RN/Kotlin/etc.), HTTP stack, obfuscation level 2. `check-deps.sh` — verify jadx, Java 17+ present; auto-install if missing via `install-dep.sh` 3. `decompile.sh` — full decompile to `work/{package}/output/sources/` 4. `recover-kotlin-names.sh` — R8 deobfuscation (if Kotlin app) 5. `find-api-calls.sh` — extract all API endpoints (Retrofit, OkHttp, Ktor, Apollo, etc.) **Output:** tech stack JSON, API endpoint list, AndroidManifest summary, detected features. **Flutter/RN/Cordova fallback:** fingerprint detects framework → warn user "Java decompile limited for this framework" → proceed with what's available (manifest, hardcoded URLs, SDK list). ### Phase 3: Store Analysis - Scrape Google Play store page for: rating, review count, install range, category, last update, developer - Search App Store for same package → note if iOS version exists - If App Store not found → continue with Google Play data only **Output:** store metrics JSON. ### Phase 4: Stack Recommendation AI analyzes RE results + store data and proposes 2-3 clone stack options: - Considers detected original stack - Considers AI-assisted development efficiency (Flutter and React Native favored for speed) - Presents tradeoffs for each option Present to user: > "Detected: Native Kotlin. Recommended for AI-assisted clone: Flutter (fastest) or React Native (JS ecosystem). Original stack also viable. Which do you prefer?" User selects stack → locked for Phase 5+. ### Phase 5: Effort & Cost Estimation Based on selected stack: **Feature list** extracted from APK: - Screens (Activity/Fragment count) - Permissions used - API endpoints count - Third-party SDKs (payment, auth, analytics, etc.) - Detected backend patterns (REST/GraphQL/WebSocket) **AI-assisted effort table:** | Category | Complexity | AI Sprints | |----------|-----------|------------| | Auth flow | Medium | 1 | | Core screens | High | 3-5 | | API integration | Medium | 2 | | Backend (if needed) | High | 3-8 | | ... | ... | ... | "AI Sprint" = one focused Claude Code session (~2-4 hours of human review time). **Infrastructure cost estimate:** - Backend hosting (Railway/Render/AWS estimate) - Database - CDN / storage - Third-party API costs (maps, payments, etc.) ### Phase 6: Market Viability Report Synthesizes all data into `work/{package}/clone-report-YYYY-MM-DD.md`: ```markdown ## App Overview ## Tech Stack (Detected) ## Recommended Clone Stack ## Feature List (from APK) ## Effort Estimate (AI-assisted) ## Infrastructure Cost Estimate (monthly) ## Market Analysis - Current app metrics - Competitor landscape - Target market size estimate ## Viability Verdict - GO / CONDITIONAL GO / NO GO - Key risks - Key opportunities ``` ### Phase 7: Decision Gate Present report summary to user: > "Report saved to work/{package}/clone-report-YYYY-MM-DD.md. Want to proceed with building the implementation plan?" - **Yes** → invoke `writing-plans` skill with report as context - **No** → save report, end skill --- ## Error Handling | Scenario | Behavior | |----------|----------| | APKPure download fails (3x) | Ask user for local APK path | | XAPK (split bundle) | RE skill handles automatically | | Flutter/RN/Cordova app | Warn, continue with available data | | App Store not found | Continue with Google Play only | | RE skill not installed | Run `check-deps.sh`, auto-install missing tools | | Package name not in URL | Ask user to input package name | | `writing-plans` skill unavailable | Write plan as Markdown manually | | Heavy obfuscation | Note in report, feature list may be incomplete | --- ## Known Limitations - iOS API extraction not possible (store scrape only, no IPA download) - Effort estimates are AI-sprint based, not calendar time — depends on developer review speed - Play Store download counts are ranges (not exact) — viability estimate uses midpoint - APKPure availability not guaranteed for all apps - Heavy R8 obfuscation may limit feature detection accuracy --- ## Working Directory Layout ``` ./work/{package}/ ├── app.xapk ← downloaded APK ├── output/ │ ├── sources/ ← decompiled Java/Kotlin │ └── names/ ← Kotlin name recovery maps ├── clone-report-YYYY-MM-DD.md ← final report └── implementation-plan.md ← generated by writing-plans ``` --- ## Dependencies **Skill dependencies:** - `android-reverse-engineering` plugin (same repo) - Java JDK 17+ - jadx (auto-installed if missing) - curl **Optional:** - Vineflower/Fernflower (better decompile quality) - dex2jar --- ## Installation ```bash # 1. Clone fork git clone https://github.com/masa2146/android-reverse-engineering-skill.git cd android-reverse-engineering-skill # 2. Install both plugins /plugin marketplace add . /plugin install android-reverse-engineering@android-reverse-engineering-skill /plugin install clone-app@android-reverse-engineering-skill ``` --- ## Out of Scope - Automated code generation of the clone (that's writing-plans → executing-plans) - iOS IPA download/reverse engineering - Real-time market data (uses scraped/estimated data) - Legal review of clone viability