Bartek Pacia
fd827e3a88
Expose versionCode and versionName from local.properties in FlutterExtension (#141417)
This PR has no issue. I got this cool idea and decided to quickly try it out, and it works.
### Summary
This will allow Flutter Developers to have less code in their Android Gradle buildscripts.
```diff
plugins {
id "com.android.application"
id "dev.flutter.flutter-gradle-plugin"
id "kotlin-android"
}
-def localProperties = new Properties()
-def localPropertiesFile = rootProject.file("local.properties")
-if (localPropertiesFile.exists()) {
- localPropertiesFile.withReader("UTF-8") { reader ->
- localProperties.load(reader)
- }
-}
-
-def flutterVersionCode = localProperties.getProperty("flutter.versionCode")
-if (flutterVersionCode == null) {
- flutterVersionCode = "1"
-}
-
-def flutterVersionName = localProperties.getProperty("flutter.versionName")
-if (flutterVersionName == null) {
- flutterVersionName = "1.0"
-}
-
-def keystorePropertiesFile = rootProject.file("keystore.properties")
-def keystoreProperties = new Properties()
-
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
android {
applicationId "pl.baftek.discoverrudy"
minSdk 21
targetSdk 34
- versionCode flutterVersionCode.toInteger()
- versionName flutterVersionName
+ versionCode flutter.versionCode()
+ versionName flutter.versionName()
}
```
The boilerplate that loads 'local.properties' can live in Flutter Gradle Plugin.
### Concerns
I was worried about lifecycle/ordering issues, so I tested it.
To Flutter Gradle Plugin, I added:
```diff
class FlutterPlugin implements Plugin<Project> {
//...
@Override
void apply(Project project) {
+ project.logger.quiet("Start applying FGP")
// ...
}
}
```
and to my `android/app/build.gradle` I added:
```diff
android {
+ logger.quiet("Start evaluating android block")
namespace "pl.bartekpacia.awesomeapp"
compileSdk 34
defaultConfig {
applicationId "pl.baftek.discoverrudy"
minSdk 21
targetSdk 34
versionCode flutter.versionCode()
versionName flutter.versionName()
}
```
Gradle first applies the plugins (which sets versionCode and versionName on FlutterExtension), and then it executes the `android {}` extension block:
```
$ ./gradlew :app:assembleDebug
> Configure project :app
Start applying FGP
Start evaluating android block
BUILD SUCCESSFUL in 2s
383 actionable tasks: 10 executed, 373 up-to-date
```
So ordering is fine.
2024-01-12 18:18:32 +00:00
..
2024-01-12 18:18:32 +00:00
2023-12-07 18:31:20 +00:00
2023-10-24 17:47:45 -07:00
2023-10-24 17:47:45 -07:00
2023-09-13 10:36:24 -07:00
2022-07-28 19:38:07 -07:00
2023-10-24 17:47:45 -07:00