Revert "[CP-beta]Revert "Resolve resolve native Flutter dependencies in Android Studio (#167332)"" (#177601)

Reverts flutter/flutter#177255. This pull request was to the wrong branch. Should have been flutter-3.38-candidate.0.
diff --git a/packages/flutter_tools/gradle/src/main/kotlin/FlutterPlugin.kt b/packages/flutter_tools/gradle/src/main/kotlin/FlutterPlugin.kt
index d6fc07c..34dc19a 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.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 @@
             repositories.maven {
                 url = uri(repository!!)
             }
+            maybeAddAndroidStudioNativeConfiguration(plugins, dependencies)
         }
 
         project.apply {
@@ -325,19 +329,23 @@
     }
 
     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<ExecOperations>()
-                    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<ExecOperations>()
+                        execOps.exec {
+                            workingDir(rootProject.projectDir)
+                            executable(gradlew)
+                            args(":${subproject.name}:dependencies", "--write-locks")
+                        }
                     }
                 }
             }
+        } catch (e: TaskInstantiationException) {
+            // ignored
         }
     }
 
@@ -813,4 +821,19 @@
      * 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")
+        }
+    }
 }