Building and releasing - monikapurpl3/breeze GitHub Wiki
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.apkCI runs flutter analyze and flutter test on every push and pull request.
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 breezeThen 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/.
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.
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.md. Vulnerabilities go to SECURITY.md privately, not into a public issue.
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.