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.
