Ensure that VM snapshot is copied from artifacts before gradle merges assets. (#22707)
Gradle plugin support for adding flutter as subproject to another Android app
diff --git a/packages/flutter_tools/gradle/flutter.gradle b/packages/flutter_tools/gradle/flutter.gradle
index 317cd20..9d8c3f7 100644
--- a/packages/flutter_tools/gradle/flutter.gradle
+++ b/packages/flutter_tools/gradle/flutter.gradle
@@ -362,14 +362,25 @@
extraGenSnapshotOptions extraGenSnapshotOptionsValue
}
+ // We know that the flutter app is a subproject in another Android app when these tasks exist.
+ Task packageAssets = project.tasks.findByPath(":flutter:package${variant.name.capitalize()}Assets")
+ Task cleanPackageAssets = project.tasks.findByPath(":flutter:cleanPackage${variant.name.capitalize()}Assets")
Task copyFlutterAssetsTask = project.tasks.create(name: "copyFlutterAssets${variant.name.capitalize()}", type: Copy) {
dependsOn flutterTask
- dependsOn variant.mergeAssets
- dependsOn "clean${variant.mergeAssets.name.capitalize()}"
- into variant.mergeAssets.outputDir
+ dependsOn packageAssets ? packageAssets : variant.mergeAssets
+ dependsOn cleanPackageAssets ? cleanPackageAssets : "clean${variant.mergeAssets.name.capitalize()}"
+ into packageAssets ? packageAssets.outputDir : variant.mergeAssets.outputDir
with flutterTask.assets
}
- variant.outputs[0].processResources.dependsOn(copyFlutterAssetsTask)
+ if (packageAssets) {
+ // Only include configurations that exist in parent project.
+ Task mergeAssets = project.tasks.findByPath(":app:merge${variant.name.capitalize()}Assets")
+ if (mergeAssets) {
+ mergeAssets.dependsOn(copyFlutterAssetsTask)
+ }
+ } else {
+ variant.outputs[0].processResources.dependsOn(copyFlutterAssetsTask)
+ }
}
if (project.android.hasProperty("applicationVariants")) {
project.android.applicationVariants.all addFlutterDeps