From c19142d8b7b755ee829ce106d6d8f31b1cb811fa Mon Sep 17 00:00:00 2001 From: Danny Tuppeny Date: Mon, 17 Dec 2018 17:29:09 +0000 Subject: [PATCH] Support ANDROID_SDK_ROOT in addition to ANDROID_HOME (#25221) * Fall back to ANDROID_SDK_ROOT if ANDROID_HOME is not set And update descriptions to use the non-deprecated ANDROID_SDK_ROOT. Fixes #15114. * Remove trailing whitespace * Update dev/devicelab/lib/framework/adb.dart Co-Authored-By: DanTup * Reformat long line --- .cirrus.yml | 2 +- dev/bots/deploy_gallery.sh | 2 +- dev/bots/test.dart | 4 +++- dev/devicelab/README.md | 6 +++--- dev/devicelab/lib/framework/adb.dart | 10 +++++++--- .../flutter_tools/lib/src/android/android_sdk.dart | 3 +++ .../lib/src/android/android_workflow.dart | 4 ++++ packages/flutter_tools/lib/src/android/apk.dart | 2 +- 8 files changed, 23 insertions(+), 10 deletions(-) diff --git a/.cirrus.yml b/.cirrus.yml index 3305fbe2e63..cf5b523ebf5 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -8,7 +8,7 @@ task: # test path names with spaces in them. CIRRUS_WORKING_DIR: "/tmp/flutter sdk" PATH: "$CIRRUS_WORKING_DIR/bin:$CIRRUS_WORKING_DIR/bin/cache/dart-sdk/bin:$PATH" - ANDROID_HOME: "/opt/android_sdk" + ANDROID_SDK_ROOT: "/opt/android_sdk" git_fetch_script: - git fetch origin - git fetch origin master # To set FETCH_HEAD for "git merge-base" to work diff --git a/dev/bots/deploy_gallery.sh b/dev/bots/deploy_gallery.sh index c4ebeb73d1a..6c957f8c578 100755 --- a/dev/bots/deploy_gallery.sh +++ b/dev/bots/deploy_gallery.sh @@ -34,7 +34,7 @@ if [[ "$SHARD" = "deploy_gallery" ]]; then fi set -x - # ANDROID_HOME must be set in the env. + # ANDROID_SDK_ROOT must be set in the env. ( cd examples/flutter_gallery flutter build apk --release -t lib/main_publish.dart diff --git a/dev/bots/test.dart b/dev/bots/test.dart index 289b5ded60f..41dd11ebe9e 100644 --- a/dev/bots/test.dart +++ b/dev/bots/test.dart @@ -184,7 +184,9 @@ Future _flutterBuildAot(String relativePathToApplication) async { Future _flutterBuildApk(String relativePathToApplication) async { // TODO(dnfield): See if we can get Android SDK on all Cirrus platforms. - if (Platform.environment['ANDROID_HOME']?.isEmpty ?? true) { + if ( + (Platform.environment['ANDROID_HOME']?.isEmpty ?? true) && + (Platform.environment['ANDROID_SDK_ROOT']?.isEmpty ?? true)) { return; } print('Running APK build tests...'); diff --git a/dev/devicelab/README.md b/dev/devicelab/README.md index 355d89f5795..2830ed0ca09 100644 --- a/dev/devicelab/README.md +++ b/dev/devicelab/README.md @@ -102,9 +102,9 @@ reproduce a CI test failure locally. ## Prerequisites -You must set the `ANDROID_HOME` environment variable to run tests on Android. If -you have a local build of the Flutter engine, then you have a copy of the -Android SDK at `.../engine/src/third_party/android_tools/sdk`. +You must set the `ANDROID_HOME` or `ANDROID_SDK_ROOT` environment variable to run +tests on Android. If you have a local build of the Flutter engine, then you have +a copy of the Android SDK at `.../engine/src/third_party/android_tools/sdk`. You can find where your Android SDK is using `flutter doctor`. diff --git a/dev/devicelab/lib/framework/adb.dart b/dev/devicelab/lib/framework/adb.dart index 04f2bd90c4a..86aa04965c5 100644 --- a/dev/devicelab/lib/framework/adb.dart +++ b/dev/devicelab/lib/framework/adb.dart @@ -461,11 +461,15 @@ class IosDevice implements Device { /// Path to the `adb` executable. String get adbPath { - final String androidHome = Platform.environment['ANDROID_HOME']; + final String androidHome = + Platform.environment['ANDROID_HOME'] != null + ? Platform.environment['ANDROID_HOME'] + : Platform.environment['ANDROID_SDK_ROOT']; if (androidHome == null) - throw 'ANDROID_HOME environment variable missing. This variable must ' - 'point to the Android SDK directory containing platform-tools.'; + throw 'The ANDROID_SDK_ROOT and ANDROID_HOME environment variables are ' + 'missing. At least one of these variables must point to the Android ' + 'SDK directory containing platform-tools.'; final String adbPath = path.join(androidHome, 'platform-tools/adb'); diff --git a/packages/flutter_tools/lib/src/android/android_sdk.dart b/packages/flutter_tools/lib/src/android/android_sdk.dart index 2f7ffdb3eeb..7ffd46f50e7 100644 --- a/packages/flutter_tools/lib/src/android/android_sdk.dart +++ b/packages/flutter_tools/lib/src/android/android_sdk.dart @@ -21,6 +21,7 @@ import 'android_studio.dart' as android_studio; AndroidSdk get androidSdk => context[AndroidSdk]; const String kAndroidHome = 'ANDROID_HOME'; +const String kAndroidSdkRoot = 'ANDROID_SDK_ROOT'; // Android SDK layout: @@ -243,6 +244,8 @@ class AndroidSdk { androidHomeDir = config.getValue('android-sdk'); } else if (platform.environment.containsKey(kAndroidHome)) { androidHomeDir = platform.environment[kAndroidHome]; + } else if (platform.environment.containsKey(kAndroidSdkRoot)) { + androidHomeDir = platform.environment[kAndroidSdkRoot]; } else if (platform.isLinux) { if (homeDirPath != null) androidHomeDir = fs.path.join(homeDirPath, 'Android', 'Sdk'); diff --git a/packages/flutter_tools/lib/src/android/android_workflow.dart b/packages/flutter_tools/lib/src/android/android_workflow.dart index e1eac67fdfa..f2e7725a3a5 100644 --- a/packages/flutter_tools/lib/src/android/android_workflow.dart +++ b/packages/flutter_tools/lib/src/android/android_workflow.dart @@ -125,6 +125,10 @@ class AndroidValidator extends DoctorValidator { final String androidHomeDir = platform.environment[kAndroidHome]; messages.add(ValidationMessage('$kAndroidHome = $androidHomeDir')); } + if (platform.environment.containsKey(kAndroidSdkRoot)) { + final String androidSdkRoot = platform.environment[kAndroidSdkRoot]; + messages.add(ValidationMessage('$kAndroidSdkRoot = $androidSdkRoot')); + } final List validationResult = androidSdk.validateSdkWellFormed(); diff --git a/packages/flutter_tools/lib/src/android/apk.dart b/packages/flutter_tools/lib/src/android/apk.dart index fc28d54a3a8..41c89b0b76c 100644 --- a/packages/flutter_tools/lib/src/android/apk.dart +++ b/packages/flutter_tools/lib/src/android/apk.dart @@ -30,7 +30,7 @@ Future buildApk({ // Validate that we can find an android sdk. if (androidSdk == null) - throwToolExit('No Android SDK found. Try setting the ANDROID_HOME environment variable.'); + throwToolExit('No Android SDK found. Try setting the ANDROID_SDK_ROOT environment variable.'); final List validationResult = androidSdk.validateSdkWellFormed(); if (validationResult.isNotEmpty) {