mirror of
https://github.com/flutter/flutter
synced 2024-08-27 12:00:58 +00:00
Fix unable to find bundled Java version (#119244)
This commit is contained in:
parent
909dc30090
commit
57fd50f84e
3
AUTHORS
3
AUTHORS
|
@ -100,4 +100,5 @@ Jingyi Chen <jingyichen@link.cuhk.edu.cn>
|
|||
Junhua Lin <1075209054@qq.com>
|
||||
Tomasz Gucio <tgucio@gmail.com>
|
||||
Jason C.H <ctrysbita@outlook.com>
|
||||
Hubert Jóźwiak <hjozwiakdx@gmail.com>
|
||||
Hubert Jóźwiak <hjozwiakdx@gmail.com>
|
||||
Eli Albert <crasowas@gmail.com>
|
|
@ -441,11 +441,22 @@ class AndroidStudio implements Comparable<AndroidStudio> {
|
|||
return;
|
||||
}
|
||||
|
||||
final String javaPath = globals.platform.isMacOS ?
|
||||
version != null && version.major < 2020 ?
|
||||
globals.fs.path.join(directory, 'jre', 'jdk', 'Contents', 'Home') :
|
||||
globals.fs.path.join(directory, 'jre', 'Contents', 'Home') :
|
||||
globals.fs.path.join(directory, 'jre');
|
||||
final String javaPath;
|
||||
if (globals.platform.isMacOS) {
|
||||
if (version != null && version.major < 2020) {
|
||||
javaPath = globals.fs.path.join(directory, 'jre', 'jdk', 'Contents', 'Home');
|
||||
} else if (version != null && version.major == 2022) {
|
||||
javaPath = globals.fs.path.join(directory, 'jbr', 'Contents', 'Home');
|
||||
} else {
|
||||
javaPath = globals.fs.path.join(directory, 'jre', 'Contents', 'Home');
|
||||
}
|
||||
} else {
|
||||
if (version != null && version.major == 2022) {
|
||||
javaPath = globals.fs.path.join(directory, 'jbr');
|
||||
} else {
|
||||
javaPath = globals.fs.path.join(directory, 'jre');
|
||||
}
|
||||
}
|
||||
final String javaExecutable = globals.fs.path.join(javaPath, 'bin', 'java');
|
||||
if (!globals.processManager.canRun(javaExecutable)) {
|
||||
_validationMessages.add('Unable to find bundled Java version.');
|
||||
|
|
|
@ -56,6 +56,19 @@ const Map<String, Object> macStudioInfoPlist2020_3 = <String, Object>{
|
|||
},
|
||||
};
|
||||
|
||||
const Map<String, Object> macStudioInfoPlist2022_1 = <String, Object>{
|
||||
'CFBundleGetInfoString': 'Android Studio 2022.1, build AI-221.6008.13.2211.9477386. Copyright JetBrains s.r.o., (c) 2000-2023',
|
||||
'CFBundleShortVersionString': '2022.1',
|
||||
'CFBundleVersion': 'AI-221.6008.13.2211.9477386',
|
||||
'JVMOptions': <String, Object>{
|
||||
'Properties': <String, Object>{
|
||||
'idea.vendor.name' : 'Google',
|
||||
'idea.paths.selector': 'AndroidStudio2022.1',
|
||||
'idea.platform.prefix': 'AndroidStudio',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
const Map<String, Object> macStudioInfoPlistEAP = <String, Object>{
|
||||
'CFBundleGetInfoString': 'Android Studio EAP AI-212.5712.43.2112.8233820, build AI-212.5712.43.2112.8233820. Copyright JetBrains s.r.o., (c) 2000-2022',
|
||||
'CFBundleShortVersionString': 'EAP AI-212.5712.43.2112.8233820',
|
||||
|
@ -486,6 +499,84 @@ void main() {
|
|||
Platform: () => platform,
|
||||
PlistParser: () => plistUtils,
|
||||
});
|
||||
|
||||
testUsingContext('Can find Android Studio 2020.3 bundled Java version on Mac', () {
|
||||
final String studioInApplicationPlistFolder = globals.fs.path.join(
|
||||
'/',
|
||||
'Application',
|
||||
'Android Studio.app',
|
||||
'Contents',
|
||||
);
|
||||
globals.fs.directory(studioInApplicationPlistFolder).createSync(recursive: true);
|
||||
|
||||
final String plistFilePath = globals.fs.path.join(studioInApplicationPlistFolder, 'Info.plist');
|
||||
plistUtils.fileContents[plistFilePath] = macStudioInfoPlist2020_3;
|
||||
processManager.addCommand(FakeCommand(
|
||||
command: <String>[
|
||||
globals.fs.path.join(studioInApplicationPlistFolder, 'jre', 'Contents', 'Home', 'bin', 'java'),
|
||||
'-version',
|
||||
],
|
||||
stderr: '123',
|
||||
)
|
||||
);
|
||||
final AndroidStudio studio = AndroidStudio.fromMacOSBundle(
|
||||
globals.fs.directory(studioInApplicationPlistFolder).parent.path,
|
||||
)!;
|
||||
|
||||
expect(studio.javaPath, equals(globals.fs.path.join(
|
||||
studioInApplicationPlistFolder,
|
||||
'jre',
|
||||
'Contents',
|
||||
'Home',
|
||||
)));
|
||||
}, overrides: <Type, Generator>{
|
||||
FileSystem: () => fileSystem,
|
||||
FileSystemUtils: () => fsUtils,
|
||||
ProcessManager: () => processManager,
|
||||
// Custom home paths are not supported on macOS nor Windows yet,
|
||||
// so we force the platform to fake Linux here.
|
||||
Platform: () => platform,
|
||||
PlistParser: () => plistUtils,
|
||||
});
|
||||
|
||||
testUsingContext('Can find Android Studio 2022.1 bundled Java version on Mac', () {
|
||||
final String studioInApplicationPlistFolder = globals.fs.path.join(
|
||||
'/',
|
||||
'Application',
|
||||
'Android Studio.app',
|
||||
'Contents',
|
||||
);
|
||||
globals.fs.directory(studioInApplicationPlistFolder).createSync(recursive: true);
|
||||
|
||||
final String plistFilePath = globals.fs.path.join(studioInApplicationPlistFolder, 'Info.plist');
|
||||
plistUtils.fileContents[plistFilePath] = macStudioInfoPlist2022_1;
|
||||
processManager.addCommand(FakeCommand(
|
||||
command: <String>[
|
||||
globals.fs.path.join(studioInApplicationPlistFolder, 'jbr', 'Contents', 'Home', 'bin', 'java'),
|
||||
'-version',
|
||||
],
|
||||
stderr: '123',
|
||||
)
|
||||
);
|
||||
final AndroidStudio studio = AndroidStudio.fromMacOSBundle(
|
||||
globals.fs.directory(studioInApplicationPlistFolder).parent.path,
|
||||
)!;
|
||||
|
||||
expect(studio.javaPath, equals(globals.fs.path.join(
|
||||
studioInApplicationPlistFolder,
|
||||
'jbr',
|
||||
'Contents',
|
||||
'Home',
|
||||
)));
|
||||
}, overrides: <Type, Generator>{
|
||||
FileSystem: () => fileSystem,
|
||||
FileSystemUtils: () => fsUtils,
|
||||
ProcessManager: () => processManager,
|
||||
// Custom home paths are not supported on macOS nor Windows yet,
|
||||
// so we force the platform to fake Linux here.
|
||||
Platform: () => platform,
|
||||
PlistParser: () => plistUtils,
|
||||
});
|
||||
});
|
||||
|
||||
late FileSystem windowsFileSystem;
|
||||
|
@ -596,6 +687,38 @@ void main() {
|
|||
ProcessManager: () => FakeProcessManager.any(),
|
||||
});
|
||||
|
||||
testUsingContext('Can find Android Studio 2020.3 bundled Java version on Windows', () {
|
||||
windowsFileSystem.file(r'C:\Users\Dash\AppData\Local\Google\AndroidStudio2020.3\.home')
|
||||
..createSync(recursive: true)
|
||||
..writeAsStringSync(r'C:\Program Files\AndroidStudio');
|
||||
windowsFileSystem.directory(r'C:\Program Files\AndroidStudio')
|
||||
.createSync(recursive: true);
|
||||
|
||||
final AndroidStudio studio = AndroidStudio.allInstalled().single;
|
||||
|
||||
expect(studio.javaPath, equals(r'C:\Program Files\AndroidStudio\jre'));
|
||||
}, overrides: <Type, Generator>{
|
||||
Platform: () => windowsPlatform,
|
||||
FileSystem: () => windowsFileSystem,
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
});
|
||||
|
||||
testUsingContext('Can find Android Studio 2022.1 bundled Java version on Windows', () {
|
||||
windowsFileSystem.file(r'C:\Users\Dash\AppData\Local\Google\AndroidStudio2022.1\.home')
|
||||
..createSync(recursive: true)
|
||||
..writeAsStringSync(r'C:\Program Files\AndroidStudio');
|
||||
windowsFileSystem.directory(r'C:\Program Files\AndroidStudio')
|
||||
.createSync(recursive: true);
|
||||
|
||||
final AndroidStudio studio = AndroidStudio.allInstalled().single;
|
||||
|
||||
expect(studio.javaPath, equals(r'C:\Program Files\AndroidStudio\jbr'));
|
||||
}, overrides: <Type, Generator>{
|
||||
Platform: () => windowsPlatform,
|
||||
FileSystem: () => windowsFileSystem,
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
});
|
||||
|
||||
group('Installation detection on Linux', () {
|
||||
late FileSystemUtils fsUtils;
|
||||
|
||||
|
@ -686,6 +809,47 @@ void main() {
|
|||
Platform: () => linuxPlatform,
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
});
|
||||
|
||||
testUsingContext('Can find Android Studio 2020.3 bundled Java version on Linux', () {
|
||||
const String studioHomeFilePath = '$homeLinux/.cache/Google/AndroidStudio2020.3/.home';
|
||||
const String studioInstallPath = '$homeLinux/AndroidStudio';
|
||||
|
||||
globals.fs.file(studioHomeFilePath)
|
||||
..createSync(recursive: true)
|
||||
..writeAsStringSync(studioInstallPath);
|
||||
|
||||
globals.fs.directory(studioInstallPath).createSync();
|
||||
|
||||
final AndroidStudio studio = AndroidStudio.allInstalled().single;
|
||||
|
||||
expect(studio.javaPath, equals('$studioInstallPath/jre'));
|
||||
}, overrides: <Type, Generator>{
|
||||
FileSystem: () => fileSystem,
|
||||
FileSystemUtils: () => fsUtils,
|
||||
Platform: () => linuxPlatform,
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
});
|
||||
|
||||
testUsingContext('Can find Android Studio 2022.1 bundled Java version on Linux', () {
|
||||
const String studioHomeFilePath =
|
||||
'$homeLinux/.cache/Google/AndroidStudio2022.1/.home';
|
||||
const String studioInstallPath = '$homeLinux/AndroidStudio';
|
||||
|
||||
globals.fs.file(studioHomeFilePath)
|
||||
..createSync(recursive: true)
|
||||
..writeAsStringSync(studioInstallPath);
|
||||
|
||||
globals.fs.directory(studioInstallPath).createSync();
|
||||
|
||||
final AndroidStudio studio = AndroidStudio.allInstalled().single;
|
||||
|
||||
expect(studio.javaPath, equals('$studioInstallPath/jbr'));
|
||||
}, overrides: <Type, Generator>{
|
||||
FileSystem: () => fileSystem,
|
||||
FileSystemUtils: () => fsUtils,
|
||||
Platform: () => linuxPlatform,
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue