Unverified Commit 5a3e7e43 authored by Dmitry Borodin's avatar Dmitry Borodin Committed by GitHub

Updated obsolete URL (#52158)

parent ed67c479
...@@ -90,7 +90,7 @@ class NoAndroidStudioValidator extends DoctorValidator { ...@@ -90,7 +90,7 @@ class NoAndroidStudioValidator extends DoctorValidator {
userMessages.androidStudioMissing(cfgAndroidStudio), userMessages.androidStudioMissing(cfgAndroidStudio),
)); ));
} }
messages.add(ValidationMessage(userMessages.androidStudioInstallation)); messages.add(ValidationMessage(userMessages.androidStudioInstallation(globals.platform)));
return ValidationResult( return ValidationResult(
ValidationType.notAvailable, ValidationType.notAvailable,
......
...@@ -154,7 +154,7 @@ class AndroidValidator extends DoctorValidator { ...@@ -154,7 +154,7 @@ class AndroidValidator extends DoctorValidator {
} else { } else {
// Instruct user to set [kAndroidSdkRoot] and not deprecated [kAndroidHome] // Instruct user to set [kAndroidSdkRoot] and not deprecated [kAndroidHome]
// See https://github.com/flutter/flutter/issues/39301 // See https://github.com/flutter/flutter/issues/39301
messages.add(ValidationMessage.error(_userMessages.androidMissingSdkInstructions(kAndroidSdkRoot))); messages.add(ValidationMessage.error(_userMessages.androidMissingSdkInstructions(kAndroidSdkRoot, _platform)));
} }
return ValidationResult(ValidationType.missing, messages); return ValidationResult(ValidationType.missing, messages);
} }
...@@ -174,7 +174,12 @@ class AndroidValidator extends DoctorValidator { ...@@ -174,7 +174,12 @@ class AndroidValidator extends DoctorValidator {
if (_androidSdk.latestVersion != null) { if (_androidSdk.latestVersion != null) {
if (_androidSdk.latestVersion.sdkLevel < 28 || _androidSdk.latestVersion.buildToolsVersion < kAndroidSdkBuildToolsMinVersion) { if (_androidSdk.latestVersion.sdkLevel < 28 || _androidSdk.latestVersion.buildToolsVersion < kAndroidSdkBuildToolsMinVersion) {
messages.add(ValidationMessage.error( messages.add(ValidationMessage.error(
_userMessages.androidSdkBuildToolsOutdated(_androidSdk.sdkManagerPath, kAndroidSdkMinVersion, kAndroidSdkBuildToolsMinVersion.toString())), _userMessages.androidSdkBuildToolsOutdated(
_androidSdk.sdkManagerPath,
kAndroidSdkMinVersion,
kAndroidSdkBuildToolsMinVersion.toString(),
_platform,
)),
); );
return ValidationResult(ValidationType.missing, messages); return ValidationResult(ValidationType.missing, messages);
} }
...@@ -184,7 +189,7 @@ class AndroidValidator extends DoctorValidator { ...@@ -184,7 +189,7 @@ class AndroidValidator extends DoctorValidator {
_androidSdk.latestVersion.platformName, _androidSdk.latestVersion.platformName,
_androidSdk.latestVersion.buildToolsVersionName))); _androidSdk.latestVersion.buildToolsVersionName)));
} else { } else {
messages.add(ValidationMessage.error(_userMessages.androidMissingSdkInstructions(kAndroidHome))); messages.add(ValidationMessage.error(_userMessages.androidMissingSdkInstructions(kAndroidHome, _platform)));
} }
if (_platform.environment.containsKey(kAndroidHome)) { if (_platform.environment.containsKey(kAndroidHome)) {
...@@ -203,7 +208,7 @@ class AndroidValidator extends DoctorValidator { ...@@ -203,7 +208,7 @@ class AndroidValidator extends DoctorValidator {
messages.addAll(validationResult.map<ValidationMessage>((String message) { messages.addAll(validationResult.map<ValidationMessage>((String message) {
return ValidationMessage.error(message); return ValidationMessage.error(message);
})); }));
messages.add(ValidationMessage(_userMessages.androidSdkInstallHelp)); messages.add(ValidationMessage(_userMessages.androidSdkInstallHelp(_platform)));
return ValidationResult(ValidationType.partial, messages, statusInfo: sdkVersionText); return ValidationResult(ValidationType.partial, messages, statusInfo: sdkVersionText);
} }
...@@ -261,7 +266,7 @@ class AndroidLicenseValidator extends DoctorValidator { ...@@ -261,7 +266,7 @@ class AndroidLicenseValidator extends DoctorValidator {
messages.add(ValidationMessage.error(userMessages.androidLicensesNone)); messages.add(ValidationMessage.error(userMessages.androidLicensesNone));
return ValidationResult(ValidationType.partial, messages, statusInfo: sdkVersionText); return ValidationResult(ValidationType.partial, messages, statusInfo: sdkVersionText);
case LicensesAccepted.unknown: case LicensesAccepted.unknown:
messages.add(ValidationMessage.error(userMessages.androidLicensesUnknown)); messages.add(ValidationMessage.error(userMessages.androidLicensesUnknown(globals.platform)));
return ValidationResult(ValidationType.partial, messages, statusInfo: sdkVersionText); return ValidationResult(ValidationType.partial, messages, statusInfo: sdkVersionText);
} }
return ValidationResult(ValidationType.installed, messages, statusInfo: sdkVersionText); return ValidationResult(ValidationType.installed, messages, statusInfo: sdkVersionText);
...@@ -356,7 +361,7 @@ class AndroidLicenseValidator extends DoctorValidator { ...@@ -356,7 +361,7 @@ class AndroidLicenseValidator extends DoctorValidator {
} }
if (!_canRunSdkManager()) { if (!_canRunSdkManager()) {
throwToolExit(userMessages.androidMissingSdkManager(androidSdk.sdkManagerPath)); throwToolExit(userMessages.androidMissingSdkManager(androidSdk.sdkManagerPath, globals.platform));
} }
try { try {
...@@ -394,6 +399,7 @@ class AndroidLicenseValidator extends DoctorValidator { ...@@ -394,6 +399,7 @@ class AndroidLicenseValidator extends DoctorValidator {
throwToolExit(userMessages.androidCannotRunSdkManager( throwToolExit(userMessages.androidCannotRunSdkManager(
androidSdk.sdkManagerPath, androidSdk.sdkManagerPath,
e.toString(), e.toString(),
globals.platform,
)); ));
return false; return false;
} }
......
...@@ -2,6 +2,8 @@ ...@@ -2,6 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
import 'package:platform/platform.dart';
import 'context.dart'; import 'context.dart';
UserMessages get userMessages => context.get<UserMessages>(); UserMessages get userMessages => context.get<UserMessages>();
...@@ -62,19 +64,19 @@ class UserMessages { ...@@ -62,19 +64,19 @@ class UserMessages {
String androidBadSdkDir(String envKey, String homeDir) => String androidBadSdkDir(String envKey, String homeDir) =>
'$envKey = $homeDir\n' '$envKey = $homeDir\n'
'but Android SDK not found at this location.'; 'but Android SDK not found at this location.';
String androidMissingSdkInstructions(String envKey) => String androidMissingSdkInstructions(String envKey, Platform platform) =>
'Unable to locate Android SDK.\n' 'Unable to locate Android SDK.\n'
'Install Android Studio from: https://developer.android.com/studio/index.html\n' 'Install Android Studio from: https://developer.android.com/studio/index.html\n'
'On first launch it will assist you in installing the Android SDK components.\n' 'On first launch it will assist you in installing the Android SDK components.\n'
'(or visit https://flutter.dev/setup/#android-setup for detailed instructions).\n' '(or visit ${_androidSdkInstallUrl(platform)} for detailed instructions).\n'
'If the Android SDK has been installed to a custom location, set $envKey to that location.\n' 'If the Android SDK has been installed to a custom location, set $envKey to that location.\n'
'You may also want to add it to your PATH environment variable.\n'; 'You may also want to add it to your PATH environment variable.\n';
String androidSdkLocation(String directory) => 'Android SDK at $directory'; String androidSdkLocation(String directory) => 'Android SDK at $directory';
String androidSdkPlatformToolsVersion(String platform, String tools) => String androidSdkPlatformToolsVersion(String platform, String tools) =>
'Platform $platform, build-tools $tools'; 'Platform $platform, build-tools $tools';
String get androidSdkInstallHelp => String androidSdkInstallHelp(Platform platform) =>
'Try re-installing or updating your Android SDK,\n' 'Try re-installing or updating your Android SDK,\n'
'visit https://flutter.dev/setup/#android-setup for detailed instructions.'; 'visit ${_androidSdkInstallUrl(platform)} for detailed instructions.';
String get androidMissingNdk => 'Android NDK location not configured (optional; useful for native profiling support)'; String get androidMissingNdk => 'Android NDK location not configured (optional; useful for native profiling support)';
String androidNdkLocation(String directory) => 'Android NDK at $directory'; String androidNdkLocation(String directory) => 'Android NDK at $directory';
// Also occurs in AndroidLicenseValidator // Also occurs in AndroidLicenseValidator
...@@ -89,29 +91,29 @@ class UserMessages { ...@@ -89,29 +91,29 @@ class UserMessages {
String get androidLicensesAll => 'All Android licenses accepted.'; String get androidLicensesAll => 'All Android licenses accepted.';
String get androidLicensesSome => 'Some Android licenses not accepted. To resolve this, run: flutter doctor --android-licenses'; String get androidLicensesSome => 'Some Android licenses not accepted. To resolve this, run: flutter doctor --android-licenses';
String get androidLicensesNone => 'Android licenses not accepted. To resolve this, run: flutter doctor --android-licenses'; String get androidLicensesNone => 'Android licenses not accepted. To resolve this, run: flutter doctor --android-licenses';
String get androidLicensesUnknown => String androidLicensesUnknown(Platform platform) =>
'Android license status unknown.\n' 'Android license status unknown.\n'
'Try re-installing or updating your Android SDK Manager.\n' 'Try re-installing or updating your Android SDK Manager.\n'
'See https://developer.android.com/studio/#downloads or visit ' 'See https://developer.android.com/studio/#downloads or visit '
'https://flutter.dev/setup/#android-setup for detailed instructions.'; 'visit ${_androidSdkInstallUrl(platform)} for detailed instructions.';
String androidSdkManagerOutdated(String managerPath) => String androidSdkManagerOutdated(String managerPath) =>
'A newer version of the Android SDK is required. To update, run:\n' 'A newer version of the Android SDK is required. To update, run:\n'
'$managerPath --update\n'; '$managerPath --update\n';
String androidLicensesTimeout(String managerPath) => 'Intentionally killing $managerPath'; String androidLicensesTimeout(String managerPath) => 'Intentionally killing $managerPath';
String get androidSdkShort => 'Unable to locate Android SDK.'; String get androidSdkShort => 'Unable to locate Android SDK.';
String androidMissingSdkManager(String sdkManagerPath) => String androidMissingSdkManager(String sdkManagerPath, Platform platform) =>
'Android sdkmanager tool not found ($sdkManagerPath).\n' 'Android sdkmanager tool not found ($sdkManagerPath).\n'
'Try re-installing or updating your Android SDK,\n' 'Try re-installing or updating your Android SDK,\n'
'visit https://flutter.dev/setup/#android-setup for detailed instructions.'; 'visit ${_androidSdkInstallUrl(platform)} for detailed instructions.';
String androidCannotRunSdkManager(String sdkManagerPath, String error) => String androidCannotRunSdkManager(String sdkManagerPath, String error, Platform platform) =>
'Android sdkmanager tool was found, but failed to run ($sdkManagerPath): "$error".\n' 'Android sdkmanager tool was found, but failed to run ($sdkManagerPath): "$error".\n'
'Try re-installing or updating your Android SDK,\n' 'Try re-installing or updating your Android SDK,\n'
'visit https://flutter.dev/setup/#android-setup for detailed instructions.'; 'visit ${_androidSdkInstallUrl(platform)} for detailed instructions.';
String androidSdkBuildToolsOutdated(String managerPath, int sdkMinVersion, String buildToolsMinVersion) => String androidSdkBuildToolsOutdated(String managerPath, int sdkMinVersion, String buildToolsMinVersion, Platform platform) =>
'Flutter requires Android SDK $sdkMinVersion and the Android BuildTools $buildToolsMinVersion\n' 'Flutter requires Android SDK $sdkMinVersion and the Android BuildTools $buildToolsMinVersion\n'
'To update using sdkmanager, run:\n' 'To update using sdkmanager, run:\n'
' "$managerPath" "platforms;android-$sdkMinVersion" "build-tools;$buildToolsMinVersion"\n' ' "$managerPath" "platforms;android-$sdkMinVersion" "build-tools;$buildToolsMinVersion"\n'
'or visit https://flutter.dev/setup/#android-setup for detailed instructions.'; 'or visit ${_androidSdkInstallUrl(platform)} for detailed instructions.';
// Messages used in AndroidStudioValidator // Messages used in AndroidStudioValidator
String androidStudioVersion(String version) => 'version $version'; String androidStudioVersion(String version) => 'version $version';
...@@ -127,9 +129,9 @@ class UserMessages { ...@@ -127,9 +129,9 @@ class UserMessages {
String androidStudioMissing(String location) => String androidStudioMissing(String location) =>
'android-studio-dir = $location\n' 'android-studio-dir = $location\n'
'but Android Studio not found at this location.'; 'but Android Studio not found at this location.';
String get androidStudioInstallation => String androidStudioInstallation(Platform platform) =>
'Android Studio not found; download from https://developer.android.com/studio/index.html\n' 'Android Studio not found; download from https://developer.android.com/studio/index.html\n'
'(or visit https://flutter.dev/setup/#android-setup for detailed instructions).'; '(or visit ${_androidSdkInstallUrl(platform)} for detailed instructions).';
// Messages used in XcodeValidator // Messages used in XcodeValidator
String xcodeLocation(String location) => 'Xcode at $location'; String xcodeLocation(String location) => 'Xcode at $location';
...@@ -292,4 +294,18 @@ class UserMessages { ...@@ -292,4 +294,18 @@ class UserMessages {
'In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.\n' 'In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.\n'
'Read more about iOS versioning at\n' 'Read more about iOS versioning at\n'
'https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html\n'; 'https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html\n';
String _androidSdkInstallUrl(Platform platform) {
const String baseUrl = 'https://flutter.dev/docs/get-started/install';
const String fragment = '#android-setup';
if (platform.isMacOS) {
return '$baseUrl/macos$fragment';
} else if (platform.isLinux) {
return '$baseUrl/linux$fragment';
} else if (platform.isWindows) {
return '$baseUrl/windows$fragment';
} else {
return baseUrl;
}
}
} }
...@@ -230,6 +230,7 @@ void main() { ...@@ -230,6 +230,7 @@ void main() {
sdk.sdkManagerPath, sdk.sdkManagerPath,
kAndroidSdkMinVersion, kAndroidSdkMinVersion,
kAndroidSdkBuildToolsMinVersion.toString(), kAndroidSdkBuildToolsMinVersion.toString(),
FakePlatform(),
); );
final AndroidValidator androidValidator = AndroidValidator( final AndroidValidator androidValidator = AndroidValidator(
......
// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:flutter_tools/src/base/user_messages.dart';
import 'package:platform/platform.dart';
import '../../src/common.dart';
typedef _InstallationMessage = String Function(Platform);
void main() {
final FakePlatform macPlatform = FakePlatform.fromPlatform(const LocalPlatform());
macPlatform.operatingSystem = 'macos';
final FakePlatform linuxPlatform = FakePlatform.fromPlatform(const LocalPlatform());
linuxPlatform.operatingSystem = 'linux';
final FakePlatform windowsPlatform = FakePlatform.fromPlatform(const LocalPlatform());
windowsPlatform.operatingSystem = 'windows';
void _checkInstallationURL(_InstallationMessage message) {
expect(message(macPlatform), contains('https://flutter.dev/docs/get-started/install/macos#android-setup'));
expect(message(linuxPlatform), contains('https://flutter.dev/docs/get-started/install/linux#android-setup'));
expect(message(windowsPlatform), contains('https://flutter.dev/docs/get-started/install/windows#android-setup'));
expect(message(FakePlatform()), contains('https://flutter.dev/docs/get-started/install '));
}
testWithoutContext('Android installation instructions', () {
final UserMessages userMessages = UserMessages();
_checkInstallationURL((Platform platform) => userMessages.androidMissingSdkInstructions('ANDROID_SDK_ROOT', platform));
_checkInstallationURL((Platform platform) => userMessages.androidSdkInstallHelp(platform));
_checkInstallationURL((Platform platform) => userMessages.androidMissingSdkManager('/', platform));
_checkInstallationURL((Platform platform) => userMessages.androidCannotRunSdkManager('/', '', platform));
_checkInstallationURL((Platform platform) => userMessages.androidSdkBuildToolsOutdated('/', 0, '', platform));
_checkInstallationURL((Platform platform) => userMessages.androidStudioInstallation(platform));
});
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment