Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,10 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v7

- name: Set up Java
uses: actions/setup-java@v4
uses: actions/setup-java@v5
with:
distribution: temurin
java-version: "17"
Expand All @@ -30,6 +30,7 @@ jobs:
uses: subosito/flutter-action@v2
with:
channel: stable
flutter-version: "3.47.1"
cache: true

- name: Install dependencies
Expand All @@ -48,7 +49,7 @@ jobs:
run: flutter build apk --debug

- name: Upload debug APK
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
with:
name: app-debug
path: build/app/outputs/flutter-apk/app-debug.apk
Expand Down
5 changes: 3 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,10 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v7

- name: Set up Java
uses: actions/setup-java@v4
uses: actions/setup-java@v5
with:
distribution: temurin
java-version: "17"
Expand All @@ -36,6 +36,7 @@ jobs:
uses: subosito/flutter-action@v2
with:
channel: stable
flutter-version: "3.47.1"
cache: true

- name: Read version from pubspec
Expand Down
11 changes: 11 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,17 @@
service error.

### Changed
- Dart and Android plugins are updated within the Flutter 3.47 / API 36
toolchain. BLE connect now uses FlutterBluePlus's nonprofit license. The map
stack stays on `flutter_map` 7 because `flutter_map_heatmap` still does not
support v8. Packages that need Android 17 (API 37) or AGP 9 built-in Kotlin
stay on the last versions that compile against API 36.
- Android builds now follow the Flutter 3.47 toolchain: Gradle 9.3.1, Android
Gradle Plugin 9.1.0, and Kotlin 2.4.0. CI and release workflows pin Flutter
3.47.1 so the Gradle/AGP/Kotlin warnings no longer appear. Gradle 9 no longer
provides `jcenter()`, so the Android build maps leftover plugin calls to
Maven Central. Android library plugins are compiled against API 36 so they
satisfy AGP 9's compile SDK requirement.
- The update check and the "View on GitHub" entry in Settings → About now
point at the fork's releases. The check uses the releases list endpoint so
prerelease-only repositories are detected, and release tags are matched by
Expand Down
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,9 @@ companion radio over USB or Bluetooth, and displays coverage on a Flutter map.

### Prerequisites

- Flutter SDK (3.10.0 or higher)
- Flutter SDK 3.47.1 or compatible (Dart 3.13)
- Android Studio or VS Code with Flutter extensions
- Android SDK with API level 21+
- Android SDK with API level 24+
- A MeshCore companion radio device (for testing)

### Installation
Expand Down Expand Up @@ -111,8 +111,8 @@ lib/

## Requirements

- Flutter stable with a Dart SDK compatible with `pubspec.yaml`.
- Android SDK and an Android device or emulator.
- Flutter 3.47.1 (Dart 3.13) or a compatible stable SDK.
- Android SDK (compile/target API 36, min API 24) and an Android device or emulator.
- A physical MeshCore companion radio for LoRa workflows.

## Development
Expand Down
6 changes: 6 additions & 0 deletions analysis_options.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,9 @@ analyzer:
- .toolchain/**
- build/**
- flutter/**
- android/**
- ios/**
- web/**
- windows/**
- macos/**
- linux/**
11 changes: 6 additions & 5 deletions android/app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ import java.io.FileInputStream

plugins {
id("com.android.application")
id("kotlin-android")
// The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins.
id("dev.flutter.flutter-gradle-plugin")
}
Expand Down Expand Up @@ -57,10 +56,6 @@ android {
targetCompatibility = JavaVersion.VERSION_17
}

kotlinOptions {
jvmTarget = JavaVersion.VERSION_17.toString()
}

defaultConfig {
applicationId = "mintylinux.meshcore.wardrive"
minSdk = flutter.minSdkVersion
Expand Down Expand Up @@ -91,6 +86,12 @@ android {
}
}

kotlin {
compilerOptions {
jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17
}
}

flutter {
source = "../.."
}
16 changes: 16 additions & 0 deletions android/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ allprojects {
repositories {
google()
mavenCentral()
maven { url = uri("https://jitpack.io") }
}
}

Expand All @@ -19,6 +20,21 @@ subprojects {
project.evaluationDependsOn(":app")
}

subprojects {
// AGP 9 requires each Android library to compile against at least the SDK
// of its dependencies. Several Flutter plugins still declare API 33/34.
fun bumpLibraryCompileSdk() {
extensions
.findByType<com.android.build.api.dsl.LibraryExtension>()
?.compileSdk = 36
}
if (state.executed) {
bumpLibraryCompileSdk()
} else {
afterEvaluate { bumpLibraryCompileSdk() }
}
}

tasks.register<Delete>("clean") {
delete(rootProject.layout.buildDirectory)
}
4 changes: 4 additions & 0 deletions android/gradle.properties
Original file line number Diff line number Diff line change
@@ -1,2 +1,6 @@
org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError
android.useAndroidX=true
# This newDsl flag was added by the Flutter template
android.newDsl=false
# This builtInKotlin flag was added by the Flutter template
android.builtInKotlin=false
2 changes: 1 addition & 1 deletion android/gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-all.zip
19 changes: 19 additions & 0 deletions android/jcenter-compat.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
// Gradle 9 removed RepositoryHandler.jcenter(). Some Flutter plugins still call it
// during evaluation (notably usb_serial 0.5.2). Map those calls to mavenCentral().
def aliasJcenter = { repos ->
repos.metaClass.jcenter = { Object[] args ->
repos.mavenCentral()
}
}

gradle.beforeProject { project ->
aliasJcenter(project.buildscript.repositories)
aliasJcenter(project.repositories)
}

gradle.projectsLoaded {
gradle.rootProject.allprojects { project ->
aliasJcenter(project.buildscript.repositories)
aliasJcenter(project.repositories)
}
}
6 changes: 4 additions & 2 deletions android/settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,10 @@ pluginManagement {

plugins {
id("dev.flutter.flutter-plugin-loader") version "1.0.0"
id("com.android.application") version "8.11.1" apply false
id("org.jetbrains.kotlin.android") version "2.2.20" apply false
id("com.android.application") version "9.1.0" apply false
id("org.jetbrains.kotlin.android") version "2.4.0" apply false
}

include(":app")

apply(from = "jcenter-compat.gradle")
1 change: 1 addition & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
- [Debugging ping responses](development/debugging-pings.md)
- [Map provider investigation](development/map-providers.md)
- [Android release builds, versioning, signing, and GitHub Actions](development/releasing.md)
- [Fork changelog draft (RU)](changelog-fork-ru.md)
- [Version history](../CHANGELOG.md)

Screenshot source files are stored in `assets/screenshots/`.
Loading