## Android Setup ### Keystore setup ```bash keytool -genkey -v -keystore release.keystore -keyalg RSA -keysize 2048 -validity 10000 -alias upload ``` - This is required to store local credentials securely and more importantly to sign the app for google play store distribution. ### Using secret credentials during build Following the guide under [https://developers.google.com/maps/flutter-package/config#android_1](https://developers.google.com/maps/flutter-package/config#android_1). - Add the following to `android/build.gradle`: ```gradle buildscript { dependencies { classpath "com.google.android.libraries.mapsplatform.secrets-gradle-plugin:secrets-gradle-plugin:2.0.1" } } ``` - Add the following to `android/app/build.gradle`: ```gradle plugins { // ... id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin' } ``` - Add the credentials to `android/secrets.properties`: ```properties MAPS_API_KEY=YOUR_API_KEY ``` - Reference the credentials in `android/app/src/main/AndroidManifest.xml`: ```xml ``` ### Signing the app Compared to the flutter template application, a few changes have to be made: - Added to `android/app/build.gradle`: ```gradle signingConfigs { release { keyAlias = secretProperties['keyAlias'] keyPassword = secretProperties['keyPassword'] storeFile = secretProperties['storeFile'] ? file(secretProperties['storeFile']) : null storePassword = secretProperties['storePassword'] } } ``` - Changed the `buildTypes` to use the `release` signing config: ```gradle buildTypes { release { signingConfig signingConfigs.release } } ``` This makes use of the `secretProperties` defined previously: ```gradle secretPropertiesFile.withReader('UTF-8') { reader -> secretProperties.load(reader) } ``` ### Using the credentials in CI - Add the secret files to the repository secrets (e.g. `ANDROID_SECRETS_PROPERTIES`). - temporarily write them back to files during the CI execution: ```bash echo {{ secrets.ANDROID_SECRETS }} >> android/secrets.properties ```