Skip to content

Commit 9e0f0fe

Browse files
author
Emmanuel Garcia
authored
Add Gradle stacktrace and debug log level to verbose builds (flutter#101734)
1 parent 712667f commit 9e0f0fe

File tree

3 files changed

+131
-3
lines changed

3 files changed

+131
-3
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,8 @@ class AndroidGradleBuilder implements AndroidBuilder {
268268
_gradleUtils.getExecutable(project),
269269
];
270270
if (_logger.isVerbose) {
271+
command.add('--full-stacktrace');
272+
command.add('--debug');
271273
command.add('-Pverbose=true');
272274
} else {
273275
command.add('-q');
@@ -590,6 +592,8 @@ class AndroidGradleBuilder implements AndroidBuilder {
590592
'-PbuildNumber=$buildNumber'
591593
];
592594
if (_logger.isVerbose) {
595+
command.add('--full-stacktrace');
596+
command.add('--debug');
593597
command.add('-Pverbose=true');
594598
} else {
595599
command.add('-q');

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

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -732,16 +732,20 @@ class BufferLogger extends Logger {
732732
required this.terminal,
733733
required OutputPreferences outputPreferences,
734734
StopwatchFactory stopwatchFactory = const StopwatchFactory(),
735+
bool verbose = false,
735736
}) : _outputPreferences = outputPreferences,
736-
_stopwatchFactory = stopwatchFactory;
737+
_stopwatchFactory = stopwatchFactory,
738+
_verbose = verbose;
737739

738740
/// Create a [BufferLogger] with test preferences.
739741
BufferLogger.test({
740742
Terminal? terminal,
741743
OutputPreferences? outputPreferences,
744+
bool verbose = false,
742745
}) : terminal = terminal ?? Terminal.test(),
743746
_outputPreferences = outputPreferences ?? OutputPreferences.test(),
744-
_stopwatchFactory = const StopwatchFactory();
747+
_stopwatchFactory = const StopwatchFactory(),
748+
_verbose = verbose;
745749

746750
@override
747751
final OutputPreferences _outputPreferences;
@@ -751,8 +755,10 @@ class BufferLogger extends Logger {
751755

752756
final StopwatchFactory _stopwatchFactory;
753757

758+
final bool _verbose;
759+
754760
@override
755-
bool get isVerbose => false;
761+
bool get isVerbose => _verbose;
756762

757763
@override
758764
bool get supportsColor => terminal.supportsColor;

packages/flutter_tools/test/general.shard/android/android_gradle_builder_test.dart

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,69 @@ void main() {
128128
));
129129
});
130130

