mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
Use Java bundled with Android Studio for gradle (#8965)
* Use Java bundled with Android Studio for gradle * review comments
This commit is contained in:
parent
d356b2d77a
commit
41edc1ac74
@ -5,6 +5,7 @@
|
||||
import '../base/common.dart';
|
||||
import '../base/context.dart';
|
||||
import '../base/file_system.dart';
|
||||
import '../base/io.dart';
|
||||
import '../base/os.dart';
|
||||
import '../base/platform.dart';
|
||||
import '../base/process_manager.dart';
|
||||
@ -45,6 +46,8 @@ String get gradleExecutable {
|
||||
return androidStudio?.gradleExecutable ?? os.which('gradle')?.path;
|
||||
}
|
||||
|
||||
String get javaPath => androidStudio?.javaPath;
|
||||
|
||||
class AndroidStudio implements Comparable<AndroidStudio> {
|
||||
AndroidStudio(this.directory, {Version version, this.configured})
|
||||
: this.version = version ?? Version.unknown {
|
||||
@ -56,6 +59,7 @@ class AndroidStudio implements Comparable<AndroidStudio> {
|
||||
final String configured;
|
||||
|
||||
String _gradlePath;
|
||||
String _javaPath;
|
||||
bool _isValid = false;
|
||||
List<String> _validationMessages = <String>[];
|
||||
|
||||
@ -99,6 +103,8 @@ class AndroidStudio implements Comparable<AndroidStudio> {
|
||||
String get gradleExecutable => fs.path
|
||||
.join(_gradlePath, 'bin', platform.isWindows ? 'gradle.bat' : 'gradle');
|
||||
|
||||
String get javaPath => _javaPath;
|
||||
|
||||
bool get isValid => _isValid;
|
||||
|
||||
List<String> get validationMessages => _validationMessages;
|
||||
@ -272,6 +278,19 @@ class AndroidStudio implements Comparable<AndroidStudio> {
|
||||
_validationMessages.add(
|
||||
'Gradle version $latestGradleVersion at $_gradlePath is not executable.');
|
||||
}
|
||||
|
||||
final String javaPath = platform.isMacOS ?
|
||||
fs.path.join(directory, 'jre', 'jdk', 'Contents', 'Home') :
|
||||
fs.path.join(directory, 'jre');
|
||||
final ProcessResult result = processManager.runSync(<String>[fs.path.join(javaPath, 'bin', 'java'), '-version']);
|
||||
if (result.exitCode == 0) {
|
||||
final List<String> versionLines = result.stderr.split('\n');
|
||||
final String javaVersion = versionLines.length >= 2 ? versionLines[1] : versionLines[0];
|
||||
_validationMessages.add('Java version: $javaVersion');
|
||||
_javaPath = javaPath;
|
||||
} else {
|
||||
_validationMessages.add('Unable to find bundled Java version.');
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
|
||||
@ -13,6 +13,7 @@ import '../base/process_manager.dart';
|
||||
import '../doctor.dart';
|
||||
import '../globals.dart';
|
||||
import 'android_sdk.dart';
|
||||
import 'android_studio.dart' as android_studio;
|
||||
|
||||
class AndroidWorkflow extends DoctorValidator implements Workflow {
|
||||
AndroidWorkflow() : super('Android toolchain - develop for Android devices');
|
||||
@ -30,9 +31,12 @@ class AndroidWorkflow extends DoctorValidator implements Workflow {
|
||||
static const String _kJavaExecutable = 'java';
|
||||
static const String _kJdkDownload = 'https://www.oracle.com/technetwork/java/javase/downloads/';
|
||||
|
||||
/// First sniff JAVA_HOME, then fallback to PATH.
|
||||
/// First try Java bundled with Android Studio, then sniff JAVA_HOME, then fallback to PATH.
|
||||
String _findJavaBinary() {
|
||||
|
||||
if (android_studio.javaPath != null)
|
||||
return fs.path.join(android_studio.javaPath, 'bin', 'java');
|
||||
|
||||
final String javaHomeEnv = platform.environment[_kJavaHomeEnvironmentVariable];
|
||||
if (javaHomeEnv != null) {
|
||||
// Trust JAVA_HOME.
|
||||
|
||||
@ -76,6 +76,7 @@ String get gradleAppOutDirV2 {
|
||||
<String>[gradle, 'app:properties'],
|
||||
workingDirectory: 'android',
|
||||
hideStdout: true,
|
||||
environment: _gradleEnv,
|
||||
);
|
||||
String buildDir = properties
|
||||
.split('\n')
|
||||
@ -179,7 +180,8 @@ Future<Null> buildGradleProjectV1(String gradle) async {
|
||||
final int exitcode = await runCommandAndStreamOutput(
|
||||
<String>[fs.file(gradle).absolute.path, 'build'],
|
||||
workingDirectory: 'android',
|
||||
allowReentrantFlutter: true
|
||||
allowReentrantFlutter: true,
|
||||
environment: _gradleEnv,
|
||||
);
|
||||
status.stop();
|
||||
|
||||
@ -214,7 +216,8 @@ Future<Null> buildGradleProjectV2(String gradle, String buildModeName, String ta
|
||||
final int exitcode = await runCommandAndStreamOutput(
|
||||
command,
|
||||
workingDirectory: 'android',
|
||||
allowReentrantFlutter: true
|
||||
allowReentrantFlutter: true,
|
||||
environment: _gradleEnv,
|
||||
);
|
||||
status.stop();
|
||||
|
||||
@ -233,3 +236,12 @@ Future<Null> buildGradleProjectV2(String gradle, String buildModeName, String ta
|
||||
|
||||
printStatus('Built ${apkFile.path} (${getSizeAsMB(apkFile.lengthSync())}).');
|
||||
}
|
||||
|
||||
Map<String, String> get _gradleEnv {
|
||||
final Map<String, String> env = new Map<String, String>.from(platform.environment);
|
||||
if (javaPath != null) {
|
||||
// Use java bundled with Android Studio.
|
||||
env['JAVA_HOME'] = javaPath;
|
||||
}
|
||||
return env;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user