Skip to content

Building and releasing

monikapurpl3 edited this page Aug 21, 2026 · 2 revisions

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 the package host, which also serves a stable breeze-latest.apk.

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.

Clone this wiki locally