v1.0.0 release: Android APK + multi-arch + GitHub Actions integration#30
Merged
Conversation
… docs
Version bump reflects the scope — a unified Rust core that now ships
for desktop (Linux/macOS/Windows) AND Android from the same crate.
Android changes:
- build.gradle.kts: ABI filters expanded to arm64-v8a + armeabi-v7a
+ x86_64 + x86. cargoBuild{Debug,Release} pass all four ABIs to
cargo-ndk in a single invocation. normalizeTun2proxySo() walks every
ABI dir now (was arm64-only).
- Release buildType signs with the debug keystore — no Play Store
target, so signature identity doesn't matter, installability does.
Gradle auto-provisions ~/.android/debug.keystore if absent, so CI
runners inherit this without extra setup.
- versionName 1.0.0, versionCode 100 (room to bump monotonically).
CI:
- release.yml gets a dedicated `android:` job that sets up JDK 17,
Android SDK/NDK 26, all four rust-android targets, installs
cargo-ndk, runs assembleRelease, and uploads a single universal APK
named `mhrv-rs-android-universal-v<version>.apk` into the same
`dist/` collected by the release job downstream.
- `release:` job now gates on `needs: [build, android]` so tagging
v1.0.0 triggers both build matrices before cutting the GitHub
release.
Docs:
- docs/android.md — full 10-step install walk-through: APK sideload,
Apps Script deployment (with "Advanced → Go to (unsafe) → Allow"
reality check), config paste, SNI reachability test, MITM CA
install with OEM-specific nav paths (Pixel / Samsung / Xiaomi),
Start, troubleshooting common failure modes. Also documents the
known limitations — Cloudflare Turnstile loops (inherent to the
Apps Script egress IP pool), UDP/QUIC not tunnelled, IPv6 leaks,
Apps Script daily quota — so users know what to expect before
trying it on a site that won't work.
- releases/README.md — APK row added to the English and Persian
tables, version bumped everywhere to v1.0.0.
- Top-level README — Android listed under Platforms with a link
to docs/android.md.
Release artifact:
- releases/mhrv-rs-android-universal-v1.0.0.apk — 38 MB universal
APK built locally from this tree. Installs + launches on API 24+.
The CI job will regenerate it on tag push; this is the copy
committed for users who can't reach GitHub Releases.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
therealaleph
added a commit
that referenced
this pull request
Apr 25, 2026
… docs (#30) Version bump reflects the scope — a unified Rust core that now ships for desktop (Linux/macOS/Windows) AND Android from the same crate. Android changes: - build.gradle.kts: ABI filters expanded to arm64-v8a + armeabi-v7a + x86_64 + x86. cargoBuild{Debug,Release} pass all four ABIs to cargo-ndk in a single invocation. normalizeTun2proxySo() walks every ABI dir now (was arm64-only). - Release buildType signs with the debug keystore — no Play Store target, so signature identity doesn't matter, installability does. Gradle auto-provisions ~/.android/debug.keystore if absent, so CI runners inherit this without extra setup. - versionName 1.0.0, versionCode 100 (room to bump monotonically). CI: - release.yml gets a dedicated `android:` job that sets up JDK 17, Android SDK/NDK 26, all four rust-android targets, installs cargo-ndk, runs assembleRelease, and uploads a single universal APK named `mhrv-rs-android-universal-v<version>.apk` into the same `dist/` collected by the release job downstream. - `release:` job now gates on `needs: [build, android]` so tagging v1.0.0 triggers both build matrices before cutting the GitHub release. Docs: - docs/android.md — full 10-step install walk-through: APK sideload, Apps Script deployment (with "Advanced → Go to (unsafe) → Allow" reality check), config paste, SNI reachability test, MITM CA install with OEM-specific nav paths (Pixel / Samsung / Xiaomi), Start, troubleshooting common failure modes. Also documents the known limitations — Cloudflare Turnstile loops (inherent to the Apps Script egress IP pool), UDP/QUIC not tunnelled, IPv6 leaks, Apps Script daily quota — so users know what to expect before trying it on a site that won't work. - releases/README.md — APK row added to the English and Persian tables, version bumped everywhere to v1.0.0. - Top-level README — Android listed under Platforms with a link to docs/android.md. Release artifact: - releases/mhrv-rs-android-universal-v1.0.0.apk — 38 MB universal APK built locally from this tree. Installs + launches on API 24+. The CI job will regenerate it on tag push; this is the copy committed for users who can't reach GitHub Releases. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Cargo.toml+ AndroidversionName) — this is the first release to ship a real Android build alongside desktop.arm64-v8a,armeabi-v7a,x86_64,x86. ~38 MB.release.ymlgets a newandroid:job that builds the APK in CI on everyv*tag. Therelease:job now waits on both matrices.docs/android.md— a 10-step install walk-through covering APK sideload, Apps Script deployment, SNI testing, MITM CA install with OEM-specific Settings paths, and the known limitations (Cloudflare Turnstile loops, UDP/QUIC, IPv6 leaks, Apps Script daily quota).Test plan
cargo test --lib— 54 passing on v1.0.0cargo build --release --bin mhrv-rsand--bin mhrv-rs-ui --features ui— both build./gradlew :app:assembleReleaselocally produces a 38MB universal APK containing all 4 ABIsdumpsys packageandroid:job runs green on the v1.0.0 tag (will verify after merge + tag)🤖 Generated with Claude Code