@@ -15,7 +15,6 @@ final String gradlewExecutable = Platform.isWindows ? '.\\$gradlew' : './$gradle
1515/// Tests that a plugin example app can be built using the current Flutter Gradle plugin.
1616Future <void > main () async {
1717 await task (() async {
18-
1918 section ('Find Java' );
2019
2120 final String javaHome = await findJavaHome ();
@@ -32,22 +31,47 @@ Future<void> main() async {
3231 options: < String > ['--android' , '--no-ios' ],
3332 );
3433
35- final Directory tempDir = Directory .systemTemp.createTempSync ('flutter_plugin_test.' );
36- final Directory projectDir = Directory (path.join (tempDir.path, 'plugin_test' ));
34+ final Directory tempDir =
35+ Directory .systemTemp.createTempSync ('flutter_plugin_test.' );
36+ final Directory projectDir =
37+ Directory (path.join (tempDir.path, 'plugin_test' ));
3738 try {
3839 await inDirectory (tempDir, () async {
3940 await flutter (
4041 'create' ,
41- options: < String > ['--template=plugin' , '--platforms=android' , 'plugin_test' ],
42+ options: < String > [
43+ '--template=plugin' ,
44+ '--platforms=android' ,
45+ 'plugin_test' ,
46+ ],
4247 );
4348 });
4449
45- final Directory exampleAppDir = Directory (path.join (projectDir.path, 'example' ));
50+ final Directory exampleAppDir =
51+ Directory (path.join (projectDir.path, 'example' ));
4652 if (! exists (exampleAppDir)) {
4753 return TaskResult .failure ('Example app directory doesn\' t exist' );
4854 }
4955
50- section ('Run flutter build apk' );
56+ final File buildGradleFile =
57+ File (path.join (exampleAppDir.path, 'android' , 'build.gradle' ));
58+
59+ if (! exists (buildGradleFile)) {
60+ return TaskResult .failure ('$buildGradleFile doesn\' t exist' );
61+ }
62+
63+ final String buildGradle = buildGradleFile.readAsStringSync ();
64+ final RegExp androidPluginRegExp =
65+ RegExp (r'com\.android\.tools\.build:gradle:(\d+\.\d+\.\d+)' );
66+
67+ section ('Use AGP 4.1.0' );
68+
69+ String newBuildGradle = buildGradle.replaceAll (
70+ androidPluginRegExp, 'com.android.tools.build:gradle:4.1.0' );
71+ print (newBuildGradle);
72+ buildGradleFile.writeAsString (newBuildGradle);
73+
74+ section ('Run flutter build apk using AGP 4.1.0' );
5175
5276 await inDirectory (exampleAppDir, () async {
5377 await flutter (
@@ -72,6 +96,55 @@ Future<void> main() async {
7296 return TaskResult .failure ('Failed to build app-release.apk' );
7397 }
7498
99+ section ('Clean' );
100+
101+ await inDirectory (exampleAppDir, () async {
102+ await flutter ('clean' );
103+ });
104+
105+ section ('Remove Gradle wrapper' );
106+
107+ Directory (path.join (exampleAppDir.path, 'android' , 'gradle' , 'wrapper' ))
108+ .deleteSync (recursive: true );
109+
110+ section ('Use AGP 3.3.0' );
111+
112+ newBuildGradle = buildGradle.replaceAll (
113+ androidPluginRegExp, 'com.android.tools.build:gradle:3.3.0' );
114+ print (newBuildGradle);
115+ buildGradleFile.writeAsString (newBuildGradle);
116+
117+ section ('Enable R8 in gradle.properties' );
118+
119+ final File gradleProperties =
120+ File (path.join (exampleAppDir.path, 'android' , 'gradle.properties' ));
121+
122+ if (! exists (gradleProperties)) {
123+ return TaskResult .failure ('$gradleProperties doesn\' t exist' );
124+ }
125+
126+ gradleProperties.writeAsString ('''
127+ org.gradle.jvmargs=-Xmx1536M
128+ android.useAndroidX=true
129+ android.enableJetifier=true
130+ android.enableR8=true''' );
131+
132+ section ('Run flutter build apk using AGP 3.3.0' );
133+
134+ await inDirectory (exampleAppDir, () async {
135+ await flutter (
136+ 'build' ,
137+ options: < String > [
138+ 'apk' ,
139+ '--target-platform=android-arm' ,
140+ ],
141+ );
142+ });
143+
144+ if (! exists (File (exampleApk))) {
145+ return TaskResult .failure ('Failed to build app-release.apk' );
146+ }
147+
75148 return TaskResult .success (null );
76149 } on TaskResult catch (taskResult) {
77150 return taskResult;
0 commit comments