mirror of
https://github.com/meshtastic/Meshtastic-Android.git
synced 2026-10-02 08:34:34 -04:00
docs: publish channels: main
This commit is contained in:
1 parent
f679845484
commit
d2ad005b07
2 files changed
+2
-2
No files matched your search
File diff suppressed because one or more lines are too long.
@@ -12,7 +12,7 @@
|
||||
./gradlew :screenshot-tests:copyDocsScreenshots <span class="c"># copy doc images from BOTH modules into docs/assets</span>
|
||||
</code></pre></div></div> <p>Rendering is host-deterministic here (layoutlib): a local <code class="language-plaintext highlighter-rouge">update</code> produces references byte-identical to CI, so locally-recorded goldens pass <code class="language-plaintext highlighter-rouge">validate</code>. See <code class="language-plaintext highlighter-rouge">docs/assets/screenshots/README.md</code> for which module a new screenshot belongs in.</p> <h4 id="store-screenshots"> <a href="#store-screenshots" class="anchor-heading" aria-labelledby="store-screenshots"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Store screenshots </h4> <p>The store-listing screenshots (Play, F-Droid, IzzyOnDroid, and the desktop app’s Flathub listing) are taken from the real apps, connected to Demo Mode’s hidden showcase mesh (<code class="language-plaintext highlighter-rouge">/connections?address=mshowcase</code>, <code class="language-plaintext highlighter-rouge">MockScenario.SHOWCASE</code> in <code class="language-plaintext highlighter-rouge">:core:network</code>), rather than drawn. Every screen is reached by its deep link, so the flow does not depend on the display language, and each shot is kept once the window has stopped changing.</p> <ul> <li><strong>Android: <code class="language-plaintext highlighter-rouge">:store-screenshots</code></strong>, a UiAutomator 2.4 test module targeting <code class="language-plaintext highlighter-rouge">:androidApp</code>. For each surface <code class="language-plaintext highlighter-rouge">fastlane supply</code> uploads it sets the display size and density, relaunches the debug app through its shell-only <code class="language-plaintext highlighter-rouge">AutomationLauncher</code> alias with <code class="language-plaintext highlighter-rouge">skip_onboarding</code> and <code class="language-plaintext highlighter-rouge">skip_connect_confirm</code>, and saves the five listing shots, full screen with a SystemUI demo-mode status bar, to <code class="language-plaintext highlighter-rouge">/data/local/tmp/store-screenshots/<flavor></code> on the device.</li> <li><strong>Desktop: <code class="language-plaintext highlighter-rouge">store-screenshots/capture-desktop.sh</code></strong> runs the real desktop debug build on an Xvfb display, one launch per screen with that screen’s deep link, and saves the five Flathub shots. The map needs Skiko’s OpenGL renderer and Skiko refuses any GL adapter named <code class="language-plaintext highlighter-rouge">llvmpipe</code> or <code class="language-plaintext highlighter-rouge">virgl</code>, so Mesa runs GL through zink over lavapipe.</li> </ul> <p>On an emulator or device, one flavor at a time:</p> <div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code>./gradlew :store-screenshots:connectedFdroidDebugAndroidTest
|
||||
adb pull /data/local/tmp/store-screenshots/fdroid/. fastlane/metadata/android/en-US/images/
|
||||
</code></pre></div></div> <div class="table-wrapper"><table> <thead> <tr> <th>Folder</th> <th>Size</th> <th>Window</th> <th>Uploaded by</th> </tr> </thead> <tbody> <tr> <td><code class="language-plaintext highlighter-rouge">phoneScreenshots/</code></td> <td>1080×1920 @400 dpi</td> <td>compact: bottom navigation bar</td> <td><code class="language-plaintext highlighter-rouge">fastlane supply</code></td> </tr> <tr> <td><code class="language-plaintext highlighter-rouge">sevenInchScreenshots/</code></td> <td>1080×1920 @288 dpi</td> <td>medium: navigation rail, one pane</td> <td><code class="language-plaintext highlighter-rouge">fastlane supply</code></td> </tr> <tr> <td><code class="language-plaintext highlighter-rouge">tenInchScreenshots/</code></td> <td>2560×1440 @320 dpi</td> <td>expanded: rail, list beside detail</td> <td><code class="language-plaintext highlighter-rouge">fastlane supply</code></td> </tr> <tr> <td><code class="language-plaintext highlighter-rouge">desktopApp/packaging/linux/screenshots/</code></td> <td>1280×800</td> <td>expanded: rail, list beside detail</td> <td>Flathub, through the release assets <code class="language-plaintext highlighter-rouge">metainfo.xml</code> names</td> </tr> </tbody> </table></div> <p><code class="language-plaintext highlighter-rouge">.github/workflows/store-screenshots.yml</code> runs both on hosted runners, with both Android flavors in one job on one emulator (google for the Play listing, fdroid for the committed tree), on every internal release, on demand, and on pull requests that touch the renderer or the showcase mesh. The release pipeline attaches the captures to the release, publishes the Play listing from them on production, and opens a self-merging PR that writes the fdroid and desktop sets back here (<code class="language-plaintext highlighter-rouge">RELEASE_PROCESS.md</code>).</p> <h3 id="baseline-profile--startup-performance"> <a href="#baseline-profile--startup-performance" class="anchor-heading" aria-labelledby="baseline-profile--startup-performance"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Baseline Profile / startup performance </h3> <p>The <code class="language-plaintext highlighter-rouge">:baselineprofile</code> module (#5735) generates a <a href="https://developer.android.com/topic/performance/baselineprofiles/overview">Baseline Profile</a> for <code class="language-plaintext highlighter-rouge">:androidApp</code>, AOT-compiling the hot startup paths so ART doesn’t pay the JIT cost on first launch. It profiles the <code class="language-plaintext highlighter-rouge">google</code> flavor (the variant most users run), and both flavors ship the result.</p> <p>The Macrobenchmark generator (<code class="language-plaintext highlighter-rouge">BaselineProfileGenerator</code>) and the before/after benchmark (<code class="language-plaintext highlighter-rouge">StartupBenchmark</code>) live in <code class="language-plaintext highlighter-rouge">baselineprofile/src/main/kotlin/org/meshtastic/baselineprofile/</code>. Both run on a device/emulator:</p> <div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code>./gradlew :androidApp:generateBaselineProfile <span class="c"># Generate the profile (commit the output)</span>
|
||||
</code></pre></div></div> <div class="table-wrapper"><table> <thead> <tr> <th>Folder</th> <th>Size</th> <th>Window</th> <th>Uploaded by</th> </tr> </thead> <tbody> <tr> <td><code class="language-plaintext highlighter-rouge">phoneScreenshots/</code></td> <td>1080×1920 @400 dpi</td> <td>compact: bottom navigation bar</td> <td><code class="language-plaintext highlighter-rouge">fastlane supply</code></td> </tr> <tr> <td><code class="language-plaintext highlighter-rouge">sevenInchScreenshots/</code></td> <td>1080×1920 @288 dpi</td> <td>medium: navigation rail, one pane</td> <td><code class="language-plaintext highlighter-rouge">fastlane supply</code></td> </tr> <tr> <td><code class="language-plaintext highlighter-rouge">tenInchScreenshots/</code></td> <td>2560×1440 @320 dpi</td> <td>expanded: rail, list beside detail</td> <td><code class="language-plaintext highlighter-rouge">fastlane supply</code></td> </tr> <tr> <td><code class="language-plaintext highlighter-rouge">desktopApp/packaging/linux/screenshots/</code></td> <td>1280×800</td> <td>expanded: rail, list beside detail</td> <td>Flathub, through the release assets <code class="language-plaintext highlighter-rouge">metainfo.xml</code> names</td> </tr> </tbody> </table></div> <p><code class="language-plaintext highlighter-rouge">.github/workflows/store-screenshots.yml</code> runs both on hosted runners, each Android flavor in its own job on its own emulator through <code class="language-plaintext highlighter-rouge">store-screenshots/capture-android.sh</code> (google for the Play listing, fdroid for the committed tree), on every internal release, on demand, and on pull requests that touch the renderer or the showcase mesh. The release pipeline attaches the captures to the release, publishes the Play listing from them on production, and opens a self-merging PR that writes the fdroid and desktop sets back here (<code class="language-plaintext highlighter-rouge">RELEASE_PROCESS.md</code>).</p> <h3 id="baseline-profile--startup-performance"> <a href="#baseline-profile--startup-performance" class="anchor-heading" aria-labelledby="baseline-profile--startup-performance"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Baseline Profile / startup performance </h3> <p>The <code class="language-plaintext highlighter-rouge">:baselineprofile</code> module (#5735) generates a <a href="https://developer.android.com/topic/performance/baselineprofiles/overview">Baseline Profile</a> for <code class="language-plaintext highlighter-rouge">:androidApp</code>, AOT-compiling the hot startup paths so ART doesn’t pay the JIT cost on first launch. It profiles the <code class="language-plaintext highlighter-rouge">google</code> flavor (the variant most users run), and both flavors ship the result.</p> <p>The Macrobenchmark generator (<code class="language-plaintext highlighter-rouge">BaselineProfileGenerator</code>) and the before/after benchmark (<code class="language-plaintext highlighter-rouge">StartupBenchmark</code>) live in <code class="language-plaintext highlighter-rouge">baselineprofile/src/main/kotlin/org/meshtastic/baselineprofile/</code>. Both run on a device/emulator:</p> <div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code>./gradlew :androidApp:generateBaselineProfile <span class="c"># Generate the profile (commit the output)</span>
|
||||
./gradlew :baselineprofile:connectedGoogleBenchmarkReleaseAndroidTest <span class="c"># Quantify the cold-start win</span>
|
||||
</code></pre></div></div> <p>The generated profile is merged into <code class="language-plaintext highlighter-rouge">androidApp/src/main/generated/baselineProfiles/</code> (<code class="language-plaintext highlighter-rouge">mergeIntoMain</code> in <code class="language-plaintext highlighter-rouge">androidApp/build.gradle.kts</code>), so the fdroid and google release builds both package it via <code class="language-plaintext highlighter-rouge">androidx.profileinstaller</code>.</p> <blockquote> <p>ℹ️ <strong>Note:</strong> The journey covers cold start only (launch → first frame), because CI has no paired node. Post-connection screens (node list, map, message thread) aren’t yet AOT-compiled.</p> </blockquote> <p>Extending the journey past cold start needs a fake transport or a connected node wired into the harness.</p> <h2 id="test-organization"> <a href="#test-organization" class="anchor-heading" aria-labelledby="test-organization"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Test organization </h2> <div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>feature/my-feature/src/
|
||||
├── commonTest/kotlin/org/meshtastic/feature/myfeature/
|
||||
|
||||
Reference in new issue
Block a user