From 23778e8a0bf61ea080efcc708c2dd95e301ae757 Mon Sep 17 00:00:00 2001 From: Kevin Lamenzo Date: Tue, 4 Aug 2026 20:52:28 +0000 Subject: [PATCH 1/4] Fix for ticket 542694649 (GitHub issue #11995) --- sites/docs/src/content/deployment/android.md | 68 +++++++++++--------- 1 file changed, 36 insertions(+), 32 deletions(-) diff --git a/sites/docs/src/content/deployment/android.md b/sites/docs/src/content/deployment/android.md index 1f939067d3..2f7a231fe2 100644 --- a/sites/docs/src/content/deployment/android.md +++ b/sites/docs/src/content/deployment/android.md @@ -37,7 +37,7 @@ substitute `[project]` with your app's directory. ## Add a launcher icon When a new Flutter app is created, it has a default launcher icon. -To customize this icon, you might want to check out the +To learn about customizing this icon, see the [flutter_launcher_icons][] package. Alternatively, you can do it manually using the following steps: @@ -191,8 +191,8 @@ If not, create one using one of the following methods: Create a file named `[project]/android/key.properties` that contains a reference to your keystore. -Don't include the angle brackets (`< >`). -They indicate that the text serves as a placeholder for your values. +Don't include the angle brackets (`< >`), +which indicate that the text serves as a placeholder for your values: ```properties storePassword= @@ -222,7 +222,7 @@ To configure Gradle, edit the `/android/app/build.gradle.kts` file. 1. Define and load the keystore properties file before the `android` property block. -1. Set the `keystoreProperties` object to load the `key.properties` file. +1. Set the `keystoreProperties` object to load the `key.properties` file: @@ -272,7 +272,7 @@ To configure Gradle, edit the `/android/app/build.gradle.kts` file. 1. Add the signing configuration before the `buildTypes` property block - inside the `android` property block. + inside the `android` property block: @@ -283,10 +283,10 @@ To configure Gradle, edit the `/android/app/build.gradle.kts` file. + signingConfigs { + create("release") { -+ keyAlias = keystoreProperties["keyAlias"] as String -+ keyPassword = keystoreProperties["keyPassword"] as String ++ keyAlias = keystoreProperties["keyAlias"] as? String ++ keyPassword = keystoreProperties["keyPassword"] as? String + storeFile = keystoreProperties["storeFile"]?.let { file(it) } -+ storePassword = keystoreProperties["storePassword"] as String ++ storePassword = keystoreProperties["storePassword"] as? String + } + } buildTypes { @@ -340,7 +340,7 @@ You might need to run `flutter clean` after changing the Gradle file. This prevents cached builds from affecting the signing process. ::: -To learn more about signing your app, check out +To learn about signing your app, see [Sign your app][] on the Android developer docs. [Sign your app]: {{site.android-dev}}/studio/publish/app-signing.html#generate-key @@ -353,11 +353,11 @@ with ML-DSA signatures to enable post-quantum cryptography (PQC) hybrid signing. This future-proofs your app's signing identity against the potential threat of attacks that make use of quantum computing. -* **Apps using Play App Signing**: +* **Apps using Play App Signing**. If you use Play App Signing, you can wait for Google Play to give you the option to upgrade to a hybrid signature using a PQC key generated by Google Play. -* **Apps using self-managed keys**: +* **Apps using self-managed keys**. If you manage your own signing keys, you can use updated Android build tools (such as `apksigner`) to rotate to a hybrid identity, @@ -365,8 +365,8 @@ attacks that make use of quantum computing. Note that you must create a new classical key; you cannot reuse the older one. -For more information, check out the -[Android documentation on PQC APK signing][android-doc] +For details, see the +[Android documentation on PQC APK signing][android-doc]. [android-doc]: {{site.android-dev}}/about/versions/17/features#pqc-apk-signing @@ -383,7 +383,7 @@ the compile time of an Android application. The `--[no-]shrink` flag has no effect. Code shrinking is always enabled in release builds. -To learn more, check out [Shrink, obfuscate, and optimize your app][]. +For details, see [Shrink, obfuscate, and optimize your app][]. ::: [R8]: {{site.android-dev}}/studio/build/shrink-code @@ -423,7 +423,7 @@ The Flutter tool enables multidex support and retries the build: The output of a successful build after adding multidex. -:::note +:::version-note Multidex support is natively included when targeting Android SDK 21 or later. ::: @@ -438,15 +438,15 @@ io/flutter/util/PathUtils.class ``` Also, include any other classes used in app startup. -For more detailed guidance on adding multidex support manually, -check out the official [Android documentation][multidex-docs]. +To learn about adding multidex support manually, +see the official [Android documentation][multidex-docs]. [multidex-keep]: {{site.android-dev}}/studio/build/multidex#keep [multidex-docs]: {{site.android-dev}}/studio/build/multidex ## Review the app manifest -Review the default [App Manifest][manifest] file. +Review the default [App Manifest][manifest] file: ```xml title="[project]/android/app/src/main/AndroidManifest.xml" @@ -476,8 +476,8 @@ Verify the following values: To verify the Android build configuration, review the `android` block in the default -[Gradle build script][gradlebuild]. -The default Gradle build script is found at `[project]/android/app/build.gradle.kts`. +[Gradle build script][gradlebuild] +found at `[project]/android/app/build.gradle.kts`: ```kotlin title="[project]/android/app/build.gradle.kts" android { @@ -494,7 +494,7 @@ android { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId = "com.example.[project]" // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. + // For details, see https://flutter.dev/to/review-gradle-config. minSdk = flutter.minSdkVersion targetSdk = flutter.targetSdkVersion versionCode = flutter.versionCode @@ -541,9 +541,12 @@ For example: The Flutter tooling sets default values for the Android SDK versions: -* **`compileSdk`**: The version of the Android SDK used to compile the app. -* **`minSdk`**: The minimum Android version that the app supports. -* **`targetSdk`**: The Android version the app is designed and tested to run on. +* **`compileSdk`**. The version of the Android SDK used to + compile the app. +* **`minSdk`**. The minimum Android version that the + app supports. +* **`targetSdk`**. The Android version the app is designed and + tested to run on. These default values (`flutter.compileSdkVersion`, etc.) are managed by Flutter to ensure compatibility with the framework and plugins. @@ -572,7 +575,8 @@ publishing to the Play Store. :::note The Google Play Store prefers the app bundle format. -To learn more, check out [About Android App Bundles][bundle]. +To learn about Android App Bundles, see +[About Android App Bundles][bundle]. ::: [bundle]: {{site.android-dev}}/guide/app-bundle @@ -684,8 +688,8 @@ From the command line: ## Publish to the Google Play Store -For detailed instructions on publishing your app to the Google Play Store, -check out the [Google Play launch][play] documentation. +To learn about publishing your app to the Google Play Store, +see the [Google Play launch][play] documentation. ## Update the app's version number @@ -706,8 +710,8 @@ Both the version and the build number can be overridden in Flutter's build by specifying `--build-name` and `--build-number`, respectively. In Android, `build-name` is used as `versionName` while -`build-number` used as `versionCode`. For more information, -check out [Version your app][] in the Android documentation. +`build-number` used as `versionCode`. For details, +see [Version your app][] in the Android documentation. When you rebuild the app for Android, any updates in the version number from the pubspec file will @@ -805,9 +809,9 @@ Run `apkanalyzer manifest print ` and look for a `` tag with `android:name="flutterEmbedding"`. The value can be `1` or `2`. -Example: -`apkanalyzer manifest print some-flutter-app.apk | grep flutterEmbedding -C 2` -returns the following style string. +The following command, +`apkanalyzer manifest print some-flutter-app.apk | grep flutterEmbedding -C 2`, +returns this style string: ``` Date: Tue, 18 Aug 2026 22:54:24 +0000 Subject: [PATCH 2/4] Use getProperty for keystore properties in Gradle Kotlin DSL --- sites/docs/src/content/deployment/android.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sites/docs/src/content/deployment/android.md b/sites/docs/src/content/deployment/android.md index 2f7a231fe2..7758583d2c 100644 --- a/sites/docs/src/content/deployment/android.md +++ b/sites/docs/src/content/deployment/android.md @@ -283,10 +283,10 @@ To configure Gradle, edit the `/android/app/build.gradle.kts` file. + signingConfigs { + create("release") { -+ keyAlias = keystoreProperties["keyAlias"] as? String -+ keyPassword = keystoreProperties["keyPassword"] as? String -+ storeFile = keystoreProperties["storeFile"]?.let { file(it) } -+ storePassword = keystoreProperties["storePassword"] as? String ++ keyAlias = keystoreProperties.getProperty("keyAlias") ++ keyPassword = keystoreProperties.getProperty("keyPassword") ++ storeFile = keystoreProperties.getProperty("storeFile")?.let { file(it) } ++ storePassword = keystoreProperties.getProperty("storePassword") + } + } buildTypes { From 7c8d35c0ef7deb3fd8a70abdbb54f7c45c79f7df Mon Sep 17 00:00:00 2001 From: Kevin Lamenzo Date: Wed, 19 Aug 2026 15:34:52 +0000 Subject: [PATCH 3/4] docs: replace 'see' with 'consult' in Android deployment guide --- sites/docs/src/content/deployment/android.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sites/docs/src/content/deployment/android.md b/sites/docs/src/content/deployment/android.md index 7758583d2c..f02dd612fc 100644 --- a/sites/docs/src/content/deployment/android.md +++ b/sites/docs/src/content/deployment/android.md @@ -439,7 +439,7 @@ io/flutter/util/PathUtils.class Also, include any other classes used in app startup. To learn about adding multidex support manually, -see the official [Android documentation][multidex-docs]. +consult the official [Android documentation][multidex-docs]. [multidex-keep]: {{site.android-dev}}/studio/build/multidex#keep [multidex-docs]: {{site.android-dev}}/studio/build/multidex From ce4b2f4db8fb888c5711c25907200f00704fc4a4 Mon Sep 17 00:00:00 2001 From: Kevin Lamenzo Date: Wed, 19 Aug 2026 15:47:59 +0000 Subject: [PATCH 4/4] Address review feedback: restore colons in definition lists and polish apkanalyzer phrasing --- sites/docs/src/content/deployment/android.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/sites/docs/src/content/deployment/android.md b/sites/docs/src/content/deployment/android.md index f02dd612fc..0e80643d57 100644 --- a/sites/docs/src/content/deployment/android.md +++ b/sites/docs/src/content/deployment/android.md @@ -353,11 +353,11 @@ with ML-DSA signatures to enable post-quantum cryptography (PQC) hybrid signing. This future-proofs your app's signing identity against the potential threat of attacks that make use of quantum computing. -* **Apps using Play App Signing**. +* **Apps using Play App Signing**: If you use Play App Signing, you can wait for Google Play to give you the option to upgrade to a hybrid signature using a PQC key generated by Google Play. -* **Apps using self-managed keys**. +* **Apps using self-managed keys**: If you manage your own signing keys, you can use updated Android build tools (such as `apksigner`) to rotate to a hybrid identity, @@ -541,11 +541,11 @@ For example: The Flutter tooling sets default values for the Android SDK versions: -* **`compileSdk`**. The version of the Android SDK used to +* **`compileSdk`**: The version of the Android SDK used to compile the app. -* **`minSdk`**. The minimum Android version that the +* **`minSdk`**: The minimum Android version that the app supports. -* **`targetSdk`**. The Android version the app is designed and +* **`targetSdk`**: The Android version the app is designed and tested to run on. These default values (`flutter.compileSdkVersion`, etc.) are managed by Flutter @@ -811,7 +811,7 @@ The value can be `1` or `2`. The following command, `apkanalyzer manifest print some-flutter-app.apk | grep flutterEmbedding -C 2`, -returns this style string: +returns the following output: ```