BuildConfig.java is not configuring properly in flutter

Viewed 240

When I run my flutter project, I get the following error:

C:\Users\Sourav Kannantha B\Documents\AndroidProjects\ecommercestore\build\app\generated\source\buildConfig\debug\com\skbsmk\ecommercestore\BuildConfig.java:14: error: illegal escape character
  public static final String fluttersdk = "C:\Users\Sourav Kannantha B\Documents\Flutter";
                                              ^
.
.
.

I can see why that is error, because BuildConfig.java contains this line:

public static final String fluttersdk = "C:\Users\Sourav Kannantha B\Documents\Flutter";

But my local.properties file contains the path in correct format:

flutter.sdk=C:\\Users\\Sourav Kannantha B\\Documents\\Flutter

I don't know why, while building it is skipping one backslash. I even tried to edit local.properties to this:

flutter.sdk=C:\\\\Users\\\\Sourav Kannantha B\\\\Documents\\\\Flutter

and this:

flutter.sdk=C:/Users/Sourav Kannantha B/Documents/Flutter

But as soon as I run the project, android studio is automatically changing these to as it was before.

EDIT: Project was running properly before. This all started when I added com.google.android.libraries.mapsplatform.secrets-gradle-plugin to my android gradle file. But I'm not sure if this has to do anything with this error.

EDIT: My bad, error was indeed related to com.google.android.libraries.mapsplatform.secrets-gradle-plugin. After removing that, error got resolved. Can someone explain this behaviour.

2 Answers

I stumbled upon the same issue on Windows since I added the secrets plugin. I found in the documentation that you can move your secrets into a specific properties file which the plugin can use. That way, you can leave the local.properties file unmodified.

See point 8 in the documentation. In a nutshell, you need to add the following code in your app's build.gradle :

secrets {
    propertiesFileName = "secrets.properties"
}

And in secrets.properties, put your secrets.

Currently now, I'm hiding my Maps API key as below:

Storing the api key in local.properties

MAPS_API_KEY=<MY_API_KEY>

Declaring the api key placeholder in AndroidManifest.xml

<meta-data
    android:name="com.google.android.geo.API_KEY"
    android:value="${MAPS_API_KEY}" />

Replacing the api key placeholder in module level build.gradle

def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
localPropertiesFile.withReader('UTF-8') { reader ->
    localProperties.load(reader)
}
def mapsApiKey = localProperties.getProperty('MAPS_API_KEY')
android {
    defaultConfig {
        manifestPlaceholders += [MAPS_API_KEY: mapsApiKey]
    }
}
Related