@@ -20,6 +20,7 @@ import org.gradle.api.Task
2020import org.gradle.api.UnknownTaskException
2121import org.gradle.api.file.Directory
2222import org.gradle.api.tasks.Copy
23+ import org.gradle.api.tasks.TaskInstantiationException
2324import org.gradle.api.tasks.TaskProvider
2425import org.gradle.api.tasks.bundling.Jar
2526import org.gradle.internal.os.OperatingSystem
@@ -97,6 +98,13 @@ class FlutterPlugin : Plugin<Project> {
9798 repositories.maven {
9899 url = uri(repository!! )
99100 }
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+ }
100108 }
101109
102110 project.apply {
@@ -292,19 +300,23 @@ class FlutterPlugin : Plugin<Project> {
292300 }
293301
294302 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+ }
305315 }
306316 }
307317 }
318+ } catch (e: TaskInstantiationException ) {
319+ // ignored
308320 }
309321 }
310322
@@ -773,4 +785,12 @@ class FlutterPlugin : Plugin<Project> {
773785 return copyFlutterAssetsTask
774786 }
775787 }
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
776796}
0 commit comments