|
| 1 | +<!-- SPDX-License-Identifier: MIT --> |
| 2 | +<!-- Part of PyBLE (https://pyble.dev) — see /LICENSE. --> |
| 3 | + |
| 4 | +# Google Play graphics and screenshot package |
| 5 | + |
| 6 | +Prepared for the English open-testing listing on 2026-09-10. The submission |
| 7 | +instructions and store copy are in |
| 8 | +[google-play-open-testing.md](google-play-open-testing.md). |
| 9 | + |
| 10 | +## Upload requirements checked on 2026-09-10 |
| 11 | + |
| 12 | +| Asset | Format and dimensions | |
| 13 | +| --- | --- | |
| 14 | +| App icon | 512 × 512, 32-bit PNG, at most 1024 KB | |
| 15 | +| Feature graphic | 1024 × 500, JPEG or 24-bit PNG without alpha | |
| 16 | +| Screenshots | At least two across device types; up to eight per type; JPEG or 24-bit PNG without alpha; 320–3840 px; longest side at most twice the shortest | |
| 17 | + |
| 18 | +Google recommends four app screenshots at 1080 px or higher in 16:9 landscape |
| 19 | +or 9:16 portrait for screenshot-based promotion. Its large-screen guidance |
| 20 | +also calls for four screenshots and those aspect ratios. Provide accurate |
| 21 | +device-specific captures and concise alt text. These are separate from the |
| 22 | +basic screenshot upload limits. See the official |
| 23 | +[preview asset requirements](https://support.google.com/googleplay/android-developer/answer/9866151?hl=en). |
| 24 | + |
| 25 | +## Artwork |
| 26 | + |
| 27 | +The canonical icon is |
| 28 | +[`app/assets/branding/pyble-google-play-512.png`](../../app/assets/branding/pyble-google-play-512.png). |
| 29 | +The package copies it without changes. It is derived from the project's MIT |
| 30 | +Prompt Chip SVG; see the |
| 31 | +[branding provenance](../../app/assets/branding/README.md). |
| 32 | + |
| 33 | +The feature graphic is authored as |
| 34 | +[`pyble-google-play-feature.svg`](../../tools/publication/pyble-google-play-feature.svg) |
| 35 | +and exported as `pyble-feature-1024x500.png`. The text is: |
| 36 | + |
| 37 | +> PyBLE |
| 38 | +> |
| 39 | +> MicroPython. Over Bluetooth. |
| 40 | +> |
| 41 | +> Build ideas on a compatible board. |
| 42 | +> |
| 43 | +> Editor · Blocks · Console · Files |
| 44 | +
|
| 45 | +This is a fresh editorial vector composition using the canonical PyBLE mark, |
| 46 | +navy/blue palette, and a simple code/wireless illustration. It is not an app |
| 47 | +screenshot. It includes no stock artwork, generated raster artwork, third-party |
| 48 | +logos, store badges, or iPad imagery. Text uses the installed Helvetica Neue |
| 49 | +and Menlo system fonts during raster export; no font files are redistributed. |
| 50 | + |
| 51 | +| Asset | Alt text | |
| 52 | +| --- | --- | |
| 53 | +| Icon | PyBLE blue microcontroller with a white terminal prompt on a navy background. | |
| 54 | +| Feature graphic | PyBLE: MicroPython over Bluetooth, with a code prompt and wireless signal illustration. | |
| 55 | + |
| 56 | +## Reproducible local package |
| 57 | + |
| 58 | +The completed package contains twelve upload PNGs, plus the asset manifest |
| 59 | +and SHA-256 list, in the ignored workspace: |
| 60 | + |
| 61 | +```text |
| 62 | +local/publication/google-play/open-testing-2026-09-10/store-assets/ |
| 63 | + pyble-icon-512.png |
| 64 | + pyble-feature-1024x500.png |
| 65 | + phone/ # 3 current signed-build captures |
| 66 | + tablet-7-inch/ # 3 current signed-build captures |
| 67 | + tablet-10-inch/ # 4 reviewed physical-device feature captures |
| 68 | + asset-manifest.json |
| 69 | + SHA256SUMS |
| 70 | +``` |
| 71 | + |
| 72 | +To export the icon and feature graphic alone: |
| 73 | + |
| 74 | +```sh |
| 75 | +python3 tools/publication/prepare_google_play_assets.py \ |
| 76 | + --output-dir local/publication/google-play/open-testing-2026-09-10/artwork-new |
| 77 | +``` |
| 78 | + |
| 79 | +The script requires Python 3.9+, Inkscape, and ImageMagick. It refuses to |
| 80 | +overwrite an existing output directory. It writes an `asset-manifest.json` |
| 81 | +with dimensions, SHA-256 hashes, source provenance, and alt text, plus |
| 82 | +`SHA256SUMS`. The PNG outputs have the required color formats; the feature |
| 83 | +graphic has no alpha channel. |
| 84 | + |
| 85 | +For a screenshot set, pass `--capture-manifest` with a local JSON file whose |
| 86 | +`environment` records app/package/build/device/source provenance and whose |
| 87 | +`screenshots` contains `source`, `device_type`, `order`, `key`, and `alt_text` |
| 88 | +for every capture. Source paths are relative to the manifest. Device types are |
| 89 | +`phone`, `tablet-7-inch`, and `tablet-10-inch`. An optional `crop` records exact |
| 90 | +`x`, `y`, `width`, and `height` to remove OS bars. The script checks dimensions, |
| 91 | +strips metadata, converts to 24-bit PNG, and requires zero changed pixels |
| 92 | +against every source or exact crop. It does not resize, annotate, or retouch |
| 93 | +app content. |
| 94 | + |
| 95 | +To reproduce the complete package, retaining the existing reviewed output: |
| 96 | + |
| 97 | +```sh |
| 98 | +python3 tools/publication/prepare_google_play_assets.py \ |
| 99 | + --output-dir local/publication/google-play/open-testing-2026-09-10/store-assets-new \ |
| 100 | + --capture-manifest local/publication/google-play/open-testing-2026-09-10/capture-manifest.json |
| 101 | +``` |
| 102 | + |
| 103 | +## Physical tablet captures |
| 104 | + |
| 105 | +The four reviewed captures below come from a physical Lenovo TB-J616X running |
| 106 | +Android 12, PyBLE 0.2.0 build 5, on 2026-08-28. The installed capture package was |
| 107 | +`dev.pyble.pyble.tutorialcapture`, built from |
| 108 | +`4df378fc76c919f0e2481eb5b668f14115d38587`. These are real board sessions, with |
| 109 | +the displayed PyBLE agent version 0.6.0. The capture build is not a Play binary. |
| 110 | + |
| 111 | +These four app surfaces remain representative of the current source: the only |
| 112 | +`app/lib/` change between that capture revision and preparation baseline |
| 113 | +`ebbb427a17aacf58bdd7ea150520e63a6fb48acd` is a documentation-only change to |
| 114 | +`pble/hello.dart`. The open-testing preparation adds an About privacy action |
| 115 | +and policy page; it does not change the four depicted surfaces. Preserve this |
| 116 | +provenance instead of relabeling these as newly captured build-8 images. |
| 117 | + |
| 118 | +The source provenance contains original raw hashes, crop geometry, and device |
| 119 | +and board session details: |
| 120 | +[five-board screenshot record](../testing/tutorial-five-board-screenshot-provenance-2026-08-28.md). |
| 121 | +Each reviewed frame is the original 2000 × 1092 app region, with only Android |
| 122 | +system bars removed by the earlier reviewed crop. Those dimensions satisfy |
| 123 | +the basic upload limits, but do not have the preferred 16:9 promotional ratio. |
| 124 | +Retain the honest geometry; a future physical capture at 16:9 can replace it. |
| 125 | + |
| 126 | +Upload these under **10-inch tablet screenshots**, in this order: |
| 127 | + |
| 128 | +| Order / output filename | Source under `tools/web/public/learn/app/` | Alt text | |
| 129 | +| --- | --- | --- | |
| 130 | +| `01-editor-console.png` | `pyble-app-0.2.0-build-5-first-program-editor-console-f6928eea293b.png` | MicroPython editor, board files and Console showing Hello from PyBLE on a connected board. | |
| 131 | +| `02-blocks-python.png` | `pyble-app-0.2.0-build-5-blocks-hello-workspace-adc069d73fba.png` | Blocks workspace with a Hello, PyBLE print block and the generated Python shown alongside it. | |
| 132 | +| `03-board-discovery.png` | `pyble-app-0.2.0-build-5-setup-five-board-scan-a89dedab7efc.png` | Bluetooth discovery lists five nearby PyBLE boards with signal strength and a Scan again control. | |
| 133 | +| `04-example-import.png` | `pyble-app-0.2.0-build-5-examples-import-complete-65fc3f839336.png` | A public Python example has downloaded to the board; the app confirms it was not opened or run automatically. | |
| 134 | + |
| 135 | +The images were visually reviewed again for this package. They show only public |
| 136 | +tutorial content, intentional documentation-board identifiers, and expected |
| 137 | +app state. No account, private repository, token, notification, personal file, |
| 138 | +debug badge, or device overlay appears in the selected app regions. |
| 139 | + |
| 140 | +There is no video, Chromebook, TV, Wear OS, car, or XR asset in this package. |
| 141 | +Do not duplicate tablet images into phone slots or describe |
| 142 | +the existing iPad website hero as an Android capture. |
| 143 | + |
| 144 | +## Current phone and 7-inch tablet captures |
| 145 | + |
| 146 | +The production app shows its connection screen until a real compatible board |
| 147 | +is ready; the IDE cannot be reached without that connection. Emulator captures |
| 148 | +must preserve this actual state. The local Android emulator can supply current |
| 149 | +connection/About images, but cannot supply genuine connected board, Python |
| 150 | +execution, or file-transfer evidence. |
| 151 | + |
| 152 | +The completed local manifest records exact capture builds, display geometry, |
| 153 | +density, and screenshot filenames. Use its `phone/` output directory for the |
| 154 | +phone slot and `tablet-7-inch/` for the 7-inch slot. Emulator screenshots |
| 155 | +supplement the physical tablet feature images; they do not replace hardware |
| 156 | +validation for the release candidate. |
| 157 | + |
| 158 | +The six current screenshots were captured on 2026-09-10 from the signed |
| 159 | +production APK, `dev.pyble.pyble`, version **0.2.0 (8)**: |
| 160 | + |
| 161 | +- Source commit: `768fafe45beee7731d1a38480cc0463a2f5680cd`. |
| 162 | +- App tree: `27fd1a264a576e68126c38f966db328559660249`. |
| 163 | +- APK SHA-256: `3c98983a995c657f10a398d7b0f65a07c2d2af18e07c30e7d5dfc094eefcbdcf`. |
| 164 | +- OS: Android 14 / API 34, using the installed Google APIs ARM64 system image. |
| 165 | +- Phone: isolated phone AVD based on the Pixel 3a profile, 420 dpi, raw runtime |
| 166 | + display 1080 × 2046. The exact `1080x1920+0+63` crop removes 63-pixel status |
| 167 | + and navigation bars and retains the complete app region. |
| 168 | +- 7-inch tablet: isolated Nexus 7 2013 AVD, 320 dpi, native 1200 × 1920, |
| 169 | + captured in landscape at 1920 × 1200. The exact `1920x1032+0+48` crop removes |
| 170 | + the 48-pixel status bar and 120-pixel Android taskbar. This preserves the |
| 171 | + entire app region and excludes other apps' taskbar icons. |
| 172 | +- Default font scale 1.0, real disconnected app state, no account or board. |
| 173 | + No source code, providers, or connection results were changed for capture. |
| 174 | + |
| 175 | +The phone PNGs are 1080 × 1920. The 7-inch PNGs are 1920 × 1032 and meet the |
| 176 | +basic screenshot limits; they do not meet the preferred 1080-pixel minimum |
| 177 | +short edge and 16:9 ratio for large-screen promotion. Neither the three-image |
| 178 | +phone set nor the three-image 7-inch set claims the four-image promotional gate. |
| 179 | + |
| 180 | +For **each** of the phone and 7-inch slots, upload in this order: |
| 181 | + |
| 182 | +| Filename | Alt text | |
| 183 | +| --- | --- | |
| 184 | +| `01-setup.png` | PyBLE connection screen explains that a compatible board running the PyBLE agent is needed to edit and run MicroPython. | |
| 185 | +| `02-about.png` | About PyBLE shows version 0.2.0 (8) and describes the open-source MicroPython IDE. | |
| 186 | +| `03-privacy.png` | The in-app PyBLE Privacy Policy explains local work, project ownership and the optional public GitHub import. | |
| 187 | + |
| 188 | +The APK installed and launched successfully on both configurations. The native |
| 189 | +flow **Setup → About → Privacy policy → Android Back → About → Android Back → |
| 190 | +Setup** passed on both, with visible titles verified in UI hierarchy captures. |
| 191 | +The About page displayed the correct version and build. Visual review found no |
| 192 | +clipped labels, debug badge, app crash, private content, or unrelated device |
| 193 | +overlay in the exported app regions. Raw images and UI evidence remain under |
| 194 | +`local/publication/google-play/open-testing-2026-09-10/raw/`; the result is |
| 195 | +recorded in `native-ui-smoke.json` beside `capture-manifest.json`. |
| 196 | + |
| 197 | +All ten screenshot exports passed exact pixel comparisons after the documented |
| 198 | +system-bar crops and RGB conversion. These checks establish capture integrity |
| 199 | +and native UI navigation; they do not establish BLE behavior on physical |
| 200 | +hardware. The isolated emulator instances were stopped after capture without |
| 201 | +saving snapshots; the user's original AVD configurations were not edited. |
0 commit comments