plugins { id("com.android.application") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. id("dev.flutter.flutter-gradle-plugin") } android { namespace = "app.halkyon.todo" compileSdk = flutter.compileSdkVersion ndkVersion = flutter.ndkVersion compileOptions { // flutter_local_notifications' scheduling uses java.time, which // Android before 8 lacks (ADR 0033, D5). isCoreLibraryDesugaringEnabled = true sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 } defaultConfig { applicationId = "app.halkyon.todo" // You can update the following values to match your application needs. // For more information, see: https://flutter.dev/to/review-gradle-config. minSdk = flutter.minSdkVersion targetSdk = flutter.targetSdkVersion // Uses the version code from pubspec.yaml. When using split APKs, 1000 * ABI_VERSION // is added automatically by Flutter. (https://developer.android.com/studio/build/configure-apk-splits#configure-APK-versions) // You can force using the value of versionCode by specifying the `-P force-version-code-ignoring-abi=true` // flag during build. versionCode = flutter.versionCode versionName = flutter.versionName manifestPlaceholders["appLabel"] = "Halkyon Todo" } // The app's own key signs release builds when tool/release.dart hands it over // through the environment, as Learn's and Train's do: the keystore's path and the // key's alias, and the password asked for at each release, never written down. Other // release builds are signed with the debug key, so `flutter run --release` works // anywhere; the release tool releases no APK signed otherwise. val releaseKeystore = System.getenv("HALKYON_ANDROID_KEYSTORE") signingConfigs { if (releaseKeystore != null) { create("release") { storeFile = file(releaseKeystore) keyAlias = System.getenv("HALKYON_ANDROID_KEY_ALIAS") // A PKCS #12 keystore has one password, for the store and its key. storePassword = System.getenv("HALKYON_ANDROID_KEYSTORE_PASSWORD") keyPassword = System.getenv("HALKYON_ANDROID_KEYSTORE_PASSWORD") } } } buildTypes { // A debug build installs beside the release from F-Droid, whose key // differs (ADR 0033, D32): another ID, and its own name in the launcher. // Both then answer SimpleLogin's way back, app.halkyon.todo://, which // the instance allows alone, so Android asks which: the debug build. debug { applicationIdSuffix = ".debug" manifestPlaceholders["appLabel"] = "Todo Debug" } release { signingConfig = signingConfigs.findByName("release") ?: signingConfigs.getByName("debug") } } // The native libraries go into the APK compressed, as Learn's: one APK serves // every phone, holding them for three architectures, and Android unpacks the // phone's own as it installs the app. packaging { jniLibs { useLegacyPackaging = true } } // Leaves out the list of dependencies Gradle would otherwise add to the APK, // encrypted for Google Play alone; F-Droid's and others' scanners flag it. dependenciesInfo { includeInApk = false includeInBundle = false } } kotlin { compilerOptions { jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17 } } flutter { source = "../.." } dependencies { coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.4") testImplementation("junit:junit:4.13.2") }