Building and releasing - monikapurpl3/breeze GitHub Wiki

Building and releasing

Requirements: Flutter 3.44+, the Android SDK (API 36 for that Flutter version), JDK 17 or 21, and a device or emulator on Android 7.0 (API 24)+.

flutter pub get
flutter analyze
flutter test
flutter build apk --release     # -> build/app/outputs/flutter-apk/app-release.apk
adb install -r build/app/outputs/flutter-apk/app-release.apk

CI runs flutter analyze and flutter test on every push and pull request.

Signing your own release builds

Release signing is read from android/key.properties, which is git-ignored. Without it, a release build falls back to debug signing — fine for local testing, and the reason the early prereleases warn about an unknown developer.

keytool -genkeypair -v -keystore ~/keys/breeze-release.jks -storetype PKCS12 \
  -keyalg RSA -keysize 4096 -validity 10000 -alias breeze

Then write android/key.properties with four lines — storePassword, keyPassword, keyAlias=breeze, and storeFile as an absolute path to the .jks.

App icons regenerate with dart run flutter_launcher_icons from assets/icon/.

Gradle memory

The Flutter template asks the Gradle JVM for 8 GB and leaves it resident long after the build finishes — about 5 GB in practice. The heap is capped at 2 GB here and the daemon exits after ten minutes idle. If you are building on a machine with plenty of RAM and want the speed back, that is android/gradle.properties.

Where builds go

Releases are published on the releases page and mirrored to aspic, the project's host, whose page always names the current version. The mirror is published from breeze-core-native: packaging/repo/stage-app.sh fetches the latest release, checks it against its checksum and the signing certificate, and every aspic publish carries it.

bolero, the older host, still has 2.2.7 for anyone who links to it, marked outdated, and gets nothing new.

The app and the server version independently: the app talks to any server version and feature-detects what it can use, so there is no need to upgrade both together. See the compatibility table in Installing it.

Contributing

CONTRIBUTING.md. Vulnerabilities go to SECURITY.md privately, not into a public issue.

Licences

The in-app list (Settings → Licences) comes from Flutter's LicenseRegistry, which collects the LICENSE file of every Dart package in the graph at build time — so it cannot drift from what is actually linked, and needs no maintenance.

It does not know about Gradle. Anything added to android/app/build.gradle.kts is invisible to it, which is how the AndroidX Car App Library behind Android Auto — Apache-2.0, whose §4(a) asks that recipients get a copy of the licence — ended up with no attribution anywhere in the app. It is registered explicitly now in lib/src/native_licenses.dart, from a bundled copy of the licence text, and a test asserts the entry appears. Add native dependencies to that file too.

⚠️ **GitHub.com Fallback** ⚠️