# hojin-v/google-play-release architecture

> Architecture diagram of the GitHub repository hojin-v/google-play-release, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-11). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/hojin-v/google-play-release
- Repository: https://github.com/hojin-v/google-play-release

## Overview

This toolkit prepares and audits Android release artifacts, gathers app-specific Play declarations, creates store-preview images, and manages Play listing and release state. The principal workflow starts in an Android project: prepare builds and checks a signed AAB, then Fastlane can sync listings, upload a draft, or promote a release. Separate branches support declaration interviews and HTML-preview or real-device evidence capture. The README documents the user-facing workflows; sampled source confirms screenshot orchestration and Play edit behavior, but not the Fastlane lane definitions or the video runner’s full output pipeline.

Main entry points: [`skills/google-play-release/scripts/release.py`](https://github.com/hojin-v/google-play-release/blob/main/skills/google-play-release/scripts/release.py) (AAB preparation and audit), [`fastlane/play_client.rb`](https://github.com/hojin-v/google-play-release/blob/main/fastlane/play_client.rb) (Play edit client), [`tools/capture_android_video.py`](https://github.com/hojin-v/google-play-release/blob/main/tools/capture_android_video.py) (Device video capture), [`skills/google-play-release/scripts/screenshots.py`](https://github.com/hojin-v/google-play-release/blob/main/skills/google-play-release/scripts/screenshots.py) (Preview generation and check)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_prep["Artifact preparation"]
  node_release_tool["AAB preparation and audit<br/>[release.py]"]
  node_signing_key["Upload-key setup"]
end

subgraph group_store["Store assets"]
  node_preview_runner["Preview generation and check<br/>[screenshots.py]"]
  node_browser_capture["Browser scene capture<br/>[screenshots.cjs]"]
  node_image_converter["Screenshot formatting"]
end

subgraph group_release["Play release"]
  node_fastlane["Play release lanes"]
  node_play_client["Play edit client<br/>[play_client.rb]"]
  node_play_state["Edit status receipt<br/>[play_client.rb]"]
end

subgraph group_evidence["Policy and evidence"]
  node_declarations["Declaration interview<br/>[declarations.py]"]
  node_android_capture["Device video capture"]
end

node_operator(("App operator"))
node_android_project["Android project"]
node_gradle["Gradle build"]
node_android_device["Android test device"]
node_ffmpeg["FFmpeg"]
node_play_api["Google Play API"]

node_operator -->|"configures"| node_android_project
node_operator -->|"runs preparation"| node_release_tool
node_android_project -->|"provides project inputs"| node_release_tool
node_release_tool -->|"runs build tasks"| node_gradle
node_signing_key -->|"provides signing files"| node_operator
node_operator -->|"records answers"| node_declarations
node_declarations -->|"saves app facts"| node_android_project
node_release_tool -->|"checks previews"| node_preview_runner
node_preview_runner -->|"runs generator"| node_browser_capture
node_browser_capture -->|"formats captures"| node_image_converter
node_operator -->|"runs scenario"| node_android_capture
node_android_capture -->|"drives and records"| node_android_device
node_android_capture -->|"encodes captions"| node_ffmpeg
node_operator -->|"requests Play action"| node_fastlane
node_fastlane -.->|"uses uploader client"| node_play_client
node_play_client -->|"reads and commits edits"| node_play_api
node_play_client -->|"writes edit status"| node_play_state

click node_release_tool "https://github.com/hojin-v/google-play-release/blob/main/skills/google-play-release/scripts/release.py"
click node_signing_key "https://github.com/hojin-v/google-play-release/blob/main/skills/google-play-release/scripts/create_upload_key.py"
click node_declarations "https://github.com/hojin-v/google-play-release/blob/main/skills/google-play-release/scripts/declarations.py"
click node_preview_runner "https://github.com/hojin-v/google-play-release/blob/main/skills/google-play-release/scripts/screenshots.py"
click node_browser_capture "https://github.com/hojin-v/google-play-release/blob/main/skills/google-play-release/scripts/screenshots.cjs"
click node_image_converter "https://github.com/hojin-v/google-play-release/blob/main/tools/StoreScreenshot.java"
click node_android_capture "https://github.com/hojin-v/google-play-release/blob/main/tools/capture_android_video.py"
click node_fastlane "https://github.com/hojin-v/google-play-release/blob/main/fastlane/Fastfile"
click node_play_client "https://github.com/hojin-v/google-play-release/blob/main/fastlane/play_client.rb"
click node_play_state "https://github.com/hojin-v/google-play-release/blob/main/fastlane/play_client.rb"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_release_tool,node_signing_key toneBlue
class node_preview_runner,node_browser_capture,node_image_converter toneAmber
class node_fastlane,node_play_client,node_play_state,node_play_api toneMint
class node_declarations,node_android_capture toneRose
class node_operator,node_android_project,node_gradle,node_android_device,node_ffmpeg toneIndigo
```

## Components

### Artifact preparation

- [AAB preparation and audit](https://github.com/hojin-v/google-play-release/blob/main/skills/google-play-release/scripts/release.py): `skills/google-play-release/scripts/release.py`
- [Upload-key setup](https://github.com/hojin-v/google-play-release/blob/main/skills/google-play-release/scripts/create_upload_key.py): `skills/google-play-release/scripts/create_upload_key.py`

### Store assets

- [Preview generation and check](https://github.com/hojin-v/google-play-release/blob/main/skills/google-play-release/scripts/screenshots.py): `skills/google-play-release/scripts/screenshots.py`
- [Browser scene capture](https://github.com/hojin-v/google-play-release/blob/main/skills/google-play-release/scripts/screenshots.cjs): `skills/google-play-release/scripts/screenshots.cjs`
- [Screenshot formatting](https://github.com/hojin-v/google-play-release/blob/main/tools/StoreScreenshot.java): `tools/StoreScreenshot.java`

### Play release

- [Play release lanes](https://github.com/hojin-v/google-play-release/blob/main/fastlane/Fastfile): `fastlane/Fastfile`
- [Play edit client](https://github.com/hojin-v/google-play-release/blob/main/fastlane/play_client.rb): `fastlane/play_client.rb`
- [Edit status receipt](https://github.com/hojin-v/google-play-release/blob/main/fastlane/play_client.rb): `fastlane/play_client.rb`

### Policy and evidence

- [Declaration interview](https://github.com/hojin-v/google-play-release/blob/main/skills/google-play-release/scripts/declarations.py): `skills/google-play-release/scripts/declarations.py`
- [Device video capture](https://github.com/hojin-v/google-play-release/blob/main/tools/capture_android_video.py): `tools/capture_android_video.py`

### Other components

- **App operator**
- **Android project**
- **Gradle build**
- **Android test device**
- **FFmpeg**
- **Google Play API**

## Connections

- App operator → Android project: configures (evidence: `README.md`)
- App operator → AAB preparation and audit: runs preparation (evidence: `README.md`)
- Android project → AAB preparation and audit: provides project inputs (evidence: `README.md`)
- AAB preparation and audit → Gradle build: runs build tasks (evidence: `skills/google-play-release/scripts/release.py`)
- Upload-key setup → App operator: provides signing files (evidence: `skills/google-play-release/scripts/create_upload_key.py`)
- App operator → Declaration interview: records answers (evidence: `README.md`)
- Declaration interview → Android project: saves app facts (evidence: `skills/google-play-release/scripts/declarations.py`)
- AAB preparation and audit → Preview generation and check: checks previews (evidence: `skills/google-play-release/scripts/release.py`)
- Preview generation and check → Browser scene capture: runs generator (evidence: `skills/google-play-release/scripts/screenshots.py`)
- Browser scene capture → Screenshot formatting: formats captures (evidence: `skills/google-play-release/scripts/screenshots.cjs`)
- App operator → Device video capture: runs scenario (evidence: `README.md`)
- Device video capture → Android test device: drives and records (evidence: `tools/capture_android_video.py`)
- Device video capture → FFmpeg: encodes captions (evidence: `tools/capture_android_video.py`)
- App operator → Play release lanes: requests Play action (evidence: `README.md`)
- Play release lanes → Play edit client: uses uploader client
- Play edit client → Google Play API: reads and commits edits (evidence: `fastlane/play_client.rb`)
- Play edit client → Edit status receipt: writes edit status (evidence: `fastlane/play_client.rb`)
