diff --git a/packages/flutter_tools/gradle/src/main/kotlin/FlutterPlugin.kt b/packages/flutter_tools/gradle/src/main/kotlin/FlutterPlugin.kt index d6fc07c8d98..34dc19a7114 100644 --- a/packages/flutter_tools/gradle/src/main/kotlin/FlutterPlugin.kt +++ b/packages/flutter_tools/gradle/src/main/kotlin/FlutterPlugin.kt @@ -19,8 +19,11 @@ import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.Task import org.gradle.api.UnknownTaskException +import org.gradle.api.artifacts.dsl.DependencyHandler import org.gradle.api.file.Directory +import org.gradle.api.plugins.PluginContainer import org.gradle.api.tasks.Copy +import org.gradle.api.tasks.TaskInstantiationException import org.gradle.api.tasks.TaskProvider import org.gradle.api.tasks.bundling.Jar import org.gradle.internal.os.OperatingSystem @@ -98,6 +101,7 @@ class FlutterPlugin : Plugin { repositories.maven { url = uri(repository!!) } + maybeAddAndroidStudioNativeConfiguration(plugins, dependencies) } project.apply { @@ -325,19 +329,23 @@ class FlutterPlugin : Plugin { } private fun addTaskForLockfileGeneration(rootProject: Project) { - rootProject.tasks.register("generateLockfiles") { - doLast { - rootProject.subprojects.forEach { subproject -> - val gradlew: String = - getExecutableNameForPlatform("${rootProject.projectDir}/gradlew") - val execOps = rootProject.serviceOf() - execOps.exec { - workingDir(rootProject.projectDir) - executable(gradlew) - args(":${subproject.name}:dependencies", "--write-locks") + try { + rootProject.tasks.register("generateLockfiles") { + doLast { + rootProject.subprojects.forEach { subproject -> + val gradlew: String = + getExecutableNameForPlatform("${rootProject.projectDir}/gradlew") + val execOps = rootProject.serviceOf() + execOps.exec { + workingDir(rootProject.projectDir) + executable(gradlew) + args(":${subproject.name}:dependencies", "--write-locks") + } } } } + } catch (e: TaskInstantiationException) { + // ignored } } @@ -813,4 +821,19 @@ class FlutterPlugin : Plugin { * This property is set by Android Studio when it invokes a Gradle task. */ private fun isInvokedFromAndroidStudio(): Boolean = project?.hasProperty("android.injected.invoked.from.ide") == true + + private fun shouldAddAndroidStudioNativeConfiguration(plugins: PluginContainer): Boolean = + plugins.hasPlugin("com.android.application") && isInvokedFromAndroidStudio() + + private fun maybeAddAndroidStudioNativeConfiguration( + plugins: PluginContainer, + dependencies: DependencyHandler + ) { + if (shouldAddAndroidStudioNativeConfiguration(plugins)) { + dependencies.add("compileOnly", "io.flutter:flutter_embedding_debug:$engineVersion") + dependencies.add("compileOnly", "io.flutter:armeabi_v7a_debug:$engineVersion") + dependencies.add("compileOnly", "io.flutter:arm64_v8a_debug:$engineVersion") + dependencies.add("compileOnly", "io.flutter:x86_64_debug:$engineVersion") + } + } }