Skip to content

Commit c186d0d

Browse files
authored
pass the value of the android sdk (flutter#11268)
* pass the value of the android sdk * swap flag * allow the user to set the android-sdk location
1 parent daa7860 commit c186d0d

File tree

5 files changed

+80
-32
lines changed

5 files changed

+80
-32
lines changed

packages/flutter_tools/lib/src/android/android_sdk.dart

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,10 @@ class AndroidSdk {
6767

6868
static AndroidSdk locateAndroidSdk() {
6969
String androidHomeDir;
70-
if (platform.environment.containsKey(kAndroidHome)) {
70+
71+
if (config.containsKey('android-sdk')) {
72+
androidHomeDir = config.getValue('android-sdk');
73+
} else if (platform.environment.containsKey(kAndroidHome)) {
7174
androidHomeDir = platform.environment[kAndroidHome];
7275
} else if (platform.isLinux) {
7376
if (homeDirPath != null)

packages/flutter_tools/lib/src/base/config.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ class Config {
2424

2525
Iterable<String> get keys => _values.keys;
2626

27+
bool containsKey(String key) => _values.containsKey(key);
28+
2729
dynamic getValue(String key) => _values[key];
2830

2931
void setValue(String key, String value) {

packages/flutter_tools/lib/src/commands/config.dart

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import 'dart:async';
66
import 'dart:convert';
77

8+
import '../android/android_sdk.dart';
89
import '../android/android_studio.dart';
910
import '../globals.dart';
1011
import '../runner/flutter_command.dart';
@@ -19,6 +20,7 @@ class ConfigCommand extends FlutterCommand {
1920
negatable: false,
2021
help: 'Clear the saved development certificate choice used to sign apps for iOS device deployment.');
2122
argParser.addOption('gradle-dir', help: 'The gradle install directory.');
23+
argParser.addOption('android-sdk', help: 'The Android SDK directory.');
2224
argParser.addOption('android-studio-dir', help: 'The Android Studio install directory.');
2325
argParser.addFlag('machine',
2426
negatable: false,
@@ -38,6 +40,9 @@ class ConfigCommand extends FlutterCommand {
3840
@override
3941
final List<String> aliases = <String>['configure'];
4042

43+
@override
44+
bool get shouldUpdateCache => false;
45+
4146
@override
4247
String get usageFooter {
4348
// List all config settings.
@@ -69,6 +74,9 @@ class ConfigCommand extends FlutterCommand {
6974
if (argResults.wasParsed('gradle-dir'))
7075
_updateConfig('gradle-dir', argResults['gradle-dir']);
7176

77+
if (argResults.wasParsed('android-sdk'))
78+
_updateConfig('android-sdk', argResults['android-sdk']);
79+
7280
if (argResults.wasParsed('android-studio-dir'))
7381
_updateConfig('android-studio-dir', argResults['android-studio-dir']);
7482

@@ -90,8 +98,11 @@ class ConfigCommand extends FlutterCommand {
9098
if (results['android-studio-dir'] == null && androidStudio != null) {
9199
results['android-studio-dir'] = androidStudio.directory;
92100
}
101+
if (results['android-sdk'] == null && androidSdk != null) {
102+
results['android-sdk'] = androidSdk.directory;
103+
}
93104

94-
printStatus(JSON.encode(results));
105+
printStatus(const JsonEncoder.withIndent(' ').convert(results));
95106
}
96107

97108
void _updateConfig(String keyName, String keyValue) {
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
// Copyright 2016 The Chromium Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
import 'dart:convert';
6+
7+
import 'package:flutter_tools/src/android/android_sdk.dart';
8+
import 'package:flutter_tools/src/android/android_studio.dart';
9+
import 'package:flutter_tools/src/base/context.dart';
10+
import 'package:flutter_tools/src/base/logger.dart';
11+
import 'package:flutter_tools/src/commands/config.dart';
12+
import 'package:mockito/mockito.dart';
13+
import 'package:test/test.dart';
14+
15+
import '../src/context.dart';
16+
17+
void main() {
18+
MockAndroidStudio mockAndroidStudio;
19+
MockAndroidSdk mockAndroidSdk;
20+
21+
setUp(() {
22+
mockAndroidStudio = new MockAndroidStudio();
23+
mockAndroidSdk = new MockAndroidSdk();
24+
});
25+
26+
group('config', () {
27+
testUsingContext('machine flag', () async {
28+
final BufferLogger logger = context[Logger];
29+
final ConfigCommand command = new ConfigCommand();
30+
await command.handleMachine();
31+
32+
expect(logger.statusText, isNotEmpty);
33+
final dynamic json = JSON.decode(logger.statusText);
34+
expect(json, isMap);
35+
36+
expect(json.containsKey('android-studio-dir'), true);
37+
expect(json['android-studio-dir'], isNotNull);
38+
39+
expect(json.containsKey('android-sdk'), true);
40+
expect(json['android-sdk'], isNotNull);
41+
}, overrides: <Type, Generator>{
42+
AndroidStudio: () => mockAndroidStudio,
43+
AndroidSdk: () => mockAndroidSdk,
44+
});
45+
});
46+
}
47+
48+
class MockAndroidStudio extends Mock implements AndroidStudio, Comparable<AndroidStudio> {
49+
@override
50+
String get directory => 'path/to/android/stdio';
51+
}
52+
53+
class MockAndroidSdk extends Mock implements AndroidSdk {
54+
@override
55+
String get directory => 'path/to/android/sdk';
56+
}

packages/flutter_tools/test/config_test.dart

Lines changed: 6 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -2,28 +2,17 @@
22
// Use of this source code is governed by a BSD-style license that can be
33
// found in the LICENSE file.
44

5-
import 'dart:convert';
6-
7-
import 'package:flutter_tools/src/android/android_studio.dart';
85
import 'package:flutter_tools/src/base/config.dart';
9-
import 'package:flutter_tools/src/base/context.dart';
106
import 'package:flutter_tools/src/base/file_system.dart';
11-
import 'package:flutter_tools/src/base/logger.dart';
12-
import 'package:flutter_tools/src/commands/config.dart';
13-
import 'package:mockito/mockito.dart';
147
import 'package:test/test.dart';
158

16-
import 'src/context.dart';
17-
189
void main() {
1910
Config config;
20-
MockAndroidStudio mockAndroidStudio;
2111

2212
setUp(() {
2313
final Directory tempDirectory = fs.systemTempDirectory.createTempSync('flutter_test');
2414
final File file = fs.file(fs.path.join(tempDirectory.path, '.settings'));
2515
config = new Config(file);
26-
mockAndroidStudio = new MockAndroidStudio();
2716
});
2817

2918
group('config', () {
@@ -34,6 +23,12 @@ void main() {
3423
expect(config.keys, contains('foo'));
3524
});
3625

26+
test('containsKey', () async {
27+
expect(config.containsKey('foo'), false);
28+
config.setValue('foo', 'bar');
29+
expect(config.containsKey('foo'), true);
30+
});
31+
3732
test('removeValue', () async {
3833
expect(config.getValue('foo'), null);
3934
config.setValue('foo', 'bar');
@@ -43,24 +38,5 @@ void main() {
4338
expect(config.getValue('foo'), null);
4439
expect(config.keys, isNot(contains('foo')));
4540
});
46-
47-
testUsingContext('machine flag', () async {
48-
final BufferLogger logger = context[Logger];
49-
final ConfigCommand command = new ConfigCommand();
50-
await command.handleMachine();
51-
52-
expect(logger.statusText, isNotEmpty);
53-
final dynamic json = JSON.decode(logger.statusText);
54-
expect(json, isMap);
55-
expect(json.containsKey('android-studio-dir'), true);
56-
expect(json['android-studio-dir'], isNotNull);
57-
}, overrides: <Type, Generator>{
58-
AndroidStudio: () => mockAndroidStudio,
59-
});
6041
});
6142
}
62-
63-
class MockAndroidStudio extends Mock implements AndroidStudio, Comparable<AndroidStudio> {
64-
@override
65-
String get directory => 'path/to/android/stdio';
66-
}

0 commit comments

Comments
 (0)