131+
testUsingContext('Verbose mode for APKs includes Gradle stacktrace and sets debug log level', () async {
132+
final AndroidGradleBuilder builder = AndroidGradleBuilder(
133+
logger: BufferLogger.test(verbose: true),
134+
processManager: processManager,
135+
fileSystem: fileSystem,
136+
artifacts: Artifacts.test(),
137+
usage: testUsage,
138+
gradleUtils: FakeGradleUtils(),
139+
platform: FakePlatform(),
140+
);
141+
processManager.addCommand(const FakeCommand(
142+
command: <String>[
143+
'gradlew',
144+
'--full-stacktrace',
145+
'--debug',
146+
'-Pverbose=true',
147+
'-Ptarget-platform=android-arm,android-arm64,android-x64',
148+
'-Ptarget=lib/main.dart',
149+
'-Pbase-application-name=io.flutter.app.FlutterApplication',
150+
'-Pdart-obfuscation=false',
151+
'-Ptrack-widget-creation=false',
152+
'-Ptree-shake-icons=false',
153+
'assembleRelease'
154+
],
155+
));
156+
157+
fileSystem.directory('android')
158+
.childFile('build.gradle')
159+
.createSync(recursive: true);
160+
161+
fileSystem.directory('android')
162+
.childFile('gradle.properties')
163+
.createSync(recursive: true);
164+
165+
fileSystem.directory('android')
166+
.childDirectory('app')
167+
.childFile('build.gradle')
168+
..createSync(recursive: true)
169+
..writeAsStringSync('apply from: irrelevant/flutter.gradle');
170+
171+
fileSystem.directory('build')
172+
.childDirectory('app')
173+
.childDirectory('outputs')
174+
.childDirectory('flutter-apk')
175+
.childFile('app-release.apk')
176+
.createSync(recursive: true);
177+
178+
await builder.buildGradleApp(
179+
project: FlutterProject.fromDirectoryTest(fileSystem.currentDirectory),
180+
androidBuildInfo: const AndroidBuildInfo(
181+
BuildInfo(
182+
BuildMode.release,
183+
null,
184+
treeShakeIcons: false,
185+
),
186+
),
187+
target: 'lib/main.dart',
188+
isBuildingBundle: false,
189+
localGradleErrors: <GradleHandledError>[],
190+
);
191+
expect(processManager, hasNoRemainingExpectations);
192+
});
193+
131194
testUsingContext('Can retry build on recognized exit code/stderr', () async {
132195
final AndroidGradleBuilder builder = AndroidGradleBuilder(
133196
logger: logger,
@@ -700,6 +763,61 @@ void main() {
700763
expect(processManager, hasNoRemainingExpectations);
701764
});
702765

766+
testUsingContext('Verbose mode for AARs includes Gradle stacktrace and sets debug log level', () async {
767+
final AndroidGradleBuilder builder = AndroidGradleBuilder(
768+
logger: BufferLogger.test(verbose: true),
769+
processManager: processManager,
770+
fileSystem: fileSystem,
771+
artifacts: Artifacts.test(),
772+
usage: testUsage,
773+
gradleUtils: FakeGradleUtils(),
774+
platform: FakePlatform(),
775+
);
776+
processManager.addCommand(const FakeCommand(
777+
command: <String>[
778+
'gradlew',
779+
'-I=/packages/flutter_tools/gradle/aar_init_script.gradle',
780+
'-Pflutter-root=/',
781+
'-Poutput-dir=build/',
782+
'-Pis-plugin=false',
783+
'-PbuildNumber=1.0',
784+
'--full-stacktrace',
785+
'--debug',
786+
'-Pverbose=true',
787+
'-Pdart-obfuscation=false',
788+
'-Ptrack-widget-creation=false',
789+
'-Ptree-shake-icons=false',
790+
'-Ptarget-platform=android-arm,android-arm64,android-x64',
791+
'assembleAarRelease'
792+
],
793+
));
794+
795+
final File manifestFile = fileSystem.file('pubspec.yaml');
796+
manifestFile.createSync(recursive: true);
797+
manifestFile.writeAsStringSync('''
798+
flutter:
799+
module:
800+
androidPackage: com.example.test
801+
'''
802+
);
803+
804+
fileSystem.file('.android/gradlew').createSync(recursive: true);
805+
fileSystem.file('.android/gradle.properties')
806+
.writeAsStringSync('irrelevant');
807+
fileSystem.file('.android/build.gradle')
808+
.createSync(recursive: true);
809+
fileSystem.directory('build/outputs/repo').createSync(recursive: true);
810+
811+
await builder.buildGradleAar(
812+
androidBuildInfo: const AndroidBuildInfo(BuildInfo(BuildMode.release, null, treeShakeIcons: false)),
813+
project: FlutterProject.fromDirectoryTest(fileSystem.currentDirectory),
814+
outputDirectory: fileSystem.directory('build/'),
815+
target: '',
816+
buildNumber: '1.0',
817+
);
818+
expect(processManager, hasNoRemainingExpectations);
819+
});
820+
703821
testUsingContext('gradle exit code and stderr is forwarded to tool exit', () async {
704822
final AndroidGradleBuilder builder = AndroidGradleBuilder(
705823
logger: logger,

0 commit comments

Comments
 (0)