@@ -20,6 +20,7 @@ import org.gradle.api.Task
20
20
import org.gradle.api.UnknownTaskException
21
21
import org.gradle.api.file.Directory
22
22
import org.gradle.api.tasks.Copy
23
+ import org.gradle.api.tasks.TaskInstantiationException
23
24
import org.gradle.api.tasks.TaskProvider
24
25
import org.gradle.api.tasks.bundling.Jar
25
26
import org.gradle.internal.os.OperatingSystem
@@ -97,6 +98,13 @@ class FlutterPlugin : Plugin<Project> {
97
98
repositories.maven {
98
99
url = uri(repository!! )
99
100
}
101
+ if (plugins.hasPlugin(" com.android.application" ) && isInvokedFromAndroidStudio()) {
102
+ dependencies.add(" compileOnly" , " io.flutter:flutter_embedding_debug:$engineVersion " )
103
+ dependencies.add(" compileOnly" , " io.flutter:armeabi_v7a_debug:$engineVersion " )
104
+ dependencies.add(" compileOnly" , " io.flutter:arm64_v8a_debug:$engineVersion " )
105
+ dependencies.add(" compileOnly" , " io.flutter:x86_debug:$engineVersion " )
106
+ dependencies.add(" compileOnly" , " io.flutter:x86_64_debug:$engineVersion " )
107
+ }
100
108
}
101
109
102
110
project.apply {
@@ -292,19 +300,23 @@ class FlutterPlugin : Plugin<Project> {
292
300
}
293
301
294
302
private fun addTaskForLockfileGeneration (rootProject : Project ) {
295
- rootProject.tasks.register(" generateLockfiles" ) {
296
- doLast {
297
- rootProject.subprojects.forEach { subproject ->
298
- val gradlew: String =
299
- getExecutableNameForPlatform(" ${rootProject.projectDir} /gradlew" )
300
- val execOps = rootProject.serviceOf<ExecOperations >()
301
- execOps.exec {
302
- workingDir(rootProject.projectDir)
303
- executable(gradlew)
304
- args(" :${subproject.name} :dependencies" , " --write-locks" )
303
+ try {
304
+ rootProject.tasks.register(" generateLockfiles" ) {
305
+ doLast {
306
+ rootProject.subprojects.forEach { subproject ->
307
+ val gradlew: String =
308
+ getExecutableNameForPlatform(" ${rootProject.projectDir} /gradlew" )
309
+ val execOps = rootProject.serviceOf<ExecOperations >()
310
+ execOps.exec {
311
+ workingDir(rootProject.projectDir)
312
+ executable(gradlew)
313
+ args(" :${subproject.name} :dependencies" , " --write-locks" )
314
+ }
305
315
}
306
316
}
307
317
}
318
+ } catch (e: TaskInstantiationException ) {
319
+ // ignored
308
320
}
309
321
}
310
322
@@ -773,4 +785,12 @@ class FlutterPlugin : Plugin<Project> {
773
785
return copyFlutterAssetsTask
774
786
}
775
787
}
788
+
789
+ /* *
790
+ * Returns true if the Gradle task is invoked by Android Studio.
791
+ *
792
+ * This is true when the property `android.injected.invoked.from.ide` is passed to Gradle.
793
+ * This property is set by Android Studio when it invokes a Gradle task.
794
+ */
795
+ private fun isInvokedFromAndroidStudio (): Boolean = project?.hasProperty(" android.injected.invoked.from.ide" ) == true
776
796
}
0 commit comments