Page URL
https://docs.flutter.dev/deployment/android#configure-signing-in-gradle
Page source
https://github.com/flutter/website/blob/main/src/content/deployment/android.md#configure-signing-in-gradle
Describe the problem
The website will offer to use the signing config below for release mode but if you don't have the key.properties file it will prevent the app from building in debug mode.
android {
...
signingConfigs {
create("release") {
keyAlias = keystoreProperties["keyAlias"] as String
keyPassword = keystoreProperties["keyPassword"] as String
storeFile = keystoreProperties["storeFile"]?.let { file(it) }
storePassword = keystoreProperties["storePassword"] as String
}
}
buildTypes {
release {
signingConfig = signingConfigs.getByName("release")
}
}
...
}
The build fails with this error.
FAILURE: Build failed with an exception.
* Where:
Build file '/path/to/project/android/app/build.gradle.kts' line: 44
* What went wrong:
null cannot be cast to non-null type kotlin.String
Expected fix
Cast to String? instead of String would solve the error but I think ideally the file key.properties should only be read in release mode.
Additional context
To reproduce
- create a Flutter project
- Replace
build.gradle.kts with the one below
- Run
flutter build apk --debug
import java.util.Properties
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")
}
val keystoreProperties = Properties()
val keystorePropertiesFile = rootProject.file("key.properties")
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(FileInputStream(keystorePropertiesFile))
}
android {
namespace = "com.example.test"
compileSdk = flutter.compileSdkVersion
ndkVersion = flutter.ndkVersion
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
kotlinOptions {
jvmTarget = JavaVersion.VERSION_11.toString()
}
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId = "com.example.test"
// 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
versionCode = flutter.versionCode
versionName = flutter.versionName
}
signingConfigs {
create("release") {
keyAlias = keystoreProperties["keyAlias"] as String
keyPassword = keystoreProperties["keyPassword"] as String
storeFile = keystoreProperties["storeFile"]?.let { file(it) }
storePassword = keystoreProperties["storePassword"] as String
}
}
buildTypes {
release {
signingConfig = signingConfigs.getByName("release")
}
}
}
flutter {
source = "../.."
}
Page URL
https://docs.flutter.dev/deployment/android#configure-signing-in-gradle
Page source
https://github.com/flutter/website/blob/main/src/content/deployment/android.md#configure-signing-in-gradle
Describe the problem
The website will offer to use the signing config below for release mode but if you don't have the
key.propertiesfile it will prevent the app from building in debug mode.android { ... signingConfigs { create("release") { keyAlias = keystoreProperties["keyAlias"] as String keyPassword = keystoreProperties["keyPassword"] as String storeFile = keystoreProperties["storeFile"]?.let { file(it) } storePassword = keystoreProperties["storePassword"] as String } } buildTypes { release { signingConfig = signingConfigs.getByName("release") } } ... }The build fails with this error.
Expected fix
Cast to
String?instead ofStringwould solve the error but I think ideally the filekey.propertiesshould only be read in release mode.Additional context
To reproduce
build.gradle.ktswith the one belowflutter build apk --debug