From 7765dd4c3c03a38e4c72504698609de3dddb07b6 Mon Sep 17 00:00:00 2001 From: KyleWong Date: Wed, 6 Feb 2019 08:48:14 +0800 Subject: [PATCH] Refactor logic to get plugins path for android studio in mac (#26964) --- .../lib/src/android/android_studio.dart | 15 ++++++++++++--- .../flutter_tools/lib/src/ios/plist_utils.dart | 10 +++++++--- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/packages/flutter_tools/lib/src/android/android_studio.dart b/packages/flutter_tools/lib/src/android/android_studio.dart index 1010209e0e0..e476608d618 100644 --- a/packages/flutter_tools/lib/src/android/android_studio.dart +++ b/packages/flutter_tools/lib/src/android/android_studio.dart @@ -26,12 +26,14 @@ AndroidStudio get androidStudio => context[AndroidStudio]; final RegExp _dotHomeStudioVersionMatcher = RegExp(r'^\.(AndroidStudio[^\d]*)([\d.]+)'); +final RegExp _pathsSelectorMatcher = + RegExp(r'"idea.paths.selector" = "AndroidStudio[^;]+"'); String get javaPath => androidStudio?.javaPath; class AndroidStudio implements Comparable { AndroidStudio(this.directory, - {Version version, this.configured, this.studioAppName = 'AndroidStudio'}) + {Version version, this.configured, this.studioAppName = 'AndroidStudio', this.pathsSelectorPath}) : version = version ?? Version.unknown { _init(); } @@ -47,7 +49,13 @@ class AndroidStudio implements Comparable { Version version; if (versionString != null) version = Version.parse(versionString); - return AndroidStudio(studioPath, version: version); + + final String plistValue = iosWorkflow.getPlistValueFromFile( + plistFile, + null, + ); + final String pathsSelectorValue = _pathsSelectorMatcher.stringMatch(plistValue).split('=').last.trim().replaceAll('"', ''); + return AndroidStudio(studioPath, version: version, pathsSelectorPath: pathsSelectorValue); } factory AndroidStudio.fromHomeDot(Directory homeDotDir) { @@ -83,6 +91,7 @@ class AndroidStudio implements Comparable { final String studioAppName; final Version version; final String configured; + final String pathsSelectorPath; String _pluginsPath; String _javaPath; @@ -102,7 +111,7 @@ class AndroidStudio implements Comparable { homeDirPath, 'Library', 'Application Support', - 'AndroidStudio$major.$minor'); + '$pathsSelectorPath'); } else { _pluginsPath = fs.path.join(homeDirPath, '.$studioAppName$major.$minor', diff --git a/packages/flutter_tools/lib/src/ios/plist_utils.dart b/packages/flutter_tools/lib/src/ios/plist_utils.dart index 7a2e085d1d5..31bb93482c8 100644 --- a/packages/flutter_tools/lib/src/ios/plist_utils.dart +++ b/packages/flutter_tools/lib/src/ios/plist_utils.dart @@ -26,9 +26,13 @@ String getValueFromFile(String plistFilePath, String key) { final String normalizedPlistPath = fs.path.withoutExtension(fs.path.absolute(plistFilePath)); try { - final String value = runCheckedSync([ - executable, 'read', normalizedPlistPath, key - ]); + final List args = [ + executable, 'read', normalizedPlistPath + ]; + if (key != null && key.isNotEmpty){ + args.add(key); + } + final String value = runCheckedSync(args); return value.isEmpty ? null : value; } catch (error) { return null;