Building Glosira for F-Droid ========================== Required tools -------------- OpenJDK 17 or newer (local validation used OpenJDK 21.0.12.1) Gradle 8.11.1 Android SDK Platform 36 Android SDK Build-Tools 35.0.0 Android Gradle Plugin 8.9.2 (resolved from Google Maven) Kotlin Gradle Plugin 1.9.24 No Android Studio, Docker, NDK, Node.js, backend, proprietary runtime SDK, Google account, signing key or service credentials are needed. With sdkmanager available: sdkmanager 'platforms;android-36' 'build-tools;35.0.0' 'platform-tools' Accept SDK licenses if prompted and set ANDROID_HOME to the installed SDK. From the repository root: gradle --version gradle --no-daemon --console=plain :app:assembleRelease :app:lintRelease Use Gradle 8.11.1, not the unrelated version that a distribution might install by default. Gradle resolves dependencies from google(), mavenCentral() and the Gradle Plugin Portal. First-time dependency resolution needs Internet access. The app's production server is NOT contacted by the build. Output: app/build/outputs/apk/release/app-release-unsigned.apk Lint report: app/build/reports/lint-results-release.html The release is deliberately unsigned; an unsigned APK cannot be installed. F-Droid handles signing. For a local device smoke test only: gradle :app:assembleDebug adb install app/build/outputs/apk/debug/app-debug.apk The debug key is local to the builder and is never part of this repository. A debug-signed build cannot update a F-Droid-signed build with the same ID. The Gradle wrapper properties record the required version. F-Droid uses its own Gradle installation and does not need a checked-in wrapper JAR. Verification ------------ python3 tools/check_public_tree.py apkanalyzer manifest application-id app/build/outputs/apk/release/app-release-unsigned.apk apkanalyzer manifest min-sdk app/build/outputs/apk/release/app-release-unsigned.apk Expected ID: com.glosira.app.fdroid; expected min SDK: 19. No paid APIs or synthesis jobs run as part of building or testing this client. Offline UI regression tests (no emulator or live service access): gradle :app:testDebugUnitTest These use JUnit 4.13.2 and Robolectric 4.16.1. Robolectric may download its Android framework test artifacts from Maven on the first run. WebView is shadowed; tests do not register service accounts.