Skip to content

Commit 9d770c6

Browse files
authored
šŸ› Use reflection for Android Studio IDE info and fallback to application name match (#8375)
Fixes #8374 Tested on IntelliJ IDEA 2025.1.4 and Android Studio Meerkat 2024.3.1.
1 parent f2c9e28 commit 9d770c6

File tree

1 file changed

+16
-3
lines changed

1 file changed

+16
-3
lines changed

ā€Žsrc/io/flutter/FlutterUtils.java

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55
*/
66
package io.flutter;
77

8-
import com.android.tools.idea.IdeInfo;
98
import com.google.common.base.Charsets;
109
import com.intellij.ide.actions.ShowSettingsUtilImpl;
1110
import com.intellij.ide.impl.ProjectUtil;
1211
import com.intellij.ide.util.PropertiesComponent;
12+
import com.intellij.openapi.application.ApplicationInfo;
1313
import com.intellij.openapi.diagnostic.Logger;
1414
import com.intellij.openapi.extensions.PluginId;
1515
import com.intellij.openapi.module.Module;
@@ -47,6 +47,8 @@
4747

4848
import java.io.IOException;
4949
import java.io.InputStreamReader;
50+
import java.lang.reflect.InvocationTargetException;
51+
import java.lang.reflect.Method;
5052
import java.nio.file.Paths;
5153
import java.util.Map;
5254
import java.util.Objects;
@@ -89,7 +91,18 @@ public static boolean isDartFile(@NotNull VirtualFile file) {
8991
}
9092

9193
public static boolean isAndroidStudio() {
92-
return IdeInfo.getInstance().isAndroidStudio();
94+
try {
95+
// The class is available if the IDE has the "Android" plugin installed or is Android Studio.
96+
final Class<?> ideInfoClass = Class.forName("com.android.tools.idea.IdeInfo");
97+
final Method getInstance = ideInfoClass.getMethod("getInstance");
98+
final Object instance = getInstance.invoke(null);
99+
final Method isAndroidStudio = ideInfoClass.getMethod("isAndroidStudio");
100+
return (Boolean)isAndroidStudio.invoke(instance);
101+
} catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException | InvocationTargetException ignored) {
102+
// Fall back to checking application name
103+
// e.g., "Android Studio Meerkat | 2024.3.1"
104+
return ApplicationInfo.getInstance().getFullApplicationName().startsWith("Android Studio");
105+
}
93106
}
94107

95108
/**
@@ -416,7 +429,7 @@ protected void addImplicitResolvers() {
416429
return null;
417430
}
418431
}
419-
432+
420433
@Nullable
421434
private static VirtualFile getFlutterManagedAndroidDir(VirtualFile dir) {
422435
final VirtualFile meta = dir.findChild(".metadata");

0 commit comments

Comments
Ā (0)