docs(clone-app): design-capture, unity-re, build-spec rubrics + contract/report updates
This commit is contained in:
parent
3c9bb564ce
commit
5f7b29b6b9
|
|
@ -0,0 +1,54 @@
|
|||
# Clone Build Spec — {APP_TITLE}
|
||||
|
||||
> The standalone build contract. A fresh session with only this file and the
|
||||
> `$WORK/` artifacts it references must be able to build a pixel-perfect,
|
||||
> production-ready clone. Reference every artifact by **absolute path + summary**.
|
||||
|
||||
**Package:** {PACKAGE} · **Date:** {DATE} · **Selected stack:** {STACK}
|
||||
|
||||
## 1. Product overview & parity target
|
||||
What the app does; the parity bar (pixel-perfect visual + feature-complete).
|
||||
|
||||
## 2. Design system
|
||||
From `$WORK/design-tokens.json` (confidence: {…}): color palette + roles, type
|
||||
scale (fonts + sizes), spacing scale, corner radii, light/dark theme. Note where
|
||||
confidence is med/low and screenshots are the source of truth.
|
||||
|
||||
## 3. Screen-by-screen spec
|
||||
For **each** screen: purpose · layout · components · states (empty/loading/error)
|
||||
· navigation in/out · matching screenshot (`$WORK/screenshots/NN.png`).
|
||||
|
||||
## 4. Navigation map / IA
|
||||
The full screen graph + entry points.
|
||||
|
||||
## 5. API contract
|
||||
From `$WORK/payloads.json`: per endpoint — host, method, path, auth,
|
||||
request body, response shape, headers.
|
||||
|
||||
## 6. Data model
|
||||
Entities, fields, relationships (from payloads + RE digest).
|
||||
|
||||
## 7. Asset inventory
|
||||
Icons, fonts, drawables — extract from `$WORK/output` or recreate. List each.
|
||||
|
||||
## 8. Acceptance criteria
|
||||
Per screen and per flow — the testable definition of done for prod quality.
|
||||
|
||||
## 9. Out of scope / assumptions
|
||||
Explicit exclusions and assumptions.
|
||||
|
||||
## 10. Artifact references
|
||||
Absolute paths to: `design-tokens.json`, `design-digest.md`, `screenshots/`,
|
||||
`payloads.json`, `re-digest.md` (+ `unity-digest.md`, `game-assets/` if Unity).
|
||||
|
||||
---
|
||||
|
||||
## Game variant (Unity)
|
||||
Replace these sections:
|
||||
- **§2 Design system** → art style + UI atlas inventory; palette from sprites.
|
||||
- **§3 Screen-by-screen** → **scene/prefab-by-scene** spec (from `unity-digest.md`):
|
||||
each scene's objects, UI canvas, transitions; matching screenshot.
|
||||
- **§5 API contract** → **netcode**: backend (Photon/PlayFab/Mirror/custom),
|
||||
message types, sync model (from the IL2CPP/Mono type model).
|
||||
- **§7 Asset inventory** → `$WORK/game-assets/` manifest (sprites, atlases,
|
||||
audio, shaders, scenes, prefabs) + the AssetRipper project path.
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
# Design Capture Guide
|
||||
|
||||
Goal: recover enough of the target's visual design to clone it **pixel-perfect**.
|
||||
Two sources, always combined:
|
||||
|
||||
1. **APK resources** (`extract-design.py` on the decompile root) →
|
||||
`design-tokens.json` + `design-digest.md`. Real colors, dimens, theme,
|
||||
fonts, layout inventory, launcher icon.
|
||||
2. **Play Store screenshots** (`scrape-play-store.py` → `screenshot_urls`,
|
||||
downloaded to `$WORK/screenshots/`). The visual ground truth for layout,
|
||||
composition, and anything not in res.
|
||||
|
||||
## Framework-aware reading (confidence)
|
||||
|
||||
| Framework | What's in Android res | Confidence | Fallback |
|
||||
|---|---|---|---|
|
||||
| Native (XML views) | colors, dimens, themes, **layouts** | high | — |
|
||||
| Jetpack Compose | colors/dimens often in res; **no layouts** (UI in Kotlin) | med | grep sources for `Color(0x…)`, `.dp`, `.sp`; screenshots |
|
||||
| Flutter | almost nothing (Dart owns design) | low | screenshots primary; note low confidence |
|
||||
| React Native | almost nothing (JS owns styles) | low | screenshots primary |
|
||||
| Unity | n/a — use `unity-re-guide.md` | low | game assets + screenshots |
|
||||
|
||||
`extract-design.py` stamps each token group with `confidence`. When `med`/`low`,
|
||||
the build spec relies more on screenshots and says so.
|
||||
|
||||
## What to record in `design-tokens.json`
|
||||
|
||||
colors · dimens (spacing + `sp` text sizes) · typography (font files, text
|
||||
sizes) · shapes (corner/radius dimens) · theme (name, parent, dark flag, items)
|
||||
· icon path · layout inventory (count + file names). The caller fills `package`.
|
||||
|
||||
## Turning tokens into a spec
|
||||
|
||||
Map each token group into the build spec's "Design system" section: palette
|
||||
(named colors → roles), type scale (text sizes + fonts), spacing scale (dimens),
|
||||
corner radii, light/dark. Pair every screen in the spec with its closest
|
||||
`screenshots/NN.png`.
|
||||
|
|
@ -83,3 +83,22 @@ If the fingerprint reports Flutter / React Native / Cordova / Xamarin, set
|
|||
available (manifest, strings, hardcoded URLs, SDK list), and leave payloads
|
||||
empty where they cannot be recovered. Downstream phases widen the
|
||||
uncertainty band accordingly.
|
||||
|
||||
## Design & Unity outputs (clone-app additions)
|
||||
|
||||
Beyond the three RE files, the Phase 2 subagent ALSO writes:
|
||||
|
||||
- `$WORK/design-tokens.json` + `$WORK/design-digest.md` — from
|
||||
`extract-design.py` on the decompile root (standard apps). Schema and
|
||||
confidence rules: see `design-capture-guide.md`.
|
||||
- For Unity builds (`detect-unity.sh` → `il2cpp`/`mono`): `$WORK/unity-digest.md`
|
||||
(C# type model + netcode) and `$WORK/game-assets/` + `manifest.json` (via
|
||||
`il2cpp-dump.sh`/`ilspycmd` + `unity-assets.sh`). See `unity-re-guide.md`.
|
||||
|
||||
The subagent returns the short `design-summary` (and `unity-summary` when Unity)
|
||||
plus these paths — never raw resources, sources, or assets.
|
||||
|
||||
### RE Method addition
|
||||
| Value | Meaning |
|
||||
|---|---|
|
||||
| `limited: unity-no-tools` | Unity build but Il2CppInspectorRedux/AssetRipper absent — partial digest, assets/types may be empty. |
|
||||
|
|
|
|||
|
|
@ -26,6 +26,16 @@
|
|||
- Integrations: {list}
|
||||
- Backend required: {yes/no + why}
|
||||
|
||||
## 4a. Design System (Detected)
|
||||
- Palette: {key colors} · Type: {fonts + scale} · Theme: {light/dark}
|
||||
- Confidence: {high/med/low} (source: APK res + {n} Play screenshots)
|
||||
- Full tokens: `$WORK/design-tokens.json`; screenshots: `$WORK/screenshots/`
|
||||
|
||||
## 4b. Game Assets (if Unity)
|
||||
- Build type: {il2cpp/mono} · Type model: `$WORK/unity-digest.md`
|
||||
- Extracted assets: `$WORK/game-assets/` ({n} sprites, {n} scenes, …)
|
||||
- Omit this section entirely for non-Unity apps.
|
||||
|
||||
## 5. Effort Estimate (AI-Assisted)
|
||||
{effort table from effort-estimation-guide}
|
||||
**Total: {min}–{max} AI Sprints** (1 sprint ≈ one focused Claude Code session).
|
||||
|
|
|
|||
|
|
@ -0,0 +1,37 @@
|
|||
# Unity Reverse-Engineering Guide
|
||||
|
||||
Unity ships game logic as native IL2CPP or as managed Mono assemblies. jadx is
|
||||
blind to IL2CPP — detect the build first with `detect-unity.sh`.
|
||||
|
||||
## IL2CPP (`detect-unity.sh` → `il2cpp`)
|
||||
|
||||
Inputs: `lib/<abi>/libil2cpp.so` + `assets/bin/Data/Managed/Metadata/global-metadata.dat`.
|
||||
Run `il2cpp-dump.sh <so> <metadata> <out>` (wraps **Il2CppInspectorRedux**,
|
||||
https://github.com/LukeFZ/Il2CppInspectorRedux, needs .NET).
|
||||
|
||||
**Recoverable:** class / method / field / enum signatures, type hierarchy,
|
||||
serialized fields, network/RPC type shapes → data model + feature inventory.
|
||||
**Not recoverable:** C# method *bodies* (compiled to native ARM in the .so).
|
||||
|
||||
## Mono (`detect-unity.sh` → `mono`)
|
||||
|
||||
Inputs: `assets/bin/Data/Managed/*.dll` (real .NET assemblies). Decompile to
|
||||
near-source C# with `ilspycmd` (ILSpy CLI): `ilspycmd Assembly-CSharp.dll -o <out>`.
|
||||
Best case — full logic recovered.
|
||||
|
||||
## Assets (both branches)
|
||||
|
||||
`unity-assets.sh <apk> <out>` wraps **AssetRipper**
|
||||
(https://github.com/AssetRipper/AssetRipper). Extracts textures, sprites, UI
|
||||
atlases, fonts, audio, shaders, **scenes, prefabs** → the game's design system.
|
||||
|
||||
## Graceful degradation
|
||||
|
||||
If a tool is absent, its wrapper exits 3 with install guidance. The subagent
|
||||
then writes a partial `unity-digest.md` and sets `RE Method: limited: unity-no-tools`.
|
||||
|
||||
## Legal
|
||||
|
||||
Extracted game art is copyrighted. Outside authorized use (own game, lawful
|
||||
research), treat extracted assets as **reference only** and recreate in the same
|
||||
style — do not ship them.
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
#!/usr/bin/env bash
|
||||
set -uo pipefail
|
||||
HERE="$(cd "$(dirname "$0")" && pwd)"
|
||||
R="$HERE/../skills/clone-app/references"
|
||||
fail=0
|
||||
has() { # file substring
|
||||
if grep -qF "$2" "$1" 2>/dev/null; then echo "PASS: $(basename "$1") has '$2'"
|
||||
else echo "FAIL: $(basename "$1") missing '$2'"; fail=1; fi
|
||||
}
|
||||
|
||||
has "$R/design-capture-guide.md" "design-tokens.json"
|
||||
has "$R/design-capture-guide.md" "confidence"
|
||||
has "$R/design-capture-guide.md" "screenshots"
|
||||
has "$R/unity-re-guide.md" "Il2CppInspectorRedux"
|
||||
has "$R/unity-re-guide.md" "AssetRipper"
|
||||
has "$R/unity-re-guide.md" "ilspycmd"
|
||||
has "$R/clone-build-spec-template.md" "Screen-by-screen"
|
||||
has "$R/clone-build-spec-template.md" "Acceptance criteria"
|
||||
has "$R/clone-build-spec-template.md" "Game variant"
|
||||
has "$R/re-digest-contract.md" "design-tokens.json"
|
||||
has "$R/re-digest-contract.md" "unity-digest.md"
|
||||
has "$R/report-template.md" "Design System"
|
||||
has "$R/report-template.md" "Game Assets"
|
||||
|
||||
exit $fail
|
||||
Loading…
Reference in New Issue