Skip to content

Commit d63316b

Browse files
author
Emmanuel Garcia
committed
Fix regex to detect AGP version
1 parent aa04d01 commit d63316b

5 files changed

Lines changed: 69 additions & 1 deletion

File tree

‎packages/flutter_tools/lib/src/android/gradle_utils.dart‎

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ distributionUrl=https\\://services.gradle.org/distributions/gradle-$gradleVersio
9494
}
9595
const String _defaultGradleVersion = '6.7';
9696

97-
final RegExp _androidPluginRegExp = RegExp(r'com\.android\.tools\.build:gradle:\(\d+\.\d+\.\d+\)');
97+
final RegExp _androidPluginRegExp = RegExp(r'com\.android\.tools\.build:gradle:(\d+\.\d+\.\d+)');
9898

9999
/// Returns the Gradle version that the current Android plugin depends on when found,
100100
/// otherwise it returns a default version.
@@ -104,14 +104,17 @@ final RegExp _androidPluginRegExp = RegExp(r'com\.android\.tools\.build:gradle:\
104104
String getGradleVersionForAndroidPlugin(Directory directory) {
105105
final File buildFile = directory.childFile('build.gradle');
106106
if (!buildFile.existsSync()) {
107+
globals.printTrace('$buildFile doesn\'t exist, assuming AGP version: $_defaultGradleVersion');
107108
return _defaultGradleVersion;
108109
}
109110
final String buildFileContent = buildFile.readAsStringSync();
110111
final Iterable<Match> pluginMatches = _androidPluginRegExp.allMatches(buildFileContent);
111112
if (pluginMatches.isEmpty) {
113+
globals.printTrace('$buildFile doesn\'t provide an AGP version, assuming AGP version: $_defaultGradleVersion');
112114
return _defaultGradleVersion;
113115
}
114116
final String androidPluginVersion = pluginMatches.first.group(1);
117+
globals.printTrace('$buildFile provides AGP version: $androidPluginVersion');
115118
return getGradleVersionFor(androidPluginVersion);
116119
}
117120

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
org.gradle.jvmargs=-Xmx1536M
22
android.useAndroidX=true
33
android.enableJetifier=true
4+
android.enableR8=true
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
org.gradle.jvmargs=-Xmx1536M
22
android.useAndroidX=true
33
android.enableJetifier=true
4+
android.enableR8=true
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
org.gradle.jvmargs=-Xmx1536M
22
android.useAndroidX=true
33
android.enableJetifier=true
4+
android.enableR8=true

‎packages/flutter_tools/test/general.shard/android/gradle_utils_test.dart‎

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,68 @@ void main() {
117117
FileSystem: () => memoryFileSystem,
118118
ProcessManager: () => FakeProcessManager.any(),
119119
});
120+
121+
testUsingContext('injects the wrapper and the Gradle version is derivated from the AGP version', () {
122+
const Map<String, String> testCases = <String, String>{
123+
// AGP version : Gradle version
124+
'1.0.0': '2.3',
125+
'3.3.1': '4.10.2',
126+
'3.0.0': '4.1',
127+
'3.0.5': '4.1',
128+
'3.0.9': '4.1',
129+
'3.1.0': '4.4',
130+
'3.2.0': '4.6',
131+
'3.3.0': '4.10.2',
132+
'3.4.0': '5.6.2',
133+
'3.5.0': '5.6.2',
134+
'4.0.0': '6.7',
135+
'4.0.5': '6.7',
136+
'4.1.0': '6.7',
137+
};
138+
139+
for (final MapEntry<String, String> entry in testCases.entries) {
140+
final Directory sampleAppAndroid = globals.fs.systemTempDirectory.createTempSync('android');
141+
sampleAppAndroid
142+
.childFile('build.gradle')
143+
.writeAsStringSync('''
144+
buildscript {
145+
dependencies {
146+
classpath 'com.android.tools.build:gradle:${entry.key}'
147+
}
148+
}
149+
''');
150+
gradleUtils.injectGradleWrapperIfNeeded(sampleAppAndroid);
151+
152+
expect(sampleAppAndroid.childFile('gradlew').existsSync(), isTrue);
153+
154+
expect(sampleAppAndroid
155+
.childDirectory('gradle')
156+
.childDirectory('wrapper')
157+
.childFile('gradle-wrapper.jar')
158+
.existsSync(), isTrue);
159+
160+
expect(sampleAppAndroid
161+
.childDirectory('gradle')
162+
.childDirectory('wrapper')
163+
.childFile('gradle-wrapper.properties')
164+
.existsSync(), isTrue);
165+
166+
expect(sampleAppAndroid
167+
.childDirectory('gradle')
168+
.childDirectory('wrapper')
169+
.childFile('gradle-wrapper.properties')
170+
.readAsStringSync(),
171+
'distributionBase=GRADLE_USER_HOME\n'
172+
'distributionPath=wrapper/dists\n'
173+
'zipStoreBase=GRADLE_USER_HOME\n'
174+
'zipStorePath=wrapper/dists\n'
175+
'distributionUrl=https\\://services.gradle.org/distributions/gradle-${entry.value}-all.zip\n');
176+
}
177+
}, overrides: <Type, Generator>{
178+
Cache: () => Cache.test(rootOverride: tempDir, fileSystem: memoryFileSystem),
179+
FileSystem: () => memoryFileSystem,
180+
ProcessManager: () => FakeProcessManager.any(),
181+
});
120182
});
121183

122184
group('GradleUtils.getExecutable', () {

0 commit comments

Comments
 (0